From 72d0bbeaff13df58e193535be1cd00476c7a2744 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Mon, 29 Sep 2025 21:00:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae/parts/EntitySpeedTickerPart.java | 60 ++++++++----------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java b/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java index b012eda..f2df8a6 100644 --- a/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java +++ b/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java @@ -296,45 +296,33 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick IEnergyService energyService = getMainNode().getGrid().getEnergyService(); MEStorage storage = getMainNode().getGrid().getStorageService().getInventory(); IActionSource source = IActionSource.ofMachine(this); - boolean appFluxLoaded = ModList.get().isLoaded("appflux"); - boolean preferDiskEnergy = appFluxLoaded && ModConfig.INSTANCE.prioritizeDiskEnergy; - // 如果 appflux 存在且优先磁盘能量,尝试提取 FE 能量 - if (appFluxLoaded && preferDiskEnergy) { - if (tryExtractFE(energyService, storage, requiredPower, source)) { - return true; + // 优先级:FE(如果优先磁盘) -> AE -> FE(如果未优先磁盘) + boolean[] attempts = ModConfig.INSTANCE.prioritizeDiskEnergy ? new boolean[]{true, false, true} : new boolean[]{false, true, false}; + + for (int i = 0; i < attempts.length; i++) { + if (!attempts[i]) continue; + if (i == 0 || i == 2) { // FE 提取 + if (!FE_UNAVAILABLE && cachedFEExtractMethod != null) { + try { + long feRequired = (long) requiredPower << 1; + long feExtracted = (long) cachedFEExtractMethod.invoke(null, energyService, storage, feRequired, source); + if (feExtracted >= feRequired) { + updateNetworkEnergySufficient(true); + return true; + } + } catch (Exception e) { + FE_UNAVAILABLE = true; + } + } + } else { // AE 提取 + double extracted = energyService.extractAEPower(requiredPower, Actionable.MODULATE, PowerMultiplier.CONFIG); + if (extracted >= requiredPower) { + updateNetworkEnergySufficient(true); + return true; + } } } - - // 尝试提取 AE 能量(当 appflux 不存在、优先 AE 能量或 FE 提取失败时) - double simulated = energyService.extractAEPower(requiredPower, Actionable.SIMULATE, PowerMultiplier.CONFIG); - if (simulated >= requiredPower) { - double extracted = energyService.extractAEPower(requiredPower, Actionable.MODULATE, PowerMultiplier.CONFIG); - boolean sufficient = extracted >= requiredPower; - updateNetworkEnergySufficient(sufficient); - return sufficient; - } - updateNetworkEnergySufficient(false); - - // 如果 appflux 存在且优先 AE 能量,尝试提取 FE 能量作为备用 - if (appFluxLoaded && !preferDiskEnergy) { - return tryExtractFE(energyService, storage, requiredPower, source); - } - return false; - } - - private boolean tryExtractFE(IEnergyService energyService, MEStorage storage, double requiredPower, IActionSource source) { - if (FE_UNAVAILABLE || cachedFEExtractMethod == null) return false; - try { - long feRequired = (long) requiredPower << 1; - long feExtracted = (long) cachedFEExtractMethod.invoke(null, energyService, storage, feRequired, source); - if (feExtracted >= feRequired) { - updateNetworkEnergySufficient(true); - return true; - } - } catch (Exception e) { - FE_UNAVAILABLE = true; - } updateNetworkEnergySufficient(false); return false; }