更换贴图
|
|
@ -3,6 +3,7 @@ package com.extendedae_plus.mixin.extendedae.client;
|
||||||
import com.glodblock.github.extendedae.client.button.HighlightButton;
|
import com.glodblock.github.extendedae.client.button.HighlightButton;
|
||||||
import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal;
|
import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal;
|
||||||
import net.minecraft.client.gui.components.Button;
|
import net.minecraft.client.gui.components.Button;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
|
@ -55,7 +56,23 @@ public abstract class HighlightButtonMixin {
|
||||||
boolean posEqual = Objects.equals(btnPos, infoPos);
|
boolean posEqual = Objects.equals(btnPos, infoPos);
|
||||||
boolean faceEqual = (btnFace == null && infoFace == null) || Objects.equals(btnFace, infoFace);
|
boolean faceEqual = (btnFace == null && infoFace == null) || Objects.equals(btnFace, infoFace);
|
||||||
if (posEqual && faceEqual) {
|
if (posEqual && faceEqual) {
|
||||||
// 当前仅执行高亮和坐标提示功能,避免反射调用不存在的方法导致告警。
|
// 选中当前供应器:使用 mixin 新增的 setter(通过反射调用以兼容编译期)
|
||||||
|
try {
|
||||||
|
long serverId = (long) entry.getKey();
|
||||||
|
var setter = terminal.getClass().getMethod("setCurrentlyChoicePatternProvider", long.class);
|
||||||
|
setter.setAccessible(true);
|
||||||
|
setter.invoke(terminal, serverId);
|
||||||
|
|
||||||
|
// 提示玩家已选择供应器
|
||||||
|
if (minecraft.player != null) {
|
||||||
|
minecraft.player.displayClientMessage(
|
||||||
|
Component.literal("ExtendedAE Plus: 已选择样板供应器 (ID=" + serverId + "),可按住Shift左键快速上传样板"),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (Throwable t2) {
|
||||||
|
LOGGER.warn("设置当前样板供应器ID失败", t2);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -65,5 +82,4 @@ public abstract class HighlightButtonMixin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,22 +141,16 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
|
||||||
ItemStack itemToUpload = this.minecraft.player.getInventory().getItem(playerSlotIndex);
|
ItemStack itemToUpload = this.minecraft.player.getInventory().getItem(playerSlotIndex);
|
||||||
|
|
||||||
if (!itemToUpload.isEmpty() && PatternDetailsHelper.isEncodedPattern(itemToUpload)) {
|
if (!itemToUpload.isEmpty() && PatternDetailsHelper.isEncodedPattern(itemToUpload)) {
|
||||||
// 通过反射调用 ExtendedAE 的网络发送(软依赖)
|
// 改用我们自己的网络包,直接将玩家槽位与选择的供应器ID发送到服务器
|
||||||
try {
|
try {
|
||||||
Class<?> EPPNetworkHandlerClass = Class.forName("com.glodblock.github.extendedae.network.EPPNetworkHandler");
|
PacketDistributor.sendToServer(new com.extendedae_plus.network.UploadInventoryPatternToProviderC2SPacket(
|
||||||
Object handlerInstance = EPPNetworkHandlerClass.getField("INSTANCE").get(null);
|
playerSlotIndex,
|
||||||
|
eap$currentlyChoicePatterProvider
|
||||||
Class<?> packetClass = Class.forName("com.glodblock.github.glodium.network.packet.CGenericPacket");
|
));
|
||||||
Constructor<?> constructor = packetClass.getConstructor(String.class, Object[].class);
|
|
||||||
Object packet = constructor.newInstance("upload", new Object[]{playerSlotIndex, eap$currentlyChoicePatterProvider});
|
|
||||||
|
|
||||||
Class<?> iMessage = Class.forName("com.glodblock.github.glodium.network.packet.IMessage");
|
|
||||||
Method sendToServer = EPPNetworkHandlerClass.getMethod("sendToServer", iMessage);
|
|
||||||
|
|
||||||
sendToServer.invoke(handlerInstance, packet);
|
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
|
// 理论上不会失败,若失败则给出简要提示
|
||||||
this.minecraft.player.displayClientMessage(
|
this.minecraft.player.displayClientMessage(
|
||||||
Component.literal("❌ ExtendedAE Plus: 未找到 ExtendedAE 网络支持(可能未安装或版本不兼容)"),
|
Component.literal("❌ ExtendedAE Plus: 客户端发送上传请求失败"),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ public class ModNetwork {
|
||||||
registrar.playToServer(CraftingMonitorOpenProviderC2SPacket.TYPE, CraftingMonitorOpenProviderC2SPacket.STREAM_CODEC, CraftingMonitorOpenProviderC2SPacket::handle);
|
registrar.playToServer(CraftingMonitorOpenProviderC2SPacket.TYPE, CraftingMonitorOpenProviderC2SPacket.STREAM_CODEC, CraftingMonitorOpenProviderC2SPacket::handle);
|
||||||
registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle);
|
registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle);
|
||||||
registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle);
|
registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle);
|
||||||
|
registrar.playToServer(UploadInventoryPatternToProviderC2SPacket.TYPE, UploadInventoryPatternToProviderC2SPacket.STREAM_CODEC, UploadInventoryPatternToProviderC2SPacket::handle);
|
||||||
// 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品
|
// 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品
|
||||||
registrar.playToServer(com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.TYPE,
|
registrar.playToServer(com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.TYPE,
|
||||||
com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.STREAM_CODEC,
|
com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.STREAM_CODEC,
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 310 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 300 B |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 383 B |