From 5c679c85be73aa23de6535fb197d0692cffd0d53 Mon Sep 17 00:00:00 2001 From: Legends11 <235496468+tickwarden@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:50:50 +0300 Subject: [PATCH 1/6] Add files via upload --- CONTRIBUTING.md | 2 +- .../java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7aa7375..cbf6a13 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ cd guiAPI ./gradlew build ``` -The built jar is at `build/libs/guiapi-1.0.5.jar`. +The built jar is at `build/libs/guiapi-1.0.3.jar`. To run in a local Minecraft instance, use Fabric's `runServer` task or drop the jar into a test server's `mods/` folder. diff --git a/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java b/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java index 12a756e..6a18e71 100644 --- a/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java +++ b/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java @@ -685,7 +685,9 @@ static boolean executeAction(ServerPlayerEntity player, GuiDefinition def, server.getCommandManager().executeWithPrefix(player.getCommandSource(), cmd); } } - case NONE -> { return true; } + case NONE -> { + return true; + } case ANVIL_INPUT -> { String resolved = resolve(action.value(), player, def, currentPage); String[] parts = resolved.split(":", 2); @@ -702,8 +704,10 @@ static boolean executeAction(ServerPlayerEntity player, GuiDefinition def, }); } } - case NONE -> { return true; } case CLOSE -> { + player.closeHandledScreen(); + return true; + } case OPEN_GUI -> { navigateAway(player); player.closeHandledScreen(); From af466ca0854e18343ee69ea545475a0e96191794 Mon Sep 17 00:00:00 2001 From: Legends11 <235496468+tickwarden@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:57:41 +0300 Subject: [PATCH 2/6] Add files via upload --- .../toolkitmc/guiapi/gui/AnvilGuiHandler.java | 28 +++++++++++++++++-- .../guiapi/gui/BarrelGuiHandler.java | 9 +++--- .../toolkitmc/guiapi/gui/GuiDefinition.java | 1 + 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/toolkitmc/guiapi/gui/AnvilGuiHandler.java b/src/main/java/dev/toolkitmc/guiapi/gui/AnvilGuiHandler.java index 193d901..d19ddd5 100644 --- a/src/main/java/dev/toolkitmc/guiapi/gui/AnvilGuiHandler.java +++ b/src/main/java/dev/toolkitmc/guiapi/gui/AnvilGuiHandler.java @@ -18,6 +18,30 @@ public interface AnvilCallback { void onInput(ServerPlayerEntity player, String text); } + private static String getNewItemNameReflected(AnvilScreenHandler handler) { + try { + java.lang.reflect.Field field = AnvilScreenHandler.class.getDeclaredField("newItemName"); + field.setAccessible(true); + String val = (String) field.get(handler); + return val != null ? val : ""; + } catch (Exception e) { + try { + // Fallback to common Yarn mapping fields for newItemName + java.lang.reflect.Field field = AnvilScreenHandler.class.getDeclaredField("field_30755"); + field.setAccessible(true); + String val = (String) field.get(handler); + return val != null ? val : ""; + } catch (Exception e2) { + // Ultimate fallback to output slot stack name + ItemStack stack = handler.getSlot(2).getStack(); + if (!stack.isEmpty()) { + return stack.getName().getString(); + } + return ""; + } + } + } + public static void openInput(ServerPlayerEntity player, String title, String defaultText, AnvilCallback callback) { player.openHandledScreen(new NamedScreenHandlerFactory() { @Override @@ -36,7 +60,7 @@ public boolean canUse(PlayerEntity player) { @Override public void onSlotClick(int slotIndex, int button, net.minecraft.screen.slot.SlotActionType actionType, PlayerEntity playerEntity) { if (slotIndex == 2) { // Output slot - String text = this.getNewItemName(); + String text = getNewItemNameReflected(this); if (playerEntity instanceof ServerPlayerEntity sp) { sp.closeHandledScreen(); callback.onInput(sp, text); @@ -53,7 +77,7 @@ public void updateResult() { this.input.setStack(0, paper); ItemStack output = new ItemStack(Items.PAPER); - output.set(net.minecraft.component.DataComponentTypes.CUSTOM_NAME, Text.literal(this.getNewItemName())); + output.set(net.minecraft.component.DataComponentTypes.CUSTOM_NAME, Text.literal(getNewItemNameReflected(this))); this.output.setStack(0, output); this.sendContentUpdates(); diff --git a/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java b/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java index 6a18e71..6d50e38 100644 --- a/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java +++ b/src/main/java/dev/toolkitmc/guiapi/gui/BarrelGuiHandler.java @@ -87,8 +87,8 @@ public static void open(ServerPlayerEntity player, GuiDefinition def) { private static boolean hasCustomNbt(net.minecraft.entity.Entity entity, String key) { NbtCompound nbt = new NbtCompound(); - entity.writeNbt(nbt); - return nbt.contains(key) && nbt.getBoolean(key); + entity.saveNbt(nbt); + return nbt.contains(key) && nbt.getBoolean(key).orElse(false); } private static SimpleInventory populateChestMinecart(ServerPlayerEntity player, GuiDefinition def, int page, net.minecraft.entity.vehicle.ChestMinecartEntity cart) { @@ -113,7 +113,8 @@ public static void open(ServerPlayerEntity player, GuiDefinition def, int page) int finalRows = rows; if (def.getContainerType() == GuiDefinition.ContainerType.CHEST_MINECART) { finalRows = 3; - List minecarts = player.getServerWorld().getEntitiesByClass( + net.minecraft.server.world.ServerWorld world = (net.minecraft.server.world.ServerWorld) player.getWorld(); + List minecarts = world.getEntitiesByClass( net.minecraft.entity.vehicle.ChestMinecartEntity.class, player.getBoundingBox().expand(8.0), cart -> cart.getCommandTags().contains("MyGUI") || hasCustomNbt(cart, "MyGUI") @@ -698,7 +699,7 @@ static boolean executeAction(ServerPlayerEntity player, GuiDefinition def, final int previousPage = currentPage; AnvilGuiHandler.openInput(player, anvilTitle, "Type here...", (sp, text) -> { - GuiVarStore.INSTANCE.put(sp.getUuid(), varKey, text); + GuiVarStore.INSTANCE.set(sp.getUuid(), varKey, text); dev.toolkitmc.guiapi.loader.GuiRegistry.INSTANCE.get(previousGuiId) .ifPresent(target -> open(sp, target, previousPage)); }); diff --git a/src/main/java/dev/toolkitmc/guiapi/gui/GuiDefinition.java b/src/main/java/dev/toolkitmc/guiapi/gui/GuiDefinition.java index 6f856f9..e50c1d1 100644 --- a/src/main/java/dev/toolkitmc/guiapi/gui/GuiDefinition.java +++ b/src/main/java/dev/toolkitmc/guiapi/gui/GuiDefinition.java @@ -502,6 +502,7 @@ private static ButtonAction parseAction(JsonObject a) { public Optional getFiller() { return filler; } public int getTickRate() { return tickRate; } public boolean isCloseOnMove() { return closeOnMove; } + public ContainerType getContainerType() { return containerType; } /** Returns only buttons belonging to the given page. */ public List