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 6604f80..1d71ddf 100644 --- a/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java +++ b/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java @@ -267,8 +267,17 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka 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; - // 优先尝试提取 AE 能量 + // 如果 appflux 存在且优先磁盘能量,尝试提取 FE 能量 + if (appFluxLoaded && preferDiskEnergy) { + if (tryExtractFE(energyService, storage, requiredPower, source)) { + 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); @@ -278,29 +287,33 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka } updateNetworkEnergySufficient(false); - // AE 能量不足,尝试从磁盘提取 FE 能量(如果 Applied Flux 存在) - if (ModList.get().isLoaded("appflux")) { - try { - Class helperClass = Class.forName("com.extendedae_plus.util.FluxEnergyHelper"); - Method extractMethod = helperClass.getMethod( - "extractFE", - IEnergyService.class, - MEStorage.class, - long.class, - IActionSource.class - ); - long feRequired = (long) requiredPower << 1; // 1 AE = 2 FE - long feExtracted = (long) extractMethod.invoke(null, energyService, storage, feRequired, source); - if (feExtracted >= feRequired) { - updateNetworkEnergySufficient(true); - return true; - } - } catch (Exception e) { - // 如果反射失败,视为 FE 不可用 - } - 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) { + try { + Class helperClass = Class.forName("com.extendedae_plus.util.FluxEnergyHelper"); + Method extractMethod = helperClass.getMethod( + "extractFE", + IEnergyService.class, + MEStorage.class, + long.class, + IActionSource.class + ); + long feRequired = (long) requiredPower << 1; // 1 AE = 2 FE + long feExtracted = (long) extractMethod.invoke(null, energyService, storage, feRequired, source); + if (feExtracted >= feRequired) { + updateNetworkEnergySufficient(true); + return true; + } + } catch (Exception e) { + // 如果反射失败,视为 FE 不可用 + } + updateNetworkEnergySufficient(false); return false; } diff --git a/src/main/java/com/extendedae_plus/config/ModConfig.java b/src/main/java/com/extendedae_plus/config/ModConfig.java index 413c54b..173ae83 100644 --- a/src/main/java/com/extendedae_plus/config/ModConfig.java +++ b/src/main/java/com/extendedae_plus/config/ModConfig.java @@ -125,4 +125,11 @@ public final class ModConfig { @Configurable.Range(min = 100, max = Integer.MAX_VALUE) public int craftingPauseThreshold = 100000; + @Configurable + @Configurable.Comment(value = { + "是否优先从磁盘提取FE能量(仅当Applied Flux模组存在时生效)", + "开启后,将优先尝试从磁盘提取FE能量;反之优先消耗AE网络中的能量" + }) + @Configurable.Synchronized + public boolean prioritizeDiskEnergy = true; } \ No newline at end of file diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index 9d88bc6..3e8a67d 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -27,6 +27,12 @@ "tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b—§4A §dUni§cverse §eWith§ain §6A §bSin§5gle §9Point", "tooltip.extendedae_plus.entity_speed_card.multiplier": "Multiplier: %s", "tooltip.extendedae_plus.entity_speed_card.max": "Max effective: %s x", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip": "Assembler Matrix Upload Core", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload": "Upload to Assembler Matrix", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_success": "Pattern uploaded to Assembler Matrix", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_not_crafting": "Only crafting patterns supported, processing patterns ignored", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_no_matrix": "No formed Assembler Matrix found in network", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_full": "Assembler Matrix pattern storage full or cannot insert", "block.extendedae_plus.wireless_transceiver": "Wireless Transceiver", "block.extendedae_plus.4x_crafting_accelerator": "4x Crafting Accelerator", @@ -88,11 +94,13 @@ "config.extendedae_plus.option.entityTickerBlackList": "Entity Ticker Blacklist", "config.extendedae_plus.option.entityTickerMultipliers": "Entity Ticker Extra Consumption Multipliers", "config.extendedae_plus.option.craftingPauseThreshold": "AE synthesis calculation pause check threshold", - "block.extendedae_plus.assembler_matrix_upload_core": "Assembler Matrix Upload Core", + "config.extendedae_plus.option.prioritizeDiskEnergy": "Prioritize FE energy from disk (requires Applied Flux)", "item.extendedae_plus.channel_card": "Channel Card", "item.extendedae_plus.channel_card.channel": "Frequency: %s", "item.extendedae_plus.channel_card.channel.unset": "Frequency: Unset", "item.extendedae_plus.channel_card.set": "Frequency set to: %s", + "group.pattern_provider.name": "Pattern Provider", + "group.entity_ticker.name": "Entity Accelerator", "group.storage.name": "StorageBus" } \ No newline at end of file diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index eb60ec2..0a2343c 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -27,6 +27,12 @@ "tooltip.extendedae_plus.infinity_biginteger_cell.summon2": "§b——§4方§d寸§c之§e间§a, §6自§b有§5千§9寰", "tooltip.extendedae_plus.entity_speed_card.multiplier": "乘数: %s", "tooltip.extendedae_plus.entity_speed_card.max": "最大生效: %s 倍", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip": "装配矩阵上传核心", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload": "上传到装配矩阵", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_success": "样板已上传到装配矩阵", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_not_crafting": "仅支持上传合成样板,处理样板将被忽略", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_no_matrix": "未在当前网络中找到已成型的装配矩阵", + "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_full": "装配矩阵的样板仓已满或无法插入", "block.extendedae_plus.wireless_transceiver": "无线收发器", "block.extendedae_plus.4x_crafting_accelerator": "4x并行处理单元", @@ -87,13 +93,8 @@ "config.extendedae_plus.option.entityTickerCost": "实体加速器能量消耗基础值", "config.extendedae_plus.option.entityTickerBlackList": "实体加速器黑名单", "config.extendedae_plus.option.entityTickerMultipliers": "实体加速器额外消耗倍率", + "config.extendedae_plus.option.prioritizeDiskEnergy": "优先从磁盘提取FE能量(仅当Applied Flux模组存在时生效)", "config.extendedae_plus.option.craftingPauseThreshold": "AE合成计算暂停检查阈值", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip": "装配矩阵上传核心", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload": "上传到装配矩阵", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_success": "样板已上传到装配矩阵", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_not_crafting": "仅支持上传合成样板,处理样板将被忽略", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_no_matrix": "未在当前网络中找到已成型的装配矩阵", - "block.extendedae_plus.assembler_matrix_upload_core.tooltip.upload_fail_full": "装配矩阵的样板仓已满或无法插入", "item.extendedae_plus.channel_card": "频道卡", "item.extendedae_plus.channel_card.channel": "频率:%s",