feat: 实体加速器界面添加能源显示单位切换

This commit is contained in:
C-H716 2025-09-12 01:11:09 +08:00
parent 4932b5e004
commit 3a35dc3430
2 changed files with 4 additions and 43 deletions

View File

@ -2,8 +2,10 @@ package com.extendedae_plus.ae.screen;
import appeng.client.gui.implementations.UpgradeableScreen;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.CommonButtons;
import com.extendedae_plus.ae.menu.EntitySpeedTickerMenu;
import com.extendedae_plus.util.PowerUtils;
import appeng.util.Platform;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
@ -12,6 +14,7 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
public EntitySpeedTickerScreen(
EntitySpeedTickerMenu menu, Inventory playerInventory, Component title, ScreenStyle style) {
super((C) menu, playerInventory, title, style);
this.addToLeftToolbar(CommonButtons.togglePowerUnit());
}
@Override
@ -34,7 +37,7 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
double remainingRatio = PowerUtils.getRemainingRatio(energyCardCount);
setTextContent("speed", Component.translatable("screen.extendedae_plus.entity_speed_ticker.speed", speed));
setTextContent("energy", Component.translatable("screen.extendedae_plus.entity_speed_ticker.energy", PowerUtils.formatPower(finalPower)));
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)));
setTextContent("multiplier", Component.translatable("screen.extendedae_plus.entity_speed_ticker.multiplier", String.format("%.2fx", multiplier)));
}

View File

@ -52,20 +52,6 @@ public final class PowerUtils {
return 0.5 * (1.0 - Math.pow(0.7, energyCardCount));
}
/**
* 计算最终能耗取整最小为 1
* @param speedCardCount 加速卡数量
* @param energyCardCount 能源卡数量
* @return 最终能耗int
*/
public static int getFinalPowerDraw(int speedCardCount, int energyCardCount) {
double raw = getRawPower(speedCardCount);
double reduction = getReductionPercent(energyCardCount);
// 与原始实现兼容raw * (1 - reduction) 后按 0.5 的单位转换 AE/FE 换算保持一致
double adjusted = raw * (1.0 - reduction) / 2.0;
return (int) Math.max(1, Math.round(adjusted));
}
/**
* 计算最终能耗浮点数
* @param speedCardCount 加速卡数量
@ -88,34 +74,6 @@ public final class PowerUtils {
return 1.0 - getReductionPercent(energyCardCount);
}
/**
* 将能耗数字按单位缩写K/M/G/T/P/E格式化为更短的字符串
* 例如 1500 -> "1.50K", 2000000 -> "2.00M"
*/
public static String formatPower(double value) {
double abs = Math.abs(value);
if (abs >= 1e18) return formatWithSuffix(value, 1e18, "E");
if (abs >= 1e15) return formatWithSuffix(value, 1e15, "P");
if (abs >= 1e12) return formatWithSuffix(value, 1e12, "T");
if (abs >= 1e9) return formatWithSuffix(value, 1e9, "G");
if (abs >= 1e6) return formatWithSuffix(value, 1e6, "M");
if (abs >= 1e3) return formatWithSuffix(value, 1e3, "K");
// 小于 1000 直接返回整数形式
if (Math.floor(value) == value) {
return String.format("%d", (long) value);
}
return String.format("%.2f", value);
}
private static String formatWithSuffix(double value, double unit, String suffix) {
double v = value / unit;
// 如果 v 是整数则不显示小数
if (Math.abs(v - Math.round(v)) < 1e-9) {
return String.format("%d%s", Math.round(v), suffix);
}
return String.format("%.2f%s", v, suffix);
}
/**
* 将剩余功耗比率格式化为百分比字符串例如 0.9 -> "90%"
*/