From 75817040a28d44b2ce517cdb3fc7a78529972fe5 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Tue, 2 Jun 2026 20:29:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E7=BF=BB=E5=80=8D?= =?UTF-8?q?=E9=99=90=E5=88=B6=E8=BE=93=E5=85=A5=E6=A1=86=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=B8=BAae=E8=BE=93=E5=85=A5=E6=A1=86=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/IInputBackgroundRenderer.java | 14 +++++ .../gui/AdvPatternProviderScreenMixin.java | 55 ++++++++++++------- .../SmallAdvPatternProviderScreenMixin.java | 55 ++++++++++++------- .../ae2/client/gui/AEBaseScreenMixin.java | 9 +++ .../PatternProviderSmartFeaturesMixin.java | 55 ++++++++++++------- .../com/extendedae_plus/util/GuiUtil.java | 10 +++- 6 files changed, 138 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/api/IInputBackgroundRenderer.java diff --git a/src/main/java/com/extendedae_plus/api/IInputBackgroundRenderer.java b/src/main/java/com/extendedae_plus/api/IInputBackgroundRenderer.java new file mode 100644 index 0000000..30cf712 --- /dev/null +++ b/src/main/java/com/extendedae_plus/api/IInputBackgroundRenderer.java @@ -0,0 +1,14 @@ +package com.extendedae_plus.api; + +import net.minecraft.client.gui.GuiGraphics; + +/** + * 用于在 AEBaseScreen.drawBG 中渲染输入框背景的回调接口 + */ +public interface IInputBackgroundRenderer { + /** + * 在背景层绘制输入框外部背景 + * @param guiGraphics 图形上下文 + */ + void eap$renderInputBackground(GuiGraphics guiGraphics); +} diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/client/gui/AdvPatternProviderScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/advancedae/client/gui/AdvPatternProviderScreenMixin.java index 71429ef..e666cef 100644 --- a/src/main/java/com/extendedae_plus/mixin/advancedae/client/gui/AdvPatternProviderScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/client/gui/AdvPatternProviderScreenMixin.java @@ -2,8 +2,11 @@ package com.extendedae_plus.mixin.advancedae.client.gui; import appeng.api.config.YesNo; import appeng.client.gui.AEBaseScreen; +import appeng.client.gui.Icon; import appeng.client.gui.style.ScreenStyle; +import appeng.client.gui.widgets.AETextField; import appeng.client.gui.widgets.SettingToggleButton; +import com.extendedae_plus.api.IInputBackgroundRenderer; import com.extendedae_plus.api.advancedBlocking.IPatternProviderMenuAdvancedSync; import com.extendedae_plus.api.smartDoubling.IPatternProviderMenuDoublingSync; import com.extendedae_plus.init.ModNetwork; @@ -11,9 +14,8 @@ import com.extendedae_plus.network.provider.SetPerProviderScalingLimitC2SPacket; import com.extendedae_plus.network.provider.ToggleAdvancedBlockingC2SPacket; import com.extendedae_plus.network.provider.ToggleSmartDoublingC2SPacket; import com.extendedae_plus.util.GuiUtil; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.Tooltip; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.pedroksl.advanced_ae.client.gui.AdvPatternProviderScreen; @@ -24,31 +26,35 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.Collections; import java.util.List; import static com.extendedae_plus.util.GuiUtil.createToggle; import static com.extendedae_plus.util.Logger.EAP$LOGGER; /** - * 为高级ae样板供应器界面添加“高级阻挡模式”按钮。 + * 为高级ae样板供应器界面添加"高级阻挡模式"按钮。 * - 位于左侧工具栏 * - 点击仅发送 C2S 切换请求;状态由 AE2 @GuiSync 回传决定 */ @Mixin(AdvPatternProviderScreen.class) -public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen { +public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen implements IInputBackgroundRenderer { // 高级阻挡模式切换按钮 @Unique private SettingToggleButton eap$AdvancedBlockingToggle; // 智能翻倍切换按钮 @Unique private SettingToggleButton eap$SmartDoublingToggle; // 智能翻倍上限输入框 - @Unique private EditBox eap$PerProviderLimitInput; - + @Unique private AETextField eap$PerProviderLimitInput; // 当前高级阻挡模式是否启用 @Unique private boolean eap$AdvancedBlockingEnabled = false; // 当前智能翻倍是否启用 @Unique private boolean eap$SmartDoublingEnabled = false; // 当前智能翻倍上限 @Unique private int eap$PerProviderScalingLimit = 0; + @Unique private int eap$inputBgX; + @Unique private int eap$inputBgY; + @Unique private int eap$inputBgW; + @Unique private int eap$inputBgH; public AdvPatternProviderScreenMixin(AdvPatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style) { super(menu, playerInventory, title, style); @@ -104,15 +110,14 @@ public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen { + // 缩放上限输入框 + this.eap$PerProviderLimitInput = GuiUtil.createPerProviderLimitInput(this.style, this.font, this.eap$PerProviderScalingLimit, limit -> { this.eap$PerProviderScalingLimit = limit; ModNetwork.CHANNEL.sendToServer(new SetPerProviderScalingLimitC2SPacket(limit)); }); this.addRenderableWidget(this.eap$PerProviderLimitInput); } - /* ---------------------------- 注入点 ---------------------------- */ @Inject(method = "", at = @At("RETURN")) private void eap$onInit(AdvPatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) { // 初始化时同步服务端状态并创建控件 @@ -165,31 +170,43 @@ public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen { +public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen implements IInputBackgroundRenderer { // 高级阻挡模式切换按钮 @Unique private SettingToggleButton eap$AdvancedBlockingToggle; // 智能翻倍切换按钮 @Unique private SettingToggleButton eap$SmartDoublingToggle; // 智能翻倍上限输入框 - @Unique private EditBox eap$PerProviderLimitInput; - + @Unique private AETextField eap$PerProviderLimitInput; // 当前高级阻挡模式是否启用 @Unique private boolean eap$AdvancedBlockingEnabled = false; // 当前智能翻倍是否启用 @Unique private boolean eap$SmartDoublingEnabled = false; // 当前智能翻倍上限 @Unique private int eap$PerProviderScalingLimit = 0; + @Unique private int eap$inputBgX; + @Unique private int eap$inputBgY; + @Unique private int eap$inputBgW; + @Unique private int eap$inputBgH; public SmallAdvPatternProviderScreenMixin(SmallAdvPatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style) { super(menu, playerInventory, title, style); @@ -105,15 +111,14 @@ public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen { + // 缩放上限输入框 + this.eap$PerProviderLimitInput = GuiUtil.createPerProviderLimitInput(this.style, this.font, this.eap$PerProviderScalingLimit, limit -> { this.eap$PerProviderScalingLimit = limit; ModNetwork.CHANNEL.sendToServer(new SetPerProviderScalingLimitC2SPacket(limit)); }); this.addRenderableWidget(this.eap$PerProviderLimitInput); } - /* ---------------------------- 注入点 ---------------------------- */ @Inject(method = "", at = @At("RETURN")) private void eap$onInit(SmallAdvPatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) { // 初始化时同步服务端状态并创建控件 @@ -166,31 +171,43 @@ public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen extends AEBaseScreen { +public abstract class PatternProviderSmartFeaturesMixin extends AEBaseScreen implements IInputBackgroundRenderer { // 高级阻挡模式切换按钮 @Unique private SettingToggleButton eap$AdvancedBlockingToggle; // 智能翻倍切换按钮 @Unique private SettingToggleButton eap$SmartDoublingToggle; // 智能翻倍上限输入框 - @Unique private EditBox eap$PerProviderLimitInput; - + @Unique private AETextField eap$PerProviderLimitInput; // 当前高级阻挡模式是否启用 @Unique private boolean eap$AdvancedBlockingEnabled = false; // 当前智能翻倍是否启用 @Unique private boolean eap$SmartDoublingEnabled = false; // 当前智能翻倍上限 @Unique private int eap$PerProviderScalingLimit = 0; + @Unique private int eap$inputBgX; + @Unique private int eap$inputBgY; + @Unique private int eap$inputBgW; + @Unique private int eap$inputBgH; public PatternProviderSmartFeaturesMixin(C menu, Inventory playerInventory, Component title, ScreenStyle style) { super(menu, playerInventory, title, style); @@ -107,15 +113,14 @@ public abstract class PatternProviderSmartFeaturesMixin { + // 缩放上限输入框 + this.eap$PerProviderLimitInput = GuiUtil.createPerProviderLimitInput(this.style, this.font, this.eap$PerProviderScalingLimit, limit -> { this.eap$PerProviderScalingLimit = limit; ModNetwork.CHANNEL.sendToServer(new SetPerProviderScalingLimitC2SPacket(limit)); }); this.addRenderableWidget(this.eap$PerProviderLimitInput); } - /* ---------------------------- 注入点 ---------------------------- */ @Inject(method = "", at = @At("RETURN")) private void eap$onInit(C menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) { // 初始化时同步服务端状态并创建控件 @@ -169,30 +174,32 @@ public abstract class PatternProviderSmartFeaturesMixin { try {