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 {