From 1d55920af930504bdbd25c97f337ca52414fafb6 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Thu, 28 Aug 2025 12:28:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E4=BE=9B=E5=BA=94=E5=99=A8=E5=8F=91?= =?UTF-8?q?=E9=85=8D=E6=9D=90=E6=96=99=E8=BF=9B=E8=A1=8C=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8ScaledProcessingPattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae2/CraftingServiceGetProvidersMixin.java | 29 ++++++++++++++ ...ernProviderLogicContainsRedirectMixin.java | 40 +++++++++++++++++++ .../resources/extendedae_plus.mixins.json | 7 +++- 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/CraftingServiceGetProvidersMixin.java create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicContainsRedirectMixin.java diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/CraftingServiceGetProvidersMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingServiceGetProvidersMixin.java new file mode 100644 index 0000000..2361c8a --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingServiceGetProvidersMixin.java @@ -0,0 +1,29 @@ +package com.extendedae_plus.mixin.ae2; + +import appeng.api.crafting.IPatternDetails; +import appeng.me.service.CraftingService; +import com.extendedae_plus.content.ScaledProcessingPattern; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +/** + * 在 CraftingService.getProviders 调用点修改传入的 IPatternDetails 参数(回退到网络注册的原始样板) + */ +@Mixin(value = CraftingService.class, remap = false) +public class CraftingServiceGetProvidersMixin { + + @ModifyArg(method = "getProviders(Lappeng/api/crafting/IPatternDetails;)Ljava/lang/Iterable;", + at = @At(value = "INVOKE", target = "Lappeng/me/service/helpers/NetworkCraftingProviders;getMediums(Lappeng/api/crafting/IPatternDetails;)Ljava/lang/Iterable;"), + index = 0) + private IPatternDetails extendedae_plus$modifyGetProvidersArg(IPatternDetails original) { + IPatternDetails base = null; + if (original instanceof ScaledProcessingPattern scaledProcessingPattern) { + base = scaledProcessingPattern.getOriginal(); + System.out.println("[extendedae_plus] CraftingService.getProviders mixin invoked for: " + base); + } + return base == null ? original : base; + } +} + + diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicContainsRedirectMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicContainsRedirectMixin.java new file mode 100644 index 0000000..ec589d9 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicContainsRedirectMixin.java @@ -0,0 +1,40 @@ +package com.extendedae_plus.mixin.ae2; + +import appeng.api.crafting.IPatternDetails; +import appeng.helpers.patternprovider.PatternProviderLogic; +import com.extendedae_plus.content.ScaledProcessingPattern; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.List; + +/** + * Redirect PatternProviderLogic.pushPattern 中对 List.contains 的调用, + * 在遇到缩放样板时回退匹配到原始样板实例。 + */ +@Mixin(value = PatternProviderLogic.class, remap = false) +public class PatternProviderLogicContainsRedirectMixin { + + @Redirect(method = "pushPattern", + at = @At( + value = "INVOKE", + target = "Ljava/util/List;contains(Ljava/lang/Object;)Z") + ) + private boolean extendedae_plus$patternsContains(List list, Object o) { + try { + if (o instanceof ScaledProcessingPattern scaled) { + IPatternDetails base = scaled.getOriginal(); + if (base != null && list.indexOf(base) != -1) { + System.out.println("[extendedae_plus] contains-redirect: matched base pattern for scaled pattern"); + return true; + } + } + // 使用 indexOf 避免再次触发对 List.contains 的 redirect(防止递归) + return list.indexOf(o) != -1; + } catch (Throwable t) { + t.printStackTrace(); + return list.indexOf(o) != -1; + } + } +} \ No newline at end of file diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 878166e..1418956 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -27,13 +27,18 @@ "jei.EncodePatternTransferHandlerMixin" ], "mixins": [ - "ae2.AEProcessingPatternMixin", "ae2.ContainerPatternEncodingTermMenuMixin", "ae2.CraftingCPUClusterMixin", + "ae2.CraftingServiceGetProvidersMixin", "ae2.CraftingTreeProcessMixin", "ae2.MEStorageMenuMixin", + "ae2.NetworkCraftingProvidersGetMediumsMixin", + "ae2.NetworkCraftingProvidersProviderStateMixin", "ae2.PatternEncodingTermMenuMixin", "ae2.PatternProviderLogicAdvancedMixin", + "ae2.PatternProviderLogicContainsRedirectMixin", + "ae2.PatternProviderLogicMixin", + "ae2.PatternProviderLogicPushPatternMixin", "ae2.PatternProviderMenuAdvancedMixin", "ae2.accessor.CraftingCalculationAccessor", "ae2.accessor.CraftingTreeNodeAccessor",