feat: 实体加速器界面添加能源显示单位切换
This commit is contained in:
parent
4932b5e004
commit
3a35dc3430
|
|
@ -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)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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%")
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user