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