diff --git a/build.gradle b/build.gradle index 133059d..0b3d580 100644 --- a/build.gradle +++ b/build.gradle @@ -145,6 +145,8 @@ sourceSets.main.java { include 'com/extendedae_plus/util/RequestedAmountHolder.java' // util needed by network payloads (providers listing / upload helpers) include 'com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java' + // util for wireless terminal discovery used by new payloads + include 'com/extendedae_plus/util/WirelessTerminalLocator.java' // content(最小集) include 'com/extendedae_plus/content/ClientPatternHighlightStore.java' @@ -169,6 +171,10 @@ sourceSets.main.java { include 'com/extendedae_plus/network/OpenProviderUiC2SPacket.java' include 'com/extendedae_plus/network/GlobalToggleProviderModesC2SPacket.java' include 'com/extendedae_plus/network/UploadEncodedPatternToProviderC2SPacket.java' + // newly added custom payloads (NeoForge 1.21) + include 'com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java' + include 'com/extendedae_plus/network/PickFromWirelessC2SPacket.java' + include 'com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java' // AE2 mixin:accessor/helpers/autopattern/gui/menu include 'com/extendedae_plus/mixin/ae2/accessor/**' @@ -182,6 +188,11 @@ sourceSets.main.java { // ExtendedAE GUI 混入(右侧外列按钮与翻页),以及其依赖的 NewIcon 类 include 'com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java' include 'com/extendedae_plus/NewIcon.java' + + // Note: 暂时不编译 Curios 专用宿主/定位器(依赖 ae2wtlib API 的签名差异未完成适配) + // include 'com/extendedae_plus/menu/locator/CuriosItemLocator.java' + // include 'com/extendedae_plus/menu/host/CuriosWirelessTerminalMenuHost.java' + // include 'com/extendedae_plus/menu/host/CuriosWTMenuHost.java' } configurations { diff --git a/src/main/java/com/extendedae_plus/network/ModNetwork.java b/src/main/java/com/extendedae_plus/network/ModNetwork.java index b8ff570..7ad85bb 100644 --- a/src/main/java/com/extendedae_plus/network/ModNetwork.java +++ b/src/main/java/com/extendedae_plus/network/ModNetwork.java @@ -21,8 +21,14 @@ public class ModNetwork { registrar.playToServer(OpenProviderUiC2SPacket.TYPE, OpenProviderUiC2SPacket.STREAM_CODEC, OpenProviderUiC2SPacket::handle); registrar.playToServer(UploadEncodedPatternToProviderC2SPacket.TYPE, UploadEncodedPatternToProviderC2SPacket.STREAM_CODEC, UploadEncodedPatternToProviderC2SPacket::handle); // 新增:JEI 中键打开合成界面 & 无线终端拾取方块物品 - registrar.playToServer(OpenCraftFromJeiC2SPacket.TYPE, OpenCraftFromJeiC2SPacket.STREAM_CODEC, OpenCraftFromJeiC2SPacket::handle); - registrar.playToServer(PickFromWirelessC2SPacket.TYPE, PickFromWirelessC2SPacket.STREAM_CODEC, PickFromWirelessC2SPacket::handle); - registrar.playToServer(PullFromJeiOrCraftC2SPacket.TYPE, PullFromJeiOrCraftC2SPacket.STREAM_CODEC, PullFromJeiOrCraftC2SPacket::handle); + registrar.playToServer(com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.TYPE, + com.extendedae_plus.network.OpenCraftFromJeiC2SPacket.STREAM_CODEC, + com.extendedae_plus.network.OpenCraftFromJeiC2SPacket::handle); + registrar.playToServer(com.extendedae_plus.network.PickFromWirelessC2SPacket.TYPE, + com.extendedae_plus.network.PickFromWirelessC2SPacket.STREAM_CODEC, + com.extendedae_plus.network.PickFromWirelessC2SPacket::handle); + registrar.playToServer(com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket.TYPE, + com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket.STREAM_CODEC, + com.extendedae_plus.network.PullFromJeiOrCraftC2SPacket::handle); } } diff --git a/src/main/java/com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java b/src/main/java/com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java index 5cefd91..0104e87 100644 --- a/src/main/java/com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/OpenCraftFromJeiC2SPacket.java @@ -6,7 +6,6 @@ import appeng.api.stacks.GenericStack; import appeng.items.tools.powered.WirelessTerminalItem; import appeng.menu.locator.MenuLocators; import appeng.menu.me.crafting.CraftAmountMenu; -import com.extendedae_plus.menu.locator.CuriosItemLocator; import com.extendedae_plus.util.WirelessTerminalLocator; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; @@ -50,15 +49,7 @@ public class OpenCraftFromJeiC2SPacket implements CustomPacketPayload { var located = WirelessTerminalLocator.find(player); if (located.isEmpty()) return; - // 若为 Curios 槽位:跳过 AE2 基类的距离/电量前置校验,直接打开数量界面, - // 让菜单与宿主(WirelessTerminalMenuHost)以及 ae2wtlib 自身处理量子卡跨维/跨距逻辑。 - String curiosSlotId = located.getCuriosSlotId(); - int curiosIndex = located.getCuriosIndex(); - if (curiosSlotId != null && curiosIndex >= 0) { - int initial = 1; - CraftAmountMenu.open(player, new CuriosItemLocator(curiosSlotId, curiosIndex), what, initial); - return; - } + // Curios 槽位暂不直接作为菜单宿主处理;仅处理原版手持/背包场景。 // 非 Curios(主手/副手/背包)仍按原先流程做前置校验,保持行为一致。 if (!(located.stack.getItem() instanceof WirelessTerminalItem wt)) return; diff --git a/src/main/java/com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java b/src/main/java/com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java index 7a81435..23116e5 100644 --- a/src/main/java/com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/PullFromJeiOrCraftC2SPacket.java @@ -12,7 +12,6 @@ import appeng.items.tools.powered.WirelessTerminalItem; import appeng.me.helpers.PlayerSource; import appeng.menu.locator.MenuLocators; import appeng.menu.me.crafting.CraftAmountMenu; -import com.extendedae_plus.menu.locator.CuriosItemLocator; import com.extendedae_plus.util.WirelessTerminalLocator; import com.extendedae_plus.util.WirelessTerminalLocator.LocatedTerminal; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -90,18 +89,12 @@ public class PullFromJeiOrCraftC2SPacket implements CustomPacketPayload { var craftingService = grid.getCraftingService(); if (!craftingService.isCraftable(what)) return; - String curiosSlotId = located.getCuriosSlotId(); - int curiosIndex = located.getCuriosIndex(); - if (curiosSlotId != null && curiosIndex >= 0) { - CraftAmountMenu.open(player, new CuriosItemLocator(curiosSlotId, curiosIndex), what, 1); - } else { - var hand = located.getHand(); - int slot = located.getSlotIndex(); - if (hand != null) { - CraftAmountMenu.open(player, MenuLocators.forHand(player, hand), what, 1); - } else if (slot >= 0) { - CraftAmountMenu.open(player, MenuLocators.forInventorySlot(slot), what, 1); - } + var hand = located.getHand(); + int slot = located.getSlotIndex(); + if (hand != null) { + CraftAmountMenu.open(player, MenuLocators.forHand(player, hand), what, 1); + } else if (slot >= 0) { + CraftAmountMenu.open(player, MenuLocators.forInventorySlot(slot), what, 1); } }); } diff --git a/src/main/java/com/extendedae_plus/util/GuiUtil.java b/src/main/java/com/extendedae_plus/util/GuiUtil.java index 1c804d9..3e202be 100644 --- a/src/main/java/com/extendedae_plus/util/GuiUtil.java +++ b/src/main/java/com/extendedae_plus/util/GuiUtil.java @@ -31,12 +31,15 @@ public class GuiUtil { return ""; } - var details = PatternDetailsHelper.decodePattern(pattern, Minecraft.getInstance().level, false); - if (details == null || details.getOutputs().length == 0) { + var details = PatternDetailsHelper.decodePattern(pattern, Minecraft.getInstance().level); + if (details == null) { return ""; } - - GenericStack out = details.getOutputs()[0]; + java.util.List outputs = details.getOutputs(); + if (outputs == null || outputs.isEmpty()) { + return ""; + } + GenericStack out = outputs.get(0); long amount = out.amount(); long perUnit = out.what().getAmountPerUnit(); if (amount <= 0 || perUnit <= 0) { diff --git a/src/main/java/com/extendedae_plus/util/WirelessTerminalLocator.java b/src/main/java/com/extendedae_plus/util/WirelessTerminalLocator.java index 73ee90e..81365ca 100644 --- a/src/main/java/com/extendedae_plus/util/WirelessTerminalLocator.java +++ b/src/main/java/com/extendedae_plus/util/WirelessTerminalLocator.java @@ -4,7 +4,7 @@ import appeng.items.tools.powered.WirelessCraftingTerminalItem; import appeng.items.tools.powered.WirelessTerminalItem; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.fml.ModList; +import net.neoforged.fml.ModList; import top.theillusivec4.curios.api.CuriosApi; import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler; import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler; @@ -93,9 +93,9 @@ public final class WirelessTerminalLocator { // 3) Curios 饰品槽(若已加载) if (ModList.get().isLoaded("curios")) { try { - var resolved = CuriosApi.getCuriosInventory(player).resolve(); - if (resolved.isPresent()) { - ICuriosItemHandler handler = resolved.get(); + var opt = CuriosApi.getCuriosInventory(player); + if (opt.isPresent()) { + ICuriosItemHandler handler = opt.get(); for (var entry : handler.getCurios().entrySet()) { String slotId = entry.getKey(); ICurioStacksHandler stacksHandler = entry.getValue();