From c599dfb19886926a9cd1467f16364a4738f6f744 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Mon, 27 Apr 2026 21:40:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=90=88=E6=88=90=E7=95=8C=E9=9D=A2shift?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=B7=BB=E5=8A=A0=E4=B9=A6=E7=AD=BE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=B7=BB=E5=8A=A0=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae2/accessor/AEBaseScreenAccessor.java | 4 ++ .../ae2/accessor/AEBaseScreenInvoker.java | 10 ---- .../ae2/accessor/WidgetContainerAccessor.java | 14 +++++ .../client/gui/CraftConfirmScreenMixin.java | 57 +++++++++++++++++++ .../assets/extendedae_plus/lang/en_us.json | 5 +- .../assets/extendedae_plus/lang/zh_cn.json | 5 +- .../resources/extendedae_plus.mixins.json | 8 +-- 7 files changed, 87 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenInvoker.java create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/accessor/WidgetContainerAccessor.java create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/client/gui/CraftConfirmScreenMixin.java diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenAccessor.java b/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenAccessor.java index bf0924b..e644777 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenAccessor.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenAccessor.java @@ -1,6 +1,7 @@ package com.extendedae_plus.mixin.ae2.accessor; import appeng.client.gui.AEBaseScreen; +import appeng.client.gui.WidgetContainer; import appeng.client.gui.style.ScreenStyle; import appeng.menu.AEBaseMenu; import org.spongepowered.asm.mixin.Mixin; @@ -10,4 +11,7 @@ import org.spongepowered.asm.mixin.gen.Accessor; public interface AEBaseScreenAccessor { @Accessor(value = "style", remap = false) ScreenStyle eap$getStyle(); + + @Accessor("widgets") + WidgetContainer eap$getWidgets(); } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenInvoker.java b/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenInvoker.java deleted file mode 100644 index 0ec30f9..0000000 --- a/src/main/java/com/extendedae_plus/mixin/ae2/accessor/AEBaseScreenInvoker.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.extendedae_plus.mixin.ae2.accessor; - -import appeng.client.gui.AEBaseScreen; -import appeng.menu.AEBaseMenu; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(AEBaseScreen.class) -public interface AEBaseScreenInvoker { - // 空接口:避免在 AEBaseScreen 上声明不存在方法的 Invoker 导致编译错误 -} diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/accessor/WidgetContainerAccessor.java b/src/main/java/com/extendedae_plus/mixin/ae2/accessor/WidgetContainerAccessor.java new file mode 100644 index 0000000..2accade --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/accessor/WidgetContainerAccessor.java @@ -0,0 +1,14 @@ +package com.extendedae_plus.mixin.ae2.accessor; + +import appeng.client.gui.WidgetContainer; +import net.minecraft.client.gui.components.AbstractWidget; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(value = WidgetContainer.class, remap = false) +public interface WidgetContainerAccessor { + @Accessor("widgets") + Map eap$getWidgetsMap(); +} diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/CraftConfirmScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/CraftConfirmScreenMixin.java new file mode 100644 index 0000000..b10d51d --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/CraftConfirmScreenMixin.java @@ -0,0 +1,57 @@ +package com.extendedae_plus.mixin.ae2.client.gui; + +import appeng.client.gui.WidgetContainer; +import appeng.client.gui.me.crafting.CraftConfirmScreen; +import appeng.core.localization.GuiText; +import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor; +import com.extendedae_plus.mixin.ae2.accessor.WidgetContainerAccessor; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.neoforged.fml.ModList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + + +@Mixin(value = CraftConfirmScreen.class, remap = false) +public class CraftConfirmScreenMixin { + + @Unique + private static final Component EAP_CANCEL_TEXT = GuiText.Cancel.text(); + @Unique + private static final Component EAP_BOOKMARK_TEXT = Component.translatable("gui.extendedae_plus.add_bookmark"); + @Unique + private static final Component EAP_BOOKMARK_TOOLTIP = Component.translatable("tooltip.extendedae_plus.add_missing_to_jei_bookmark"); + + @Inject(method = "updateBeforeRender", at = @At("TAIL"), remap = false) + private void eap$updateCancelButtonText(CallbackInfo ci) { + if (!ModList.get().isLoaded("jei")){ + return; + } + + CraftConfirmScreen self = (CraftConfirmScreen) (Object) this; + try { + WidgetContainer widgets = ((AEBaseScreenAccessor) self).eap$getWidgets(); + if (widgets == null) return; + + AbstractWidget cancelWidget = ((WidgetContainerAccessor) widgets).eap$getWidgetsMap().get("cancel"); + if (!(cancelWidget instanceof Button cancelButton)) return; + + boolean shiftDown = Screen.hasShiftDown(); + + if (shiftDown) { + cancelButton.setMessage(EAP_BOOKMARK_TEXT); + cancelButton.setTooltip(Tooltip.create(EAP_BOOKMARK_TOOLTIP)); + } else { + cancelButton.setMessage(EAP_CANCEL_TEXT); + cancelButton.setTooltip(null); + } + } catch (Throwable ignored) { + } + } +} diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index 41981ea..097e187 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -275,5 +275,8 @@ "extendedae_plus.jade.network.online": "Online", "extendedae_plus.jade.network.offline": "Offline", - "extendedae_plus.screen.global_controller_title": "Pattern Provider Status Controller" + "extendedae_plus.screen.global_controller_title": "Pattern Provider Status Controller", + + "gui.extendedae_plus.add_bookmark": "Add Bookmark", + "tooltip.extendedae_plus.add_missing_to_jei_bookmark": "Add missing items to JEI bookmarks" } diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index 97e90ca..5d3e841 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -270,5 +270,8 @@ "extendedae_plus.jade.network.online": "设备在线", "extendedae_plus.jade.network.offline": "设备离线", - "extendedae_plus.screen.global_controller_title": "样板供应器状态控制器" + "extendedae_plus.screen.global_controller_title": "样板供应器状态控制器", + + "gui.extendedae_plus.add_bookmark": "添加书签", + "tooltip.extendedae_plus.add_missing_to_jei_bookmark": "添加缺失物品到JEI书签" } diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index d230e40..11911ac 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -20,8 +20,8 @@ "ae2.AEProcessingPatternMixin", "ae2.CraftingCalculationMixin", "ae2.CraftingCPUClusterMixin", - "ae2.accessor.CraftingCPUClusterAccessor", "ae2.EncodedPatternItemMixin", + "ae2.accessor.CraftingCPUClusterAccessor", "ae2.accessor.CraftingCpuLogicAccessor", "ae2.accessor.ExecutingCraftingJobAccessor", "ae2.accessor.ExecutingCraftingJobTaskProgressAccessor", @@ -62,7 +62,6 @@ "extendedae.common.PartExPatternProviderMixin", "extendedae.common.TileExPatternProviderMixin", "extendedae.common.matrix.ClusterAssemblerMatrixMixin", - "extendedae.common.matrix.ClusterAssemblerMatrixMixin", "extendedae.container.ContainerAssemblerMatrixPatternSlotTrackerMixin", "extendedae.container.ContainerExPatternProviderMixin", "extendedae.container.ContainerExPatternTerminalMixin", @@ -76,18 +75,19 @@ "advancedae.client.gui.SmallAdvPatternProviderScreenMixin", "ae2.QuartzCuttingKnifeItemMixin", "ae2.accessor.AEBaseScreenAccessor", - "ae2.accessor.AEBaseScreenInvoker", "ae2.accessor.MEStorageScreenAccessor", "ae2.accessor.PatternAccessTermScreenAccessor", "ae2.accessor.PatternAccessTermScreenSlotsRowAccessor", + "ae2.accessor.WidgetContainerAccessor", "ae2.client.gui.AEBaseScreenMixin", + "ae2.client.gui.CraftConfirmScreenMixin", "ae2.client.gui.InterfaceScreenMixin", - "ae2.client.gui.ProcessingEncodingPanelMixin", "ae2.client.gui.PatternEncodingTermScreenMixin", "ae2.client.gui.PatternEncodingTermUploadMixin", "ae2.client.gui.PatternProviderCloseMixin", "ae2.client.gui.PatternProviderScreenUpgradesMixin", "ae2.client.gui.PatternProviderSmartFeaturesMixin", + "ae2.client.gui.ProcessingEncodingPanelMixin", "ae2.client.gui.ScreenStyleMixin", "ae2.client.gui.SlotGridLayoutMixin", "ae2.menu.CraftConfirmMenuGoBackMixin",