From 08f9763b8322f399b8221e230649653e42745891 Mon Sep 17 00:00:00 2001 From: skippyall <121978267+skippyall@users.noreply.github.com> Date: Thu, 30 Apr 2026 23:56:21 +0200 Subject: [PATCH] Go Back! --- .../InstructionBoundBlock.java | 2 +- .../InstructionBoundBlockEntity.java | 4 ++- .../skippyall/minions/gui/GuiDisplay.java | 16 ++++++++-- .../skippyall/minions/gui/MinionsGui.java | 32 +++++++++++-------- .../skippyall/minions/gui/PaginatedList.java | 18 +++++++---- .../minions/gui/input/ChoiceInput.java | 16 +++++++--- .../minions/gui/input/TextInput.java | 10 +++--- .../minions/gui/instruction/ArgumentGui.java | 13 +++----- .../instruction/ConfigureInstructionGui.java | 14 +++++--- .../minions/gui/instruction/ConverterGui.java | 10 ++---- .../gui/instruction/ConverterListGui.java | 2 ++ .../gui/instruction/InstructionGui.java | 18 +++++++---- .../gui/instruction/InstructionListGui.java | 6 ++-- .../minions/gui/minion/GuiContextImpl.java | 6 ++-- .../gui/minion/MinionInventoryGui.java | 2 ++ .../program/supplier/AnalogInputSupplier.java | 2 ++ .../resources/assets/minions/lang/en_us.json | 5 +++ 17 files changed, 111 insertions(+), 65 deletions(-) diff --git a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java index 4cad6fb..1738131 100644 --- a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java +++ b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlock.java @@ -52,7 +52,7 @@ public abstract class InstructionBoundBlock extends Block implements EntityBlock world.getBlockEntity(pos, getBlockEntityType()).ifPresent(be -> { String name = MinionPersistentState.get(world.getServer()).getMinionData(be.getMinionUuid()).name(); - player.sendSystemMessage(Component.translatable("minions.reference.instruction.tooltip", name, be.getInstructionName())); + player.sendSystemMessage(Component.translatable("minions.reference.instruction.tooltip", be.getInstructionName(), name)); }); return InteractionResult.SUCCESS; } diff --git a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java index 832dbd3..bb76dbd 100644 --- a/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java +++ b/src/main/java/io/github/skippyall/minions/block/instruction_bound/InstructionBoundBlockEntity.java @@ -28,7 +28,9 @@ public abstract class InstructionBoundBlockEntity CODEC = MinionRegistries.GUI_DISPLAY_TYPE.byNameCodec().dispatch(GuiDisplay::getCodec, codec -> codec.fieldOf("data")); GuiDisplay DEFAULT_DISPLAY = new ItemBased(Items.BARRIER); + TooltipDisplay TOOLTIP_DISPLAY = createTooltipDisplay(); + + private static TooltipDisplay createTooltipDisplay() { + LinkedHashSet> set = new LinkedHashSet<>(); + for(DataComponentType type : BuiltInRegistries.DATA_COMPONENT_TYPE) { + if(type != DataComponents.LORE) { + set.add(type); + } + } + return new TooltipDisplay(false, set); + } static GuiDisplay getGuiDisplay(Identifier id, RegistryAccess manager) { return manager.lookup(MinionRegistries.GUI_DISPLAY).map(registry -> registry.getValue(id)).orElse(DEFAULT_DISPLAY); @@ -94,7 +106,7 @@ public interface GuiDisplay { @Override public ItemStackTemplate createItemStackTemplate() { return new ItemStackTemplate(item, DataComponentPatch.builder() - .set(DataComponents.TOOLTIP_DISPLAY, new TooltipDisplay(true, ReferenceSortedSets.emptySet())) + .set(DataComponents.TOOLTIP_DISPLAY, TOOLTIP_DISPLAY) .set(DataComponents.RARITY, Rarity.COMMON) .build()); } diff --git a/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java b/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java index 66aba73..4dbe535 100644 --- a/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/MinionsGui.java @@ -1,6 +1,9 @@ package io.github.skippyall.minions.gui; +import eu.pb4.sgui.api.elements.GuiElementBuilder; +import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.Nullable; public abstract class MinionsGui { @@ -44,26 +47,29 @@ public abstract class MinionsGui { public void close(boolean alreadyClosed) { if(open) { - if(parent != null) { - parent.child = null; - //parent.reopen(); + open = false; + if(child != null) { + child.close(alreadyClosed); + } else if(!alreadyClosed) { + closeBacking(); } - closeNoOpen(alreadyClosed); } } - private void closeNoOpen(boolean closeBacking) { - open = false; - boolean hasChild = child != null; - if(hasChild) { - child.closeNoOpen(closeBacking); - } + public void goBack() { if(parent != null) { + open = false; parent.child = null; + parent.reopen(); + } else { + close(false); } - if(closeBacking && !hasChild) { - closeBacking(); - } + } + + public GuiElementBuilder backButton() { + return new GuiElementBuilder(Items.MANGROVE_DOOR) + .setName(Component.translatable("gui.back")) + .setCallback(this::goBack); } protected abstract void closeBacking(); diff --git a/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java b/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java index fff2293..632c5af 100644 --- a/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java +++ b/src/main/java/io/github/skippyall/minions/gui/PaginatedList.java @@ -27,13 +27,15 @@ public class PaginatedList extends MinionsGui { @Override protected void open() { - gui = new SimpleGui(MenuType.GENERIC_9x4, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x6, viewer, false) { @Override public void onPlayerClose(boolean success) { onBackingClosed(); } }; gui.setTitle(title); + + gui.setSlot(8, backButton()); addItems(); gui.open(); } @@ -52,12 +54,14 @@ public class PaginatedList extends MinionsGui { } private void addItems() { - for(int i = 27 * page; i < Math.min(27 * (page + 1), size); i++) { - gui.addSlot(display.apply(i, this)); + int slot = 9; + for(int i = 36 * page; i < Math.min(36 * (page + 1), size); i++) { + gui.setSlot(slot, display.apply(i, this)); + slot++; } if(page > 0) { - gui.setSlot(30, new GuiElementBuilder(Items.SPECTRAL_ARROW) + gui.setSlot(48, new GuiElementBuilder(Items.SPECTRAL_ARROW) .setItemName(Component.translatable("book.page_button.previous")) .setCallback(() -> { page--; @@ -65,11 +69,11 @@ public class PaginatedList extends MinionsGui { }) ); } else { - gui.clearSlot(30); + gui.clearSlot(48); } if(27 * (page + 1) < size) { - gui.setSlot(32, new GuiElementBuilder(Items.ARROW) + gui.setSlot(50, new GuiElementBuilder(Items.ARROW) .setItemName(Component.translatable("book.page_button.next")) .setCallback(() -> { page++; @@ -77,7 +81,7 @@ public class PaginatedList extends MinionsGui { }) ); } else { - gui.clearSlot(32); + gui.clearSlot(50); } } } diff --git a/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java b/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java index 24dead4..1cae121 100644 --- a/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java +++ b/src/main/java/io/github/skippyall/minions/gui/input/ChoiceInput.java @@ -74,14 +74,14 @@ public class ChoiceInput { return future; } - public static CompletableFuture confirm(MinionsGui parent, Component title) { - CompletableFuture future = new CompletableFuture<>(); + public static CompletableFuture confirm(MinionsGui parent, Component title) { + CompletableFuture future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (onClose, me) -> { SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, parent.getViewer(), false) { @Override public void onPlayerClose(boolean success) { - future.cancel(false); + future.complete(false); onClose.run(); } }; @@ -90,12 +90,18 @@ public class ChoiceInput { gui.setSlot(3, new GuiElementBuilder(Items.REDSTONE_BLOCK) .setName(Component.translatable("minions.gui.abort")) - .setCallback(() -> future.cancel(false)) + .setCallback(() -> { + future.complete(false); + me.goBack(); + }) ); gui.setSlot(5, new GuiElementBuilder(Items.EMERALD_BLOCK) .setName(Component.translatable("minions.gui.confirm")) - .setCallback(() -> future.complete(null)) + .setCallback(() -> { + future.complete(true); + me.goBack(); + }) ); gui.open(); diff --git a/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java b/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java index 78b667a..e683b97 100644 --- a/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java +++ b/src/main/java/io/github/skippyall/minions/gui/input/TextInput.java @@ -53,9 +53,12 @@ public class TextInput extends AnvilInputGui { CompletableFuture future = new CompletableFuture<>(); new SimpleMinionsGui(gui, (onClose, me) -> { TextInput input = new TextInput<>(gui.getViewer(), title, defaultValue, parser, future); - future.handle((v, e) -> { - onClose.run(); - return null; + future.whenComplete((v, e) -> { + if(e != null) { + onClose.run(); + } else { + me.goBack(); + } }); input.open(); return input; @@ -115,7 +118,6 @@ public class TextInput extends AnvilInputGui { if(result != null) { result.ifSuccess(success -> { isConfirm = true; - close(); future.complete(success); }); } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java index 8c64cba..b107e58 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ArgumentGui.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; public class ArgumentGui extends MinionsGui { private final GuiContext.ValueSupplier context; - private final MinionFakePlayer minion; private final ConfiguredInstruction instruction; private final Parameter parameter; @@ -34,7 +33,6 @@ public class ArgumentGui extends MinionsGui { public ArgumentGui(MinionsGui parent, GuiContext.ValueSupplier context) { super(parent); - minion = context.getMinion(); instruction = context.getInstruction(); this.parameter = context.getParameter(); this.context = context; @@ -71,6 +69,8 @@ public class ArgumentGui extends MinionsGui { Component.translatable(TranslationUtil.getTranslationKey(parameter.type(), MinionRegistries.VALUE_TYPES)) )); + gui.setSlot(2, backButton()); + updateTypeConfiguration(); updateArgumentConfiguration(); updateConverterConfiguration(); @@ -102,12 +102,7 @@ public class ArgumentGui extends MinionsGui { .setName(Component.translatable("minions.gui.instruction.argument.configure.data")) .addLoreLine(getArgument() != null ? getArgument().getDisplayText() : Component.translatable("minions.gui.not_set")) .setCallback(() -> argumentType.openConfiguration(this, parameter.type(), getArgument()) - .thenAccept(newArgument -> { - setArgument(newArgument); - if(child != null) { - child.close(); - } - }) + .thenAccept(this::setArgument) ) ); } @@ -149,7 +144,7 @@ public class ArgumentGui extends MinionsGui { new GuiElementBuilder(GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_SUPPLIER_TYPES, type, viewer.registryAccess())) .setCallback(() -> { setArgumentType(type); - me.close(); + me.goBack(); }) ); } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java index 23fef3c..be31cf2 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConfigureInstructionGui.java @@ -50,7 +50,7 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns gui.setTitle(Component.literal(name)); - gui.setSlot(7, new GuiElementBuilder(Items.ANVIL) + gui.setSlot(6, new GuiElementBuilder(Items.ANVIL) .setName(Component.translatable("minions.gui.instruction.configure.rename")) .setCallback(() -> InstructionGui.inputInstructionName(this, context, name).thenAccept(newName -> { minion.getInstructionManager().setInstructionName(name, newName); @@ -58,15 +58,19 @@ public class ConfigureInstructionGui extends MinionsGui implements ConfiguredIns })) ); - gui.setSlot(8, new GuiElementBuilder(Items.LAVA_BUCKET) + gui.setSlot(7, new GuiElementBuilder(Items.LAVA_BUCKET) .setName(Component.translatable("minions.gui.instruction.configure.delete")) .setCallback(() -> ChoiceInput.confirm(this, Component.translatable("minions.gui.instruction.configure.delete.confirm", name)) - .thenAccept(v -> { - minion.getInstructionManager().removeInstruction(name); - close(); + .thenAccept((confirmed) -> { + if(confirmed) { + minion.getInstructionManager().removeInstruction(name); + goBack(); + } })) ); + gui.setSlot(8, backButton()); + updateSuppliers(); gui.setSlot(13, InstructionGui.createInstructionElement(instruction.getInstruction(), viewer.registryAccess())); diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java index cceacc4..5d145a0 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterGui.java @@ -53,6 +53,7 @@ public class ConverterGui extends MinionsGui { updateTypeDisplay(); updateConverterDisplay(); + gui.setSlot(8, backButton()); gui.open(); } @@ -101,7 +102,7 @@ public class ConverterGui extends MinionsGui { GuiDisplay.getDisplayStackWithName(MinionRegistries.VALUE_CONVERTER_TYPES, type, viewer.registryAccess()) ).setCallback(() -> { setType(type); - me.close(); + me.goBack(); }) ); } @@ -109,12 +110,7 @@ public class ConverterGui extends MinionsGui { private void configureData() { if(valueConverterType != null) { valueConverterType.configure(this, from, to, converter) - .thenAccept(newConverter -> { - setConverter(newConverter); - if(child != null) { - child.close(); - } - }); + .thenAccept(this::setConverter); } } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java index d61dcc7..69c1c50 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/ConverterListGui.java @@ -61,6 +61,8 @@ public class ConverterListGui extends MinionsGui { }) ); + gui.setSlot(8, backButton()); + gui.open(); } diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java index e0079cd..5bf2dd8 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionGui.java @@ -30,8 +30,8 @@ import java.util.NoSuchElementException; import java.util.concurrent.CompletableFuture; public class InstructionGui { - public static MinionsGui openInstructionMainMenu(MinionsGui parent, GuiContext.Minion context) { - return new SimpleMinionsGui(parent, (onClose, me) -> { + public static void openInstructionMainMenu(MinionsGui parent, GuiContext.Minion context) { + new SimpleMinionsGui(parent, (onClose, me) -> { ServerPlayer player = parent.getViewer(); SimpleGui gui = new SimpleGui(MenuType.GENERIC_3x3, player, false) { @@ -42,6 +42,7 @@ public class InstructionGui { }; gui.setTitle(Component.translatable("minions.gui.instruction.title")); + gui.setSlot(2, me.backButton()); gui.setSlot(3, new GuiElementBuilder() .setItem(Items.BOOK) .setName(Component.translatable("minions.gui.instruction.list")) @@ -101,7 +102,7 @@ public class InstructionGui { CompletableFuture> future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (closeHandler, me) -> { - SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x4, viewer, false) { @Override public void onPlayerClose(boolean success) { if (!future.isDone()) { @@ -112,11 +113,13 @@ public class InstructionGui { }; gui.setTitle(Component.translatable("minions.gui.instruction.select_instruction")); + gui.setSlot(8, me.backButton()); + for (int i = 0; i < minion.getModuleInventory().getContainerSize(); i++) { ItemStack moduleItem = minion.getModuleInventory().getItem(i); MinionModule module = moduleItem.get(MinionComponentTypes.MODULE); if (module != null && !module.instructions().isEmpty()) { - gui.addSlot(new GuiElementBuilder(moduleItem) + gui.setSlot(i + 9, new GuiElementBuilder(moduleItem) .setCallback(() -> selectInstructionMenu(parent, context, module) .thenApply(future::complete) ) @@ -134,7 +137,7 @@ public class InstructionGui { CompletableFuture> future = new CompletableFuture<>(); new SimpleMinionsGui(parent, (closeHandler, me) -> { - SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x3, parent.getViewer(), false) { + SimpleGui gui = new SimpleGui(MenuType.GENERIC_9x4, parent.getViewer(), false) { @Override public void onPlayerClose(boolean success) { if (!future.isDone()) { @@ -145,10 +148,13 @@ public class InstructionGui { }; gui.setTitle(Component.translatable("minions.gui.instruction.select_instruction")); + gui.setSlot(8, me.backButton()); + int slot = 9; for (InstructionType instructionType : module.instructions()) { - gui.addSlot(createInstructionElement(instructionType, parent.getViewer().registryAccess()) + gui.setSlot(slot, createInstructionElement(instructionType, parent.getViewer().registryAccess()) .setCallback(() -> future.complete(instructionType)) ); + slot++; } gui.open(); diff --git a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java index a9a37f5..cae25b4 100644 --- a/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/instruction/InstructionListGui.java @@ -33,13 +33,15 @@ public class InstructionListGui extends MinionsGui implements MinionListener { @Override protected void open() { minion.addMinionListener(this); - gui = new SimpleGui(MenuType.GENERIC_9x3, viewer, false) { + gui = new SimpleGui(MenuType.GENERIC_9x4, viewer, false) { @Override public void onPlayerClose(boolean success) { onBackingClosed(); } }; gui.setTitle(Component.translatable("minions.gui.instruction.title")); + + gui.setSlot(8, backButton()); resetInstructionList(); gui.open(); } @@ -51,7 +53,7 @@ public class InstructionListGui extends MinionsGui implements MinionListener { } private void resetInstructionList() { - int i = 0; + int i = 9; for (String instructionName : minion.getInstructionManager().getInstructionNames()) { ConfiguredInstruction instruction = minion.getInstructionManager().getInstruction(instructionName); gui.setSlot(i, new GuiElementBuilder(GuiDisplay.getGuiDisplayFor(MinionRegistries.INSTRUCTION_TYPES, instruction.getInstruction(), viewer.registryAccess()).createItemStack()) diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java index 1090933..f3613bb 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/GuiContextImpl.java @@ -23,7 +23,7 @@ public class GuiContextImpl implements GuiContext { private final MinionFakePlayer minion; public MinionImpl(GuiContext context, MinionFakePlayer minion) { - super(context); + super(context instanceof DelegatingGuiContextImpl impl ? impl.context : context); this.minion = minion; } @@ -38,7 +38,7 @@ public class GuiContextImpl implements GuiContext { private String name; public InstructionImpl(GuiContext.Minion context, ConfiguredInstruction instruction, String name) { - super(context); + super(context instanceof DelegatingMinionImpl impl ? impl.context : context); this.instruction = instruction; this.name = name; } @@ -63,7 +63,7 @@ public class GuiContextImpl implements GuiContext { private final Parameter parameter; public ValueSupplierImpl(GuiContext.Instruction context, Parameter parameter) { - super(context); + super(context instanceof DelegatingInstructionImpl impl ? impl.context : context); this.parameter = parameter; } diff --git a/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java b/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java index 455ebbc..b29b983 100644 --- a/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java +++ b/src/main/java/io/github/skippyall/minions/gui/minion/MinionInventoryGui.java @@ -45,6 +45,8 @@ public class MinionInventoryGui extends MinionsGui { gui.setSlot(5, new ItemStack(Items.LEATHER_BOOTS)); gui.setSlot(6, new ItemStack(Items.SHIELD)); + gui.setSlot(8, backButton()); + gui.setSlot(2 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.HEAD, EquipmentSlot.HEAD.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); gui.setSlot(3 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.CHEST, EquipmentSlot.CHEST.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); gui.setSlot(4 + 9, new ArmorSlot(minion.getInventory(), minion, EquipmentSlot.LEGS, EquipmentSlot.LEGS.getIndex(Inventory.INVENTORY_SIZE), 0, 0, null)); diff --git a/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java b/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java index 25eba76..a142a8a 100644 --- a/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java +++ b/src/main/java/io/github/skippyall/minions/minion/program/supplier/AnalogInputSupplier.java @@ -87,11 +87,13 @@ public class AnalogInputSupplier implements ValueSupplier { }; gui.setTitle(Component.translatable("value_supplier.minions.analog_input")); + gui.setSlot(2, me.backButton()); gui.setSlot(4, new GuiElementBuilder(MinionItems.REFERENCE_ITEM) .setCallback(() -> { ItemStack cursor = parent.getViewer().containerMenu.getCarried(); if (cursor.is(MinionItems.REFERENCE_ITEM) && cursor.get(MinionComponentTypes.REFERENCE) instanceof BlockPosClipboard pos) { future.complete(new AnalogInputSupplier(pos.world(), pos.pos())); + me.goBack(); } }) .setItemName(Component.translatable("value_supplier.minions.analog_input.config.click_with_reference")) diff --git a/src/main/resources/assets/minions/lang/en_us.json b/src/main/resources/assets/minions/lang/en_us.json index 549fbd3..de6f475 100644 --- a/src/main/resources/assets/minions/lang/en_us.json +++ b/src/main/resources/assets/minions/lang/en_us.json @@ -74,6 +74,8 @@ "instruction.minions.walk": "Walk", "instruction.minions.walk.description": "Walk forward a specified amount of blocks", + "instruction.minions.walk_continuous": "Walk Continuously", + "instruction.minions.walk_continuous.description": "Walk forward until the instruction is stopped", "instruction.minions.turn": "Turn", "instruction.minions.turn.description": "Turn the head by specific angle", "instruction.minions.attack": "Attack", @@ -81,6 +83,9 @@ "instruction.minions.use": "Use", "instruction.minions.use.description": "Use and place blocks", "instruction.minions.swap_item": "Swap Items", + "instruction.minions.swap_item.description": "Swap the items of two slots", + "instruction.minions.turn_vector": "Turn (Vector)", + "instruction.minions.turn_vector.description": "Turn the head so that it faces a block with specific cardinal offsets", "value_type.minions.long": "Integer", "value_type.minions.double": "Decimal",