Merge remote-tracking branch 'origin/master'

This commit is contained in:
GaLi 2026-04-14 12:08:40 +08:00
commit 66a8feaaaf
3 changed files with 77 additions and 35 deletions

View File

@ -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)

View File

@ -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;
}

View File

@ -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) {
}
}
}
}