From 1ee757e84c1c1ee12432a76a28ce12b8a0fd5521 Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Thu, 19 Mar 2026 17:23:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86=E7=BC=96=E8=AF=91=E8=AD=A6?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../helpers/InterfaceLogicTickerMixin.java | 30 +++++++++++++------ .../PatternProviderLogicTickerMixin.java | 28 ++++++++++++----- .../TileAssemblerMatrixCrafterAccessor.java | 8 ++--- .../TileAssemblerMatrixPatternAccessor.java | 4 +-- .../GuiAssemblerMatrixPatternInfoMixin.java | 6 ++-- ...ssemblerMatrixPatternSlotTrackerMixin.java | 8 ++--- 6 files changed, 54 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java index 88bea12..dd1a038 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java @@ -2,23 +2,35 @@ package com.extendedae_plus.mixin.ae2.helpers; import appeng.helpers.InterfaceLogic; import com.extendedae_plus.api.bridge.IInterfaceWirelessLinkBridge; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +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.CallbackInfoReturnable; +import java.lang.reflect.Field; + /** * 注入到 InterfaceLogic.Ticker 的每tick回调,驱动无线链接状态更新。 */ -@Mixin(targets = "appeng.helpers.InterfaceLogic$Ticker") +@Mixin(targets = "appeng.helpers.InterfaceLogic$Ticker", remap = false) public abstract class InterfaceLogicTickerMixin { - // Mixin 访问内部类的外部引用字段(javac 生成名 this$0) - @Shadow(remap = false) - @Final - private InterfaceLogic this$0; + @Unique + private static Field extendedae_plus$outerField; + + @Unique + private InterfaceLogic extendedae_plus$getOuterLogic() { + try { + if (extendedae_plus$outerField == null) { + extendedae_plus$outerField = this.getClass().getDeclaredField("this$0"); + extendedae_plus$outerField.setAccessible(true); + } + return (InterfaceLogic) extendedae_plus$outerField.get(this); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Failed to access InterfaceLogic outer instance", e); + } + } @Inject(method = "tickingRequest", at = @At("HEAD"), remap = false) private void eap$tickHead(appeng.api.networking.IGridNode node, int ticksSinceLastCall, @@ -28,7 +40,7 @@ public abstract class InterfaceLogicTickerMixin { return; } - if (this$0 instanceof IInterfaceWirelessLinkBridge bridge) { + if (this.extendedae_plus$getOuterLogic() instanceof IInterfaceWirelessLinkBridge bridge) { // 处理延迟初始化 bridge.eap$handleDelayedInit(); } @@ -37,7 +49,7 @@ public abstract class InterfaceLogicTickerMixin { @Inject(method = "tickingRequest", at = @At("TAIL"), remap = false) private void eap$tickTail(appeng.api.networking.IGridNode node, int ticksSinceLastCall, CallbackInfoReturnable cir) { - if (this$0 instanceof IInterfaceWirelessLinkBridge bridge) { + if (this.extendedae_plus$getOuterLogic() instanceof IInterfaceWirelessLinkBridge bridge) { bridge.eap$updateWirelessLink(); } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/patternprovider/PatternProviderLogicTickerMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/patternprovider/PatternProviderLogicTickerMixin.java index 27ecb7f..30f7ef3 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/patternprovider/PatternProviderLogicTickerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/patternprovider/PatternProviderLogicTickerMixin.java @@ -2,23 +2,35 @@ package com.extendedae_plus.mixin.ae2.helpers.patternprovider; import appeng.helpers.patternprovider.PatternProviderLogic; import com.extendedae_plus.api.bridge.IInterfaceWirelessLinkBridge; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +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.CallbackInfoReturnable; +import java.lang.reflect.Field; + /** * 注入到 PatternProviderLogic.Ticker 的每tick回调,驱动无线链接状态更新。 */ @Mixin(targets = "appeng.helpers.patternprovider.PatternProviderLogic$Ticker", remap = false) public abstract class PatternProviderLogicTickerMixin { - // Mixin 访问内部类的外部引用字段(javac 生成名 this$0) - @Shadow(remap = false) - @Final - private PatternProviderLogic this$0; + @Unique + private static Field extendedae_plus$outerField; + + @Unique + private PatternProviderLogic extendedae_plus$getOuterLogic() { + try { + if (extendedae_plus$outerField == null) { + extendedae_plus$outerField = this.getClass().getDeclaredField("this$0"); + extendedae_plus$outerField.setAccessible(true); + } + return (PatternProviderLogic) extendedae_plus$outerField.get(this); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Failed to access PatternProviderLogic outer instance", e); + } + } @Inject(method = "tickingRequest", at = @At("HEAD")) private void eap$tickHead(appeng.api.networking.IGridNode node, int ticksSinceLastCall, @@ -27,7 +39,7 @@ public abstract class PatternProviderLogicTickerMixin { if (node != null && node.getLevel() != null && node.getLevel().isClientSide) { return; } - if (this$0 instanceof IInterfaceWirelessLinkBridge bridge) { + if (this.extendedae_plus$getOuterLogic() instanceof IInterfaceWirelessLinkBridge bridge) { bridge.eap$handleDelayedInit(); } } @@ -35,7 +47,7 @@ public abstract class PatternProviderLogicTickerMixin { @Inject(method = "tickingRequest", at = @At("TAIL")) private void eap$tickTail(appeng.api.networking.IGridNode node, int ticksSinceLastCall, CallbackInfoReturnable cir) { - if (this$0 instanceof IInterfaceWirelessLinkBridge bridge) { + if (this.extendedae_plus$getOuterLogic() instanceof IInterfaceWirelessLinkBridge bridge) { bridge.eap$updateWirelessLink(); } } diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixCrafterAccessor.java b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixCrafterAccessor.java index c229c2e..e8f978d 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixCrafterAccessor.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixCrafterAccessor.java @@ -7,17 +7,17 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(TileAssemblerMatrixCrafter.class) +@Mixin(value = TileAssemblerMatrixCrafter.class, remap = false) public interface TileAssemblerMatrixCrafterAccessor { - @Accessor("threads") + @Accessor(value = "threads", remap = false) CraftingThread[] extendedae_plus$getThreads(); - @Accessor("threads") + @Accessor(value = "threads", remap = false) @Mutable void extendedae_plus$setThreads(CraftingThread[] threads); - @Accessor("internalInv") + @Accessor(value = "internalInv", remap = false) @Mutable void extendedae_plus$setInternalInv(InternalInventory inventory); } diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java index ff82b40..021bbae 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java @@ -6,10 +6,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(TileAssemblerMatrixPattern.class) +@Mixin(value = TileAssemblerMatrixPattern.class, remap = false) public interface TileAssemblerMatrixPatternAccessor { - @Accessor("patternInventory") + @Accessor(value = "patternInventory", remap = false) @Mutable void extendedae_plus$setPatternInventory(AppEngInternalInventory inventory); } diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiAssemblerMatrixPatternInfoMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiAssemblerMatrixPatternInfoMixin.java index cc1de4c..027b63f 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiAssemblerMatrixPatternInfoMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiAssemblerMatrixPatternInfoMixin.java @@ -16,10 +16,10 @@ import com.glodblock.github.extendedae.client.gui.GuiAssemblerMatrix; import java.util.List; import java.lang.reflect.Constructor; -@Mixin(targets = "com.glodblock.github.extendedae.client.gui.GuiAssemblerMatrix$PatternInfo") +@Mixin(targets = "com.glodblock.github.extendedae.client.gui.GuiAssemblerMatrix$PatternInfo", remap = false) public abstract class GuiAssemblerMatrixPatternInfoMixin { - @Shadow + @Shadow(remap = false) @Final private List internalRows; @@ -41,7 +41,7 @@ public abstract class GuiAssemblerMatrixPatternInfoMixin { } } - @Inject(method = "", at = @At("RETURN")) + @Inject(method = "", at = @At("RETURN"), remap = false) private void extendedae_plus$rebuildRows(long id, CallbackInfo ci) { int invSize = TileAssemblerMatrixPattern.INV_SIZE;//样板核心槽位数变量 try { diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerAssemblerMatrixPatternSlotTrackerMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerAssemblerMatrixPatternSlotTrackerMixin.java index f3127d4..3671f81 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerAssemblerMatrixPatternSlotTrackerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerAssemblerMatrixPatternSlotTrackerMixin.java @@ -12,19 +12,19 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import com.glodblock.github.extendedae.container.ContainerAssemblerMatrix; -@Mixin(targets = "com.glodblock.github.extendedae.container.ContainerAssemblerMatrix$PatternSlotTracker") +@Mixin(targets = "com.glodblock.github.extendedae.container.ContainerAssemblerMatrix$PatternSlotTracker", remap = false) public abstract class ContainerAssemblerMatrixPatternSlotTrackerMixin { - @Shadow + @Shadow(remap = false) @Final private InternalInventory server; - @Shadow + @Shadow(remap = false) @Final @Mutable private InternalInventory client; - @Inject(method = "", at = @At("TAIL")) + @Inject(method = "", at = @At("TAIL"), remap = false) private void extendedae_plus$resizeClientInventory(TileAssemblerMatrixPattern host, CallbackInfo ci) { this.client = new AppEngInternalInventory(this.server.size()); }