feat: 添加实体加速器能量不足提示

This commit is contained in:
C-H716 2025-09-23 23:23:08 +08:00
parent dbf2ad7be2
commit 8c3af60eb1
6 changed files with 45 additions and 5 deletions

View File

@ -30,6 +30,8 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
@GuiSync(719) public int effectiveSpeed = 1;
@GuiSync(720) public double multiplier = 1.0;
@GuiSync(721) public boolean targetBlacklisted = false;
// 来自部件的网络能量不足提示服务端设置客户端用于显示警告
@GuiSync(722) public boolean networkEnergyInsufficient = false;
public boolean getAccelerateEnabled() {
return this.accelerateEnabled;
@ -97,6 +99,14 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
this.effectiveSpeed = (int) PowerUtils.computeProductWithCapFromMenu(this, 8);
}
// 从部件同步网络能量不足状态防御性编程避免 NPE
try {
EntitySpeedTickerPart host = getHost();
if (host != null) {
this.networkEnergyInsufficient = host.isNetworkEnergyInsufficient();
}
} catch (Exception ignored) {}
// 如果在客户端刷新界面
if (isClientSide()) {
if (Minecraft.getInstance().screen instanceof EntitySpeedTickerScreen screen) {

View File

@ -84,16 +84,36 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
// 控制是否启用加速默认启用
private boolean accelerateEnabled = true;
// 标记网络中是否能量不足用于 GUI 提示
private boolean networkEnergyInsufficient = true;
public boolean getAccelerateEnabled() {
return this.accelerateEnabled;
}
public boolean isNetworkEnergyInsufficient() {
return this.networkEnergyInsufficient;
}
public void setAccelerateEnabled(boolean accelerateEnabled) {
this.accelerateEnabled = accelerateEnabled;
}
/**
* 更新网络能量不足标记并在菜单存在且状态变化时触发同步
* @param insufficient 是否能量不足
*/
private void updateNetworkEnergyInsufficient(boolean insufficient) {
if (this.networkEnergyInsufficient == insufficient) return;
this.networkEnergyInsufficient = insufficient;
if (this.menu != null) {
try {
this.menu.broadcastChanges();
} catch (Exception ignored) {}
}
}
/**
* 获取当前状态下的静态模型用于渲染
* @return 当前状态的模型
@ -239,11 +259,17 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTicka
// 先模拟提取以检查网络中是否有足够能量再真正抽取
double simulated = getMainNode().getGrid().getEnergyService()
.extractAEPower(requiredPower, Actionable.SIMULATE, PowerMultiplier.CONFIG);
if (simulated < requiredPower) return;
if (simulated < requiredPower) {
updateNetworkEnergyInsufficient(false);
return;
}
double extractedPower = getMainNode().getGrid().getEnergyService()
.extractAEPower(requiredPower, Actionable.MODULATE, PowerMultiplier.CONFIG);
if (extractedPower < requiredPower) return;
if (extractedPower < requiredPower) {
updateNetworkEnergyInsufficient(false);
return;
}
// 计算加速倍数基于 2 的次方并把 8 张映射到最大 1024x2^10
// 已由 product 计算得到 speed上面已在没有卡时提前返回

View File

@ -123,10 +123,13 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
int energyCardCount = getMenu().energyCardCount;
double multiplier = getMenu().multiplier;
int effectiveSpeed = getMenu().effectiveSpeed;
double finalPower = PowerUtils.computeFinalPowerForProduct(effectiveSpeed, energyCardCount);
double remainingRatio = PowerUtils.getRemainingRatio(energyCardCount);
// 如果网络能量不足优先显示警告信息并在能量值处显示 0
if (getMenu().networkEnergyInsufficient) {
setTextContent("enable", Component.translatable("screen.extendedae_plus.entity_speed_ticker.warning_network_energy_insufficient"));
}
setTextContent("speed", Component.translatable("screen.extendedae_plus.entity_speed_ticker.speed", effectiveSpeed));
setTextContent("energy", Component.translatable("screen.extendedae_plus.entity_speed_ticker.energy", Platform.formatPower(finalPower, false)));
setTextContent("power_ratio", Component.translatable("screen.extendedae_plus.entity_speed_ticker.power_ratio", PowerUtils.formatPercentage(remainingRatio)));

View File

@ -50,8 +50,7 @@
"left": 88
},
"align": "CENTER"
}
,
},
"multiplier": {
"position": {
"top": 80,

View File

@ -54,6 +54,7 @@
"screen.extendedae_plus.entity_speed_ticker.power_ratio": "Power ratio: %s",
"screen.extendedae_plus.entity_speed_ticker.speed": "Current speed multiplier: %d",
"screen.extendedae_plus.entity_speed_ticker.multiplier": "Extra consumption multiplier: %s",
"screen.extendedae_plus.entity_speed_ticker.warning_network_energy_insufficient": "§c§lInsufficient network energy",
"item.extendedae_plus.entity_speed_ticker.tip.requirement": "Requires Entity Acceleration Card(s) to enable acceleration",
"item.extendedae_plus.entity_speed_ticker.tip.max": "Maximum up to 1024x speed",

View File

@ -54,6 +54,7 @@
"screen.extendedae_plus.entity_speed_ticker.power_ratio": "功耗比例: %s",
"screen.extendedae_plus.entity_speed_ticker.speed": "当前加速倍率: %d",
"screen.extendedae_plus.entity_speed_ticker.multiplier": "额外消耗倍率: %s",
"screen.extendedae_plus.entity_speed_ticker.warning_network_energy_insufficient": "§c§l网络能量不足",
"item.extendedae_plus.entity_speed_ticker.tip.requirement": "需要放入实体加速卡以启用加速",
"item.extendedae_plus.entity_speed_ticker.tip.max": "最高可达 1024x 加速",