From 05492e2ffe3844927e8cc388b474b6a30ad25dba Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Mon, 11 Aug 2025 16:12:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=94=B9=E7=94=A8=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E5=8F=91=E5=8C=85=E5=90=8E=E5=AF=BC=E8=87=B4=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=97=A0=E7=BA=BF=E6=A0=B7=E6=9D=BF=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=BB=88=E7=AB=AF=E4=B8=8A=E4=BC=A0=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tainerUWirelessExPatternTerminalMixin.java | 79 +++++++++++++++++++ ...ntainerWirelessExPatternTerminalMixin.java | 25 +++++- src/main/resources/META-INF/mods.toml | 3 + .../resources/extendedae_plus.mixins.json | 3 +- 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java diff --git a/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java new file mode 100644 index 0000000..e4d8feb --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ContainerUWirelessExPatternTerminalMixin.java @@ -0,0 +1,79 @@ +package com.extendedae_plus.mixin; + +import appeng.api.util.IConfigurableObject; +import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; +import com.glodblock.github.extendedae.xmod.wt.ContainerUWirelessExPAT; +import com.glodblock.github.extendedae.xmod.wt.HostUWirelessExPAT; +import com.glodblock.github.glodium.network.packet.sync.IActionHolder; +import com.glodblock.github.glodium.network.packet.sync.Paras; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.NotNull; +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; + +import java.util.Map; +import java.util.function.Consumer; + +/** + * 为通用无线样板访问终端(AE2WTlib 集成)容器注册通用动作(CGenericPacket 分发) + */ +@Mixin(ContainerUWirelessExPAT.class) +public abstract class ContainerUWirelessExPatternTerminalMixin implements IActionHolder { + + @Unique + private final Map> actions = createHolder(); + + @Unique + private Player epp$player; + + // 明确目标构造签名:(int, Inventory, HostUWirelessExPAT) + @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/xmod/wt/HostUWirelessExPAT;)V", at = @At("TAIL")) + private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostUWirelessExPAT host, CallbackInfo ci) { + this.epp$player = playerInventory.player; + // 注册上传动作:参数顺序必须与客户端 CGenericPacket 保持一致 + this.actions.put("upload", p -> { + try { + Object o0 = p.get(0); + Object o1 = p.get(1); + int playerSlotIndex = (o0 instanceof Number) ? ((Number) o0).intValue() : Integer.parseInt(String.valueOf(o0)); + long providerId = (o1 instanceof Number) ? ((Number) o1).longValue() : Long.parseLong(String.valueOf(o1)); + var sp = (ServerPlayer) this.epp$player; + System.out.println("[EAE+][Server][UWireless] upload: slot=" + playerSlotIndex + ", provider=" + providerId); + ExtendedAEPatternUploadUtil.uploadPatternToProvider(sp, playerSlotIndex, providerId); + } catch (Throwable t) { + t.printStackTrace(); + } + }); + System.out.println("[EAE+][Server] UWirelessExPAT actions registered: " + this.actions.keySet()); + } + + // 兼容部分整合包构造签名(第三参为 IConfigurableObject),在不存在该重载时不报错 + @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lappeng/api/util/IConfigurableObject;)V", at = @At("TAIL"), require = 0) + private void initFallback(int id, net.minecraft.world.entity.player.Inventory playerInventory, IConfigurableObject host, CallbackInfo ci) { + this.epp$player = playerInventory.player; + this.actions.put("upload", p -> { + try { + Object o0 = p.get(0); + Object o1 = p.get(1); + int playerSlotIndex = (o0 instanceof Number) ? ((Number) o0).intValue() : Integer.parseInt(String.valueOf(o0)); + long providerId = (o1 instanceof Number) ? ((Number) o1).longValue() : Long.parseLong(String.valueOf(o1)); + var sp = (ServerPlayer) this.epp$player; + System.out.println("[EAE+][Server][UWireless/Fallback] upload: slot=" + playerSlotIndex + ", provider=" + providerId); + ExtendedAEPatternUploadUtil.uploadPatternToProvider(sp, playerSlotIndex, providerId); + } catch (Throwable t) { + t.printStackTrace(); + } + }); + System.out.println("[EAE+][Server] UWirelessExPAT actions registered (fallback): " + this.actions.keySet()); + } + + @NotNull + @Override + public Map> getActionMap() { + return this.actions; + } +} diff --git a/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java index aabcb83..25e2868 100644 --- a/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java @@ -1,4 +1,6 @@ package com.extendedae_plus.mixin; + +import appeng.api.util.IConfigurableObject; import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; import com.glodblock.github.extendedae.container.ContainerWirelessExPAT; import com.glodblock.github.extendedae.common.me.itemhost.HostWirelessExPAT; @@ -28,7 +30,8 @@ public abstract class ContainerWirelessExPatternTerminalMixin implements IAction @Unique private Player epp$player; - @Inject(method = "", at = @At("TAIL")) + // 明确目标构造签名:(int, Inventory, HostWirelessExPAT) + @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/common/me/itemhost/HostWirelessExPAT;)V", at = @At("TAIL")) private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostWirelessExPAT host, CallbackInfo ci) { this.epp$player = playerInventory.player; // 注册上传动作:参数顺序必须与客户端 CGenericPacket 保持一致 @@ -48,6 +51,26 @@ public abstract class ContainerWirelessExPatternTerminalMixin implements IAction System.out.println("[EAE+][Server] WirelessExPAT actions registered: " + this.actions.keySet()); } + // 兼容部分整合包构造签名(第三参为 IConfigurableObject),在不存在该重载时不报错 + @Inject(method = "(ILnet/minecraft/world/entity/player/Inventory;Lappeng/api/util/IConfigurableObject;)V", at = @At("TAIL"), require = 0) + private void initFallback(int id, net.minecraft.world.entity.player.Inventory playerInventory, IConfigurableObject host, CallbackInfo ci) { + this.epp$player = playerInventory.player; + this.actions.put("upload", p -> { + try { + Object o0 = p.get(0); + Object o1 = p.get(1); + int playerSlotIndex = (o0 instanceof Number) ? ((Number) o0).intValue() : Integer.parseInt(String.valueOf(o0)); + long providerId = (o1 instanceof Number) ? ((Number) o1).longValue() : Long.parseLong(String.valueOf(o1)); + var sp = (ServerPlayer) this.epp$player; + System.out.println("[EAE+][Server][Wireless/Fallback] upload: slot=" + playerSlotIndex + ", provider=" + providerId); + ExtendedAEPatternUploadUtil.uploadPatternToProvider(sp, playerSlotIndex, providerId); + } catch (Throwable t) { + t.printStackTrace(); + } + }); + System.out.println("[EAE+][Server] WirelessExPAT actions registered (fallback): " + this.actions.keySet()); + } + @NotNull @Override public Map> getActionMap() { diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 759a481..1f87a9b 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -34,3 +34,6 @@ mandatory = true versionRange = "[1.4.2,)" ordering = "AFTER" side = "BOTH" + +[[mixins]] +config = "extendedae_plus.mixins.json" diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index e5ef2a1..e548514 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -12,7 +12,8 @@ "mixins": [ "ContainerExPatternProviderMixin", "ContainerExPatternTerminalMixin", - "ContainerWirelessExPatternTerminalMixin" + "ContainerWirelessExPatternTerminalMixin", + "ContainerUWirelessExPatternTerminalMixin" ], "injectors": { "defaultRequire": 1