From c7b0d4ae3801f61b549a9301a3cff99eccc1caaf Mon Sep 17 00:00:00 2001 From: GaLicn <133291877+GaLicn@users.noreply.github.com> Date: Mon, 15 Dec 2025 10:12:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=90=88=E6=88=90=E5=8D=A1?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=80=82=E9=85=8D=E9=87=8F=E5=AD=90=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E6=9C=BA=EF=BC=8C=E4=B8=AD=E9=94=AE=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=86=99=E5=85=A5=E5=90=8D=E7=A7=B0=E9=80=82?= =?UTF-8?q?=E9=85=8D=E9=A5=B0=E5=93=81=E6=A7=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accessor/AdvCraftingCPULogicAccessor.java | 4 +++ ...rnProviderLogicVirtualCompletionMixin.java | 17 ++++++++- .../crafting/OpenCraftFromJeiC2SPacket.java | 35 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java index c505380..4c7ad28 100644 --- a/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java @@ -4,10 +4,14 @@ import net.pedroksl.advanced_ae.common.logic.AdvCraftingCPULogic; import net.pedroksl.advanced_ae.common.logic.ExecutingCraftingJob; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(value = AdvCraftingCPULogic.class, remap = false) public interface AdvCraftingCPULogicAccessor { @Accessor("job") ExecutingCraftingJob eap$getAdvJob(); + + @Invoker("finishJob") + void eap$invokeAdvFinishJob(boolean success); } diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java b/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java index 51ebd80..ebe6889 100644 --- a/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java @@ -55,7 +55,22 @@ public abstract class PatternProviderLogicVirtualCompletionMixin { var progress = tasks.get(patternDetails); if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) { if (advProgressAccessor.eap$getAdvValue() <= 1) { - advCpu.cancelJob(); + boolean finished = false; + try { + advCpu.updateOutput(null); + } catch (Throwable ignored) { + } + try { + advLogicAccessor.eap$invokeAdvFinishJob(true); + finished = true; + } catch (Throwable ignored) { + } + if (!finished) { + try { + advCpu.cancelJob(); + } catch (Throwable ignored) { + } + } break; } } 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 173657c..946e16e 100644 --- a/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/crafting/OpenCraftFromJeiC2SPacket.java @@ -12,6 +12,7 @@ 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; @@ -57,6 +58,40 @@ public class OpenCraftFromJeiC2SPacket { String curiosSlotId = located.getCuriosSlotId(); int curiosIndex = located.getCuriosIndex(); if (curiosSlotId != null && curiosIndex >= 0) { + // Curios 也需要先检查是否可合成,否则写入搜索框并返回 + var craftingService = (appeng.api.networking.crafting.ICraftingService) null; + try { + String current = WUTHandler.getCurrentTerminal(located.stack); + var def = WUTHandler.wirelessTerminals.get(current); + var wtHost = def == null ? null : def.wTMenuHostFactory().create(player, null, located.stack, (p, sub) -> {}); + var node = wtHost == null ? null : wtHost.getActionableNode(); + var grid = node == null ? null : node.getGrid(); + craftingService = grid == null ? null : grid.getCraftingService(); + } catch (Throwable ignored) { + } + + if (craftingService != null && !craftingService.isCraftable(what)) { + 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) { + } + } + return; + } + int initial = 1; CraftAmountMenu.open(player, new CuriosItemLocator(curiosSlotId, curiosIndex), what, initial); return;