ExtendedAE_Plus/src/main/java/com/extendedae_plus/mixin/ContainerWirelessExPatternTerminalMixin.java

82 lines
4.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
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.Pseudo;
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;
/**
* 为无线样板访问终端容器注册通用动作CGenericPacket 分发)
*/
@Pseudo
@Mixin(ContainerWirelessExPAT.class)
public abstract class ContainerWirelessExPatternTerminalMixin implements IActionHolder {
@Unique
private final Map<String, Consumer<Paras>> actions = createHolder();
@Unique
private Player epp$player;
// 明确目标构造签名:<init>(int, Inventory, HostWirelessExPAT)
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/common/me/itemhost/HostWirelessExPAT;)V", at = @At("TAIL"), require = 0)
private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostWirelessExPAT 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][Wireless] upload: slot=" + playerSlotIndex + ", provider=" + providerId);
ExtendedAEPatternUploadUtil.uploadPatternToProvider(sp, playerSlotIndex, providerId);
} catch (Throwable t) {
t.printStackTrace();
}
});
System.out.println("[EAE+][Server] WirelessExPAT actions registered: " + this.actions.keySet());
}
// 兼容部分整合包构造签名(第三参为 IConfigurableObject在不存在该重载时不报错
@Inject(method = "<init>(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<String, Consumer<Paras>> getActionMap() {
return this.actions;
}
}