Merge pull request #68 from DeliciousBread481/fix-OpenCraftFromJeiC2SPacket-import-client-class-on-server
fix: 修复 OpenCraftFromJeiC2SPacket 在服务端引用客户端类导致崩溃的问题
This commit is contained in:
commit
71111d9627
|
|
@ -5,6 +5,7 @@ import com.extendedae_plus.network.*;
|
|||
import com.extendedae_plus.network.crafting.CraftingMonitorJumpC2SPacket;
|
||||
import com.extendedae_plus.network.crafting.CraftingMonitorOpenProviderC2SPacket;
|
||||
import com.extendedae_plus.network.crafting.OpenCraftFromJeiC2SPacket;
|
||||
import com.extendedae_plus.network.crafting.SetSearchTextS2CPacket;
|
||||
import com.extendedae_plus.network.meInterface.InterfaceAdjustConfigAmountC2SPacket;
|
||||
import com.extendedae_plus.network.pattern.CancelPendingPatternC2SPacket;
|
||||
import com.extendedae_plus.network.pattern.CreateCtrlQPatternC2SPacket;
|
||||
|
|
@ -45,6 +46,12 @@ public final class ModNetwork {
|
|||
.decoder(OpenCraftFromJeiC2SPacket::decode)
|
||||
.consumerNetworkThread(OpenCraftFromJeiC2SPacket::handle)
|
||||
.add();
|
||||
|
||||
CHANNEL.messageBuilder(SetSearchTextS2CPacket.class, nextId(), NetworkDirection.PLAY_TO_CLIENT)
|
||||
.encoder(SetSearchTextS2CPacket::encode)
|
||||
.decoder(SetSearchTextS2CPacket::decode)
|
||||
.consumerNetworkThread(SetSearchTextS2CPacket::handle)
|
||||
.add();
|
||||
|
||||
CHANNEL.messageBuilder(PullFromJeiOrCraftC2SPacket.class, nextId(), NetworkDirection.PLAY_TO_SERVER)
|
||||
.encoder(PullFromJeiOrCraftC2SPacket::encode)
|
||||
|
|
|
|||
|
|
@ -3,20 +3,20 @@ package com.extendedae_plus.network.crafting;
|
|||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.stacks.AEKey;
|
||||
import appeng.api.stacks.GenericStack;
|
||||
import appeng.client.gui.me.common.MEStorageScreen;
|
||||
|
||||
import appeng.items.tools.powered.WirelessTerminalItem;
|
||||
import appeng.menu.locator.MenuLocators;
|
||||
import appeng.menu.me.crafting.CraftAmountMenu;
|
||||
import com.extendedae_plus.init.ModNetwork;
|
||||
import com.extendedae_plus.menu.locator.CuriosItemLocator;
|
||||
import com.extendedae_plus.mixin.ae2.accessor.MEStorageScreenAccessor;
|
||||
import com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor;
|
||||
import com.extendedae_plus.util.wireless.WirelessTerminalLocator;
|
||||
import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal;
|
||||
|
||||
import de.mari_023.ae2wtlib.wut.WUTHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
import net.minecraftforge.network.NetworkDirection;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
|
@ -74,21 +74,12 @@ public class OpenCraftFromJeiC2SPacket {
|
|||
String name = what.getDisplayName().getString();
|
||||
if (name == null || name.isEmpty()) return;
|
||||
|
||||
var screen = Minecraft.getInstance().screen;
|
||||
if (screen instanceof MEStorageScreen<?> me) {
|
||||
try {
|
||||
MEStorageScreenAccessor acc = (MEStorageScreenAccessor) me;
|
||||
acc.eap$getSearchField().setValue(name);
|
||||
acc.eap$setSearchText(name);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
} else if (screen instanceof GuiExPatternTerminal<?> gpt) {
|
||||
try {
|
||||
GuiExPatternTerminalAccessor acc = (GuiExPatternTerminalAccessor) gpt;
|
||||
acc.getSearchOutField().setValue(name);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
// 发送 S2C 包让客户端更新搜索框
|
||||
ModNetwork.CHANNEL.sendTo(
|
||||
new SetSearchTextS2CPacket(name),
|
||||
player.connection.connection,
|
||||
NetworkDirection.PLAY_TO_CLIENT
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -111,21 +102,12 @@ public class OpenCraftFromJeiC2SPacket {
|
|||
String name=what.getDisplayName().getString();
|
||||
if (name == null || name.isEmpty()) return;
|
||||
|
||||
// 写入 AE2 终端的搜索框
|
||||
var screen = Minecraft.getInstance().screen;
|
||||
if (screen instanceof MEStorageScreen<?> me) {
|
||||
try {
|
||||
MEStorageScreenAccessor acc = (MEStorageScreenAccessor) me;
|
||||
acc.eap$getSearchField().setValue(name);
|
||||
acc.eap$setSearchText(name); // 同步到 Repo 并刷新
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}else if (screen instanceof GuiExPatternTerminal<?> gpt) {
|
||||
try {
|
||||
GuiExPatternTerminalAccessor acc = (GuiExPatternTerminalAccessor) gpt;
|
||||
acc.getSearchOutField().setValue(name);
|
||||
}catch (Throwable ignored) {}
|
||||
}
|
||||
// 发送 S2C 包让客户端更新搜索框
|
||||
ModNetwork.CHANNEL.sendTo(
|
||||
new SetSearchTextS2CPacket(name),
|
||||
player.connection.connection,
|
||||
NetworkDirection.PLAY_TO_CLIENT
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
package com.extendedae_plus.network.crafting;
|
||||
|
||||
import appeng.client.gui.me.common.MEStorageScreen;
|
||||
import com.extendedae_plus.mixin.ae2.accessor.MEStorageScreenAccessor;
|
||||
import com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor;
|
||||
import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class SetSearchTextS2CPacket {
|
||||
private final String text;
|
||||
|
||||
public SetSearchTextS2CPacket(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public static void encode(SetSearchTextS2CPacket msg, FriendlyByteBuf buf) {
|
||||
buf.writeUtf(msg.text, 256);
|
||||
}
|
||||
|
||||
public static SetSearchTextS2CPacket decode(FriendlyByteBuf buf) {
|
||||
return new SetSearchTextS2CPacket(buf.readUtf(256));
|
||||
}
|
||||
|
||||
public static void handle(SetSearchTextS2CPacket msg, Supplier<NetworkEvent.Context> ctx) {
|
||||
ctx.get().enqueueWork(() -> handleClient(msg));
|
||||
ctx.get().setPacketHandled(true);
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
private static void handleClient(SetSearchTextS2CPacket msg) {
|
||||
var screen = Minecraft.getInstance().screen;
|
||||
if (screen instanceof MEStorageScreen<?> me) {
|
||||
try {
|
||||
MEStorageScreenAccessor acc = (MEStorageScreenAccessor) me;
|
||||
acc.eap$getSearchField().setValue(msg.text);
|
||||
acc.eap$setSearchText(msg.text);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
} else if (screen instanceof GuiExPatternTerminal<?> gpt) {
|
||||
try {
|
||||
GuiExPatternTerminalAccessor acc = (GuiExPatternTerminalAccessor) gpt;
|
||||
acc.getSearchOutField().setValue(msg.text);
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user