From 19332faeb633faddd2c39580795920bd619768f2 Mon Sep 17 00:00:00 2001 From: Kolja Date: Wed, 12 Nov 2025 20:51:21 +0100 Subject: [PATCH] Add setting for pick block to request the item when not available Signed-off-by: Kolja <104643407+Thatguyello@users.noreply.github.com> --- .../mari_023/ae2wtlib/api/AE2wtlibComponents.java | 2 ++ .../de/mari_023/ae2wtlib/api/TextConstants.java | 1 + .../java/de/mari_023/ae2wtlib/AE2wtlibEvents.java | 11 +++++++++-- .../networking/TerminalSettingsPacket.java | 4 +++- .../wct/WirelessTerminalSettingsScreen.java | 15 +++++++++++++-- .../screens/wtlib/wireless_terminal_settings.json | 9 +++++++-- .../resources/assets/ae2wtlib/lang/en_us.json | 1 + 7 files changed, 36 insertions(+), 7 deletions(-) diff --git a/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/AE2wtlibComponents.java b/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/AE2wtlibComponents.java index f58d6717..b426d5b1 100644 --- a/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/AE2wtlibComponents.java +++ b/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/AE2wtlibComponents.java @@ -53,6 +53,8 @@ public class AE2wtlibComponents { .persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); public static final DataComponentType PICK_BLOCK = register("pick_block", builder -> builder .persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); + public static final DataComponentType CRAFT_IF_MISSING = register("craft_if_missing", builder -> builder + .persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); public static final DataComponentType PATTERN_ENCODING_LOGIC = register("pattern_encoding_logic", COMPOUND_TAG_CODECS); diff --git a/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/TextConstants.java b/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/TextConstants.java index f30bb596..49be9ffe 100644 --- a/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/TextConstants.java +++ b/ae2wtlib_api/src/main/java/de/mari_023/ae2wtlib/api/TextConstants.java @@ -95,6 +95,7 @@ public static Component getInsertMode(IncludeExclude includeExclude) { public static final Component TERMINAL_SETTINGS = Component .translatable("gui.ae2wtlib.wireless_terminal_settings_title"); public static final Component PICK_BLOCK = Component.translatable("gui.ae2wtlib.pick_block.text"); + public static final Component CRAFT_IF_MISSING = Component.translatable("gui.ae2wtlib.craft_if_missing.text"); public static final Component RESTOCK = Component.translatable("gui.ae2wtlib.restock.text"); public static final Component MAGNET = Component.translatable("gui.ae2wtlib.magnet.text"); public static final Component PICKUP_TO_ME = Component.translatable("gui.ae2wtlib.pickup_to_me.text"); diff --git a/src/main/java/de/mari_023/ae2wtlib/AE2wtlibEvents.java b/src/main/java/de/mari_023/ae2wtlib/AE2wtlibEvents.java index 45aa6874..9a602cba 100644 --- a/src/main/java/de/mari_023/ae2wtlib/AE2wtlibEvents.java +++ b/src/main/java/de/mari_023/ae2wtlib/AE2wtlibEvents.java @@ -15,6 +15,7 @@ import appeng.api.config.IncludeExclude; import appeng.api.stacks.AEItemKey; import appeng.me.helpers.PlayerSource; +import appeng.menu.me.crafting.CraftAmountMenu; import de.mari_023.ae2wtlib.api.AE2wtlibComponents; import de.mari_023.ae2wtlib.api.AE2wtlibTags; @@ -181,9 +182,15 @@ public static void pickBlock(ServerPlayer player, ItemStack stack) { if (insert < toReplace.getCount()) return; int targetAmount = stack.getMaxStackSize(); - var extracted = networkInventory.extract(AEItemKey.of(stack), targetAmount, Actionable.SIMULATE, playerSource); - if (extracted == 0) + var what = AEItemKey.of(stack); + var extracted = networkInventory.extract(what, targetAmount, Actionable.SIMULATE, playerSource); + if (extracted == 0) { + if (!terminal.getOrDefault(AE2wtlibComponents.CRAFT_IF_MISSING, false) + || cTHandler.getTargetGrid().getCraftingService().getCraftingFor(what).isEmpty()) + return; + CraftAmountMenu.open(player, cTHandler.getLocator(), what, 1); return; + } insert = networkInventory.insert(AEItemKey.of(toReplace), toReplace.getCount(), Actionable.MODULATE, playerSource); diff --git a/src/main/java/de/mari_023/ae2wtlib/networking/TerminalSettingsPacket.java b/src/main/java/de/mari_023/ae2wtlib/networking/TerminalSettingsPacket.java index a1637539..21fff6b7 100644 --- a/src/main/java/de/mari_023/ae2wtlib/networking/TerminalSettingsPacket.java +++ b/src/main/java/de/mari_023/ae2wtlib/networking/TerminalSettingsPacket.java @@ -14,7 +14,7 @@ import de.mari_023.ae2wtlib.wct.magnet_card.MagnetMode; public record TerminalSettingsPacket(ItemMenuHostLocator terminal, boolean pickBlock, boolean restock, boolean magnet, - boolean pickupToME) implements AE2wtlibPacket { + boolean pickupToME, boolean craftIfMissing) implements AE2wtlibPacket { public static final Type ID = new Type<>(AE2wtlibAPI.id("terminal_settings")); public static final StreamCodec STREAM_CODEC = StreamCodec @@ -24,11 +24,13 @@ public record TerminalSettingsPacket(ItemMenuHostLocator terminal, boolean pickB ByteBufCodecs.BOOL, TerminalSettingsPacket::restock, ByteBufCodecs.BOOL, TerminalSettingsPacket::magnet, ByteBufCodecs.BOOL, TerminalSettingsPacket::pickupToME, + ByteBufCodecs.BOOL, TerminalSettingsPacket::craftIfMissing, TerminalSettingsPacket::new); @Override public void processPacketData(Player player) { var stack = terminal.locateItem(player); stack.set(AE2wtlibComponents.PICK_BLOCK, pickBlock); + stack.set(AE2wtlibComponents.CRAFT_IF_MISSING, craftIfMissing); stack.set(AE2wtlibComponents.RESTOCK, restock); var magnetSettings = stack.getOrDefault(AE2wtlibAdditionalComponents.MAGNET_SETTINGS, MagnetMode.OFF); magnetSettings = magnetSettings.set(magnet, pickupToME); diff --git a/src/main/java/de/mari_023/ae2wtlib/wct/WirelessTerminalSettingsScreen.java b/src/main/java/de/mari_023/ae2wtlib/wct/WirelessTerminalSettingsScreen.java index 7c068091..54902997 100644 --- a/src/main/java/de/mari_023/ae2wtlib/wct/WirelessTerminalSettingsScreen.java +++ b/src/main/java/de/mari_023/ae2wtlib/wct/WirelessTerminalSettingsScreen.java @@ -18,7 +18,10 @@ import de.mari_023.ae2wtlib.wct.magnet_card.MagnetMode; public class WirelessTerminalSettingsScreen extends AESubScreen { - private final AECheckbox pickBlock = widgets.addCheckbox("pickBlock", TextConstants.PICK_BLOCK, this::save); + private final AECheckbox pickBlock = widgets.addCheckbox("pickBlock", TextConstants.PICK_BLOCK, + this::changeVisibility); + private final AECheckbox craftIfMissing = widgets.addCheckbox("craftIfMissing", TextConstants.CRAFT_IF_MISSING, + this::save); private final AECheckbox restock = widgets.addCheckbox("restock", TextConstants.RESTOCK, this::save); private final AECheckbox magnet = widgets.addCheckbox("magnet", TextConstants.MAGNET, this::save); private final AECheckbox pickupToME = widgets.addCheckbox("pickupToME", TextConstants.PICKUP_TO_ME, this::save); @@ -29,6 +32,8 @@ public WirelessTerminalSettingsScreen(WCTScreen parent) { new TabButton(Icon.BACK, menu.getHost().getMainMenuIcon().getHoverName(), btn -> returnToParent())); pickBlock.setSelected(stack().getOrDefault(AE2wtlibComponents.PICK_BLOCK, false)); + craftIfMissing.setSelected(stack().getOrDefault(AE2wtlibComponents.CRAFT_IF_MISSING, false)); + craftIfMissing.active = pickBlock.isSelected(); restock.setSelected(stack().getOrDefault(AE2wtlibComponents.RESTOCK, false)); magnet.setSelected(stack().getOrDefault(AE2wtlibAdditionalComponents.MAGNET_SETTINGS, MagnetMode.OFF).magnet()); pickupToME.setSelected( @@ -49,11 +54,17 @@ private ItemStack stack() { return ((WTMenuHost) getMenu().getHost()).getItemStack(); } + private void changeVisibility() { + craftIfMissing.active = pickBlock.isSelected(); + save(); + } + private void save() { var locator = ((WTMenuHost) getMenu().getHost()).getLocator(); if (locator == null) return; PacketDistributor.sendToServer(new TerminalSettingsPacket(locator, - pickBlock.isSelected(), restock.isSelected(), magnet.isSelected(), pickupToME.isSelected())); + pickBlock.isSelected(), restock.isSelected(), magnet.isSelected(), pickupToME.isSelected(), + craftIfMissing.isSelected())); } } diff --git a/src/main/resources/assets/ae2/screens/wtlib/wireless_terminal_settings.json b/src/main/resources/assets/ae2/screens/wtlib/wireless_terminal_settings.json index ec93b5b2..7b3ba09b 100644 --- a/src/main/resources/assets/ae2/screens/wtlib/wireless_terminal_settings.json +++ b/src/main/resources/assets/ae2/screens/wtlib/wireless_terminal_settings.json @@ -18,7 +18,7 @@ "search_settings_title": { "position": { "left": 8, - "top": 65 + "top": 73 }, "text": { "translate": "gui.ae2wtlib.magnet_settings_title" @@ -37,11 +37,16 @@ "top": 25, "width": 180 }, - "restock": { + "craftIfMissing": { "left": 10, "top": 41, "width": 180 }, + "restock": { + "left": 10, + "top": 57, + "width": 180 + }, "magnet": { "left": 10, "top": 83, diff --git a/src/main/resources/assets/ae2wtlib/lang/en_us.json b/src/main/resources/assets/ae2wtlib/lang/en_us.json index ec18174b..82a59e85 100644 --- a/src/main/resources/assets/ae2wtlib/lang/en_us.json +++ b/src/main/resources/assets/ae2wtlib/lang/en_us.json @@ -24,6 +24,7 @@ "gui.ae2wtlib.wireless_terminal_settings_title" : "Wireless Terminal Settings", "gui.ae2wtlib.magnet_settings_title" : "Magnet Settings", "gui.ae2wtlib.pick_block.text" : "Enable Pick Block", + "gui.ae2wtlib.craft_if_missing.text": "Craft if Missing", "gui.ae2wtlib.restock.text" : "Restock", "gui.ae2wtlib.magnet.text" : "Magnet", "gui.ae2wtlib.pickup_to_me.text" : "Pickup to ME System",