This commit is contained in:
GaLicn 2025-09-06 14:45:08 +08:00
parent 6d4f806fcd
commit f0a22ece19
6 changed files with 38 additions and 34 deletions

View File

@ -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 mixinaccessor/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 {

View File

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

View File

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

View File

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

View File

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

View File

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