feat: 添加实体加速器是否优先使用磁盘存储能源

This commit is contained in:
C-H716 2025-09-27 20:15:33 +08:00
parent be48565e75
commit 13a7a1f5ce
4 changed files with 58 additions and 29 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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"
}

View File

@ -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",