mixin
This commit is contained in:
parent
0d5ce9261e
commit
8f1fab8c58
|
|
@ -42,7 +42,7 @@ public abstract class PatternEncodingTermScreenMixin<T extends AEBaseMenu> {
|
||||||
// 复用已存在的按钮实例,避免重复创建
|
// 复用已存在的按钮实例,避免重复创建
|
||||||
if (eap$uploadBtn == null) {
|
if (eap$uploadBtn == null) {
|
||||||
eap$uploadBtn = new IconButton(btn -> PacketDistributor
|
eap$uploadBtn = new IconButton(btn -> PacketDistributor
|
||||||
.sendToServer(new com.extendedae_plus.network.RequestProvidersListC2SPacket())) {
|
.sendToServer(com.extendedae_plus.network.RequestProvidersListC2SPacket.INSTANCE)) {
|
||||||
private final float eap$scale = 0.75f; // 约 12x12
|
private final float eap$scale = 0.75f; // 约 12x12
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,58 +1,22 @@
|
||||||
package com.extendedae_plus.mixin.ae2WTlib;
|
package com.extendedae_plus.mixin.ae2WTlib;
|
||||||
|
|
||||||
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.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Pseudo;
|
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.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 为通用无线样板访问终端(AE2WTlib 集成)容器注册通用动作(CGenericPacket 分发)
|
* 为通用无线样板访问终端(AE2WTlib 集成)容器注册通用动作(CGenericPacket 分发)
|
||||||
*/
|
*/
|
||||||
@Pseudo
|
@Pseudo
|
||||||
@Mixin(ContainerUWirelessExPAT.class)
|
@Mixin(targets = "com.glodblock.github.extendedae.xmod.wt.ContainerUWirelessExPAT", remap = false)
|
||||||
public abstract class ContainerUWirelessExPatternTerminalMixin implements IActionHolder {
|
public abstract class ContainerUWirelessExPatternTerminalMixin {
|
||||||
|
|
||||||
@Unique
|
|
||||||
private final Map<String, Consumer<Paras>> eap$actions = createHolder();
|
|
||||||
|
|
||||||
@Unique
|
|
||||||
private Player eap$player;
|
|
||||||
|
|
||||||
|
// 1.21 环境下,Glodium IActionHolder 已被移除,改为 no-op 保留占位,以便未来扩展。
|
||||||
// 明确目标构造签名:<init>(int, Inventory, HostUWirelessExPAT)
|
// 明确目标构造签名:<init>(int, Inventory, HostUWirelessExPAT)
|
||||||
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/xmod/wt/HostUWirelessExPAT;)V", at = @At("TAIL"), remap = false)
|
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/xmod/wt/HostUWirelessExPAT;)V", at = @At("TAIL"), remap = false)
|
||||||
private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostUWirelessExPAT host, CallbackInfo ci) {
|
private void init(int id, net.minecraft.world.entity.player.Inventory playerInventory, Object host, CallbackInfo ci) {
|
||||||
this.eap$player = playerInventory.player;
|
// no-op
|
||||||
// 注册上传动作:参数顺序必须与客户端 CGenericPacket 保持一致
|
|
||||||
this.eap$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.eap$player;
|
|
||||||
ExtendedAEPatternUploadUtil.uploadPatternToProvider(sp, playerSlotIndex, providerId);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public Map<String, Consumer<Paras>> getActionMap() {
|
|
||||||
return this.eap$actions;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.extendedae_plus.mixin.extendedae.container;
|
package com.extendedae_plus.mixin.extendedae.container;
|
||||||
|
|
||||||
import com.glodblock.github.extendedae.xmod.wt.ContainerWirelessExPAT;
|
|
||||||
import com.glodblock.github.extendedae.xmod.wt.HostWirelessExPAT;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Pseudo;
|
import org.spongepowered.asm.mixin.Pseudo;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
|
@ -12,14 +10,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
* 为无线样板访问终端容器注册通用动作(CGenericPacket 分发)
|
* 为无线样板访问终端容器注册通用动作(CGenericPacket 分发)
|
||||||
*/
|
*/
|
||||||
@Pseudo
|
@Pseudo
|
||||||
@Mixin(value = ContainerWirelessExPAT.class, remap = false)
|
@Mixin(targets = "com.glodblock.github.extendedae.xmod.wt.ContainerWirelessExPAT", remap = false)
|
||||||
public abstract class ContainerWirelessExPatternTerminalMixin {
|
public abstract class ContainerWirelessExPatternTerminalMixin {
|
||||||
// 1.21 版本中 ExtendedAE 不再使用 glodium IActionHolder。
|
// 1.21 版本中 ExtendedAE 不再使用 glodium IActionHolder。
|
||||||
// 保留空混入以便后续需要时扩展。
|
// 保留空混入以便后续需要时扩展。
|
||||||
|
|
||||||
// 构造方法注入(显式签名),与 ExtendedAE 源码保持一致
|
// 构造方法注入(显式签名),与 ExtendedAE 源码保持一致
|
||||||
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/xmod/wt/HostWirelessExPAT;)V", at = @At("TAIL"), require = 0, remap = false)
|
@Inject(method = "<init>(ILnet/minecraft/world/entity/player/Inventory;Lcom/glodblock/github/extendedae/xmod/wt/HostWirelessExPAT;)V", at = @At("TAIL"), require = 0, remap = false)
|
||||||
private void init$eap(int id, net.minecraft.world.entity.player.Inventory playerInventory, HostWirelessExPAT host, CallbackInfo ci) {
|
private void init$eap(int id, net.minecraft.world.entity.player.Inventory playerInventory, Object host, CallbackInfo ci) {
|
||||||
// no-op
|
// no-op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@
|
||||||
"ae2.accessor.AEBaseScreenAccessor",
|
"ae2.accessor.AEBaseScreenAccessor",
|
||||||
"accessor.AbstractContainerScreenAccessor",
|
"accessor.AbstractContainerScreenAccessor",
|
||||||
"accessor.ScreenAccessor",
|
"accessor.ScreenAccessor",
|
||||||
"extendedae.accessor.GuiExPatternTerminalAccessor"
|
"extendedae.accessor.GuiExPatternTerminalAccessor",
|
||||||
|
"ae2WTlib.WETScreenMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user