diff --git a/src/main/java/com/extendedae_plus/init/ModNetwork.java b/src/main/java/com/extendedae_plus/init/ModNetwork.java index e2bd7f6..fdfec16 100644 --- a/src/main/java/com/extendedae_plus/init/ModNetwork.java +++ b/src/main/java/com/extendedae_plus/init/ModNetwork.java @@ -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) diff --git a/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java b/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java index 946e16e..b26e391 100644 --- a/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java @@ -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; } diff --git a/src/main/java/com/extendedae_plus/network/crafting/SetSearchTextS2CPacket.java b/src/main/java/com/extendedae_plus/network/crafting/SetSearchTextS2CPacket.java new file mode 100644 index 0000000..7543837 --- /dev/null +++ b/src/main/java/com/extendedae_plus/network/crafting/SetSearchTextS2CPacket.java @@ -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 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) { + } + } + } +} \ No newline at end of file