feat: 调整优化实体加速器界面显示

This commit is contained in:
C-H716 2025-09-15 01:10:46 +08:00
parent 6d45627cbe
commit 93d0081132
8 changed files with 112 additions and 10 deletions

View File

@ -0,0 +1,33 @@
package com.extendedae_plus.ae.client.gui;
import appeng.client.gui.style.Blitter;
import com.extendedae_plus.ExtendedAEPlus;
import net.minecraft.resources.ResourceLocation;
public enum Icon {
REDSTONE_LOW(0, 0),
REDSTONE_HIGH(16, 0);
public final int x;
public final int y;
public final int width;
public final int height;
public static final ResourceLocation TEXTURE = new ResourceLocation(ExtendedAEPlus.MODID, "textures/guis/states.png");
public static final int TEXTURE_WIDTH = 256;
public static final int TEXTURE_HEIGHT = 256;
private Icon(int x, int y) {
this(x, y, 16, 16);
}
private Icon(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public Blitter getBlitter() {
return Blitter.texture(TEXTURE, TEXTURE_WIDTH, TEXTURE_HEIGHT).src(this.x, this.y, this.width, this.height);
}
}

View File

@ -29,6 +29,7 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
// 当前计算出的生效速度product of multipliers同步给客户端用于显示
@GuiSync(719) public int effectiveSpeed = 1;
@GuiSync(720) public double multiplier = 1.0;
@GuiSync(721) public boolean targetBlacklisted = false;
public boolean getAccelerateEnabled() {
return this.accelerateEnabled;
@ -73,8 +74,28 @@ public class EntitySpeedTickerMenu extends UpgradeableMenu<EntitySpeedTickerPart
} catch (Exception ignored) {}
this.multiplier = mult;
// 计算生效速度使用工具类从菜单直接计算 product with cap最多 8
this.effectiveSpeed = (int) PowerUtils.computeProductWithCapFromMenu(this, 8);
// 检查目标是否在黑名单中如果是则标记并将生效速度设为 0服务器端计算
boolean blacklisted = false;
try {
BlockEntity target = getHost().getLevel().getBlockEntity(getHost().getBlockEntity().getBlockPos().relative(getHost().getSide()));
if (target != null) {
String blockId = ForgeRegistries.BLOCKS.getKey(target.getBlockState().getBlock()).toString();
for (java.util.regex.Pattern p : ConfigParsingUtils.getCachedBlacklist(List.of(ModConfig.INSTANCE.entityTickerBlackList))) {
if (p.matcher(blockId).matches()) {
blacklisted = true;
break;
}
}
}
} catch (Exception ignored) {}
this.targetBlacklisted = blacklisted;
// 计算生效速度如果被黑名单则为 0否则进行正常计算使用工具类从菜单直接计算 product with cap最多 8
if (this.targetBlacklisted) {
this.effectiveSpeed = 0;
} else {
this.effectiveSpeed = (int) PowerUtils.computeProductWithCapFromMenu(this, 8);
}
// 如果在客户端刷新界面
if (isClientSide()) {

View File

@ -2,6 +2,7 @@ package com.extendedae_plus.ae.screen;
import appeng.api.config.Settings;
import appeng.api.config.YesNo;
import appeng.client.gui.Icon;
import appeng.client.gui.implementations.UpgradeableScreen;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.CommonButtons;
@ -41,6 +42,15 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
) {
@Override
public List<Component> getTooltipMessage() {
// 如果目标在黑名单中直接显示已禁用的提示
try {
if (menu != null && menu.targetBlacklisted) {
var title = Component.literal("实体加速");
var stateLine = Component.literal("已禁用(目标在黑名单)");
return List.of(title, stateLine);
}
} catch (Exception ignored) {}
boolean enabled = eap$entitySpeedTickerEnabled;
var title = Component.literal("实体加速");
var stateLine = enabled
@ -48,6 +58,23 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
: Component.literal("已关闭: 不会对目标方块实体进行加速");
return List.of(title, stateLine);
}
@Override
protected Icon getIcon() {
try {
if (menu != null && menu.targetBlacklisted) {
// 黑名单时显示禁用图标
return Icon.INVALID;
}
} catch (Exception ignored) {}
// 根据当前值显示不同图标可按需替换 Icon 常量
if (this.getCurrentValue() == YesNo.YES) {
return Icon.VALID;
} else {
return Icon.INVALID;
}
}
};
// 初始化后立刻对齐当前@GuiSync状态避免首帧显示不一致
eap$entitySpeedTickerToggle.set(this.eap$entitySpeedTickerEnabled ? YesNo.YES : YesNo.NO);
@ -66,7 +93,14 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
}
this.eap$entitySpeedTickerEnabled = desired;
this.eap$entitySpeedTickerToggle.set(desired ? YesNo.YES : YesNo.NO);
// 如果目标在黑名单中禁用切换并强制显示为关闭
if (this.menu != null && this.menu.targetBlacklisted) {
this.eap$entitySpeedTickerToggle.set(YesNo.NO);
this.eap$entitySpeedTickerToggle.active = false;
} else {
this.eap$entitySpeedTickerToggle.set(desired ? YesNo.YES : YesNo.NO);
this.eap$entitySpeedTickerToggle.active = true;
}
}
textData();
}
@ -76,6 +110,16 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
}
private void textData() {
// 如果目标被黑名单禁止则显示禁用状态并把数值显示为 0
if (getMenu().targetBlacklisted) {
setTextContent("enable", Component.translatable("screen.extendedae_plus.entity_speed_ticker.enable"));
setTextContent("speed", Component.translatable("screen.extendedae_plus.entity_speed_ticker.speed", 0));
setTextContent("energy", Component.translatable("screen.extendedae_plus.entity_speed_ticker.energy", Platform.formatPower(0.0, false)));
setTextContent("power_ratio", Component.translatable("screen.extendedae_plus.entity_speed_ticker.power_ratio", PowerUtils.formatPercentage(0.0)));
setTextContent("multiplier", Component.translatable("screen.extendedae_plus.entity_speed_ticker.multiplier", String.format("%.2fx", 0.0)));
return;
}
int energyCardCount = getMenu().energyCardCount;
double multiplier = getMenu().multiplier;
int effectiveSpeed = getMenu().effectiveSpeed;

View File

@ -23,6 +23,13 @@
"top": 6
}
},
"enable": {
"position": {
"top": 20,
"left": 88
},
"align": "CENTER"
},
"speed": {
"position": {
"top": 35,

View File

@ -45,6 +45,7 @@
"extendedae_plus.pattern.hovertext.player": "Encoded by %s",
"item.extendedae_plus.entity_speed_ticker": "Entity Speed Ticker",
"screen.extendedae_plus.entity_speed_ticker.enable": "§c§lThe machine has been disabled",
"screen.extendedae_plus.entity_speed_ticker.energy": "Energy Usage: %s FE/t",
"screen.extendedae_plus.entity_speed_ticker.power_ratio": "Power ratio: %s",
"screen.extendedae_plus.entity_speed_ticker.speed": "Current speed multiplier: %d",

View File

@ -45,6 +45,7 @@
"extendedae_plus.pattern.hovertext.player": "由 %s 编码",
"item.extendedae_plus.entity_speed_ticker": "实体加速器",
"screen.extendedae_plus.entity_speed_ticker.enable": "§c§l机器已被禁用",
"screen.extendedae_plus.entity_speed_ticker.energy": "能耗: %s FE/t",
"screen.extendedae_plus.entity_speed_ticker.power_ratio": "功耗比例: %s",
"screen.extendedae_plus.entity_speed_ticker.speed": "当前加速倍率: %d",

View File

@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": { "layer0": "extendedae_plus:item/entity_speed_card_x2" }
}

View File

@ -1,6 +1,7 @@
{
"parent": "ae2:item/cable_interface",
"textures": {
"front": "extendedae_plus:part/entity_speed_ticker_font"
"front": "extendedae_plus:part/entity_speed_ticker_font",
"back": "extendedae_plus:part/entity_speed_ticker_back"
}
}