From d125478f9aec5a53dc6a7662930e4d8d9aa528bb Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Sat, 18 Oct 2025 21:01:41 -0700 Subject: [PATCH 1/6] `Crafter_Disabled_Slots` tag and mechanism --- .../denizen/objects/LocationTag.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index e686ef7c92..de2e502aa1 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4507,6 +4507,61 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk } return new ElementTag(chiseledBookshelf.getSlot(input.toVector()) + 1); }); + + // <--[tag] + // @attribute + // @returns ListTag + // @mechanism LocationTag.crafter_disabled_slots + // @group world + // @description + // Returns the disabled slots of a crafter block from left to right, top to bottom. + // --> + tagProcessor.registerTag(ListTag.class, "crafter_disabled_slots", (attribute, object) -> { + if (!(object.getBlockState() instanceof Crafter crafter)) { + Debug.echoError("The 'LocationTag.crafter_disabled_slots' tag can only be called on a crafter block."); + return null; + } + ListTag slots = new ListTag(); + for (int i = 0; i <= 8; i++) { + if (crafter.isSlotDisabled(i)) { + slots.addObject(new ElementTag(i + 1)); + } + } + return slots; + }); + + // <--[mechanism] + // @object LocationTag + // @name crafter_disabled_slots + // @input ListTag + // @description + // Sets which slots in a crafter are disabled from left to right, top to bottom. + // Provide no input to enable all slots. + // @tags + // + // @example + // # Disables the slots in the top left and middle right + // - adjustblock <[block]> crafter_disabled_slots:1|6 + // --> + tagProcessor.registerMechanism("crafter_disabled_slots", false, ListTag.class, (object, mechanism, input) -> { + if (!(object.getBlockState() instanceof Crafter crafter)) { + mechanism.echoError("The 'LocationTag.crafter_disabled_slots' mechanism can only be called on a crafter block."); + return; + } + for (int i = 0; i < 9; i++) { + crafter.setSlotDisabled(i, false); + } + for (String slot : input) { + ElementTag element = new ElementTag(slot); + if (element.isInt() && element.asInt() > 0 && element.asInt() <= 9) { + crafter.setSlotDisabled(element.asInt() - 1, true); + } + else { + mechanism.echoError("'" + slot + "' is not a valid slot for the 'crafter_disabled_slots' mechanism."); + } + } + crafter.update(); + }); } // <--[mechanism] From 804b8e68c669d73799bbdbb1c5e6714138fd3198 Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Tue, 21 Oct 2025 18:37:49 -0700 Subject: [PATCH 2/6] minor changes --- .../java/com/denizenscript/denizen/objects/LocationTag.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index de2e502aa1..dabfb0436f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4541,14 +4541,14 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk // // @example // # Disables the slots in the top left and middle right - // - adjustblock <[block]> crafter_disabled_slots:1|6 + // - adjustblock <[location]> crafter_disabled_slots:1|6 // --> tagProcessor.registerMechanism("crafter_disabled_slots", false, ListTag.class, (object, mechanism, input) -> { if (!(object.getBlockState() instanceof Crafter crafter)) { mechanism.echoError("The 'LocationTag.crafter_disabled_slots' mechanism can only be called on a crafter block."); return; } - for (int i = 0; i < 9; i++) { + for (int i = 0; i <= 8; i++) { crafter.setSlotDisabled(i, false); } for (String slot : input) { From 1a9f4e75b6072ffea4ffd787779f46b2706f12be Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Tue, 21 Oct 2025 18:40:48 -0700 Subject: [PATCH 3/6] separate asInt check --- .../com/denizenscript/denizen/objects/LocationTag.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index dabfb0436f..e157af67f9 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4553,8 +4553,11 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk } for (String slot : input) { ElementTag element = new ElementTag(slot); - if (element.isInt() && element.asInt() > 0 && element.asInt() <= 9) { - crafter.setSlotDisabled(element.asInt() - 1, true); + if (element.isInt()) { + int value = element.asInt(); + if (value > 0 && value <= 9) { + crafter.setSlotDisabled(value - 1, true); + } } else { mechanism.echoError("'" + slot + "' is not a valid slot for the 'crafter_disabled_slots' mechanism."); From 96bcdac8db8defd9fe78ae660f273c2f301285b9 Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Thu, 13 Nov 2025 11:15:45 -0800 Subject: [PATCH 4/6] minor fixes --- .../denizenscript/denizen/objects/LocationTag.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index e157af67f9..72d3eac70e 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4517,8 +4517,8 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk // Returns the disabled slots of a crafter block from left to right, top to bottom. // --> tagProcessor.registerTag(ListTag.class, "crafter_disabled_slots", (attribute, object) -> { - if (!(object.getBlockState() instanceof Crafter crafter)) { - Debug.echoError("The 'LocationTag.crafter_disabled_slots' tag can only be called on a crafter block."); + if (!(object.getBlockStateForTag(attribute) instanceof Crafter crafter)) { + attribute.echoError("The 'LocationTag.crafter_disabled_slots' tag can only be called on a crafter block."); return null; } ListTag slots = new ListTag(); @@ -4535,7 +4535,8 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk // @name crafter_disabled_slots // @input ListTag // @description - // Sets which slots in a crafter are disabled from left to right, top to bottom. + // Sets which slots in a crafter are disabled. + // The slots are arranged from left to right, top to bottom. // Provide no input to enable all slots. // @tags // @@ -4557,11 +4558,10 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk int value = element.asInt(); if (value > 0 && value <= 9) { crafter.setSlotDisabled(value - 1, true); + continue; } } - else { - mechanism.echoError("'" + slot + "' is not a valid slot for the 'crafter_disabled_slots' mechanism."); - } + mechanism.echoError("'" + slot + "' is not a valid slot for the 'crafter_disabled_slots' mechanism."); } crafter.update(); }); From 7143c9bf10b3e21d8e75be91a535dc5f8a875d6e Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Thu, 13 Nov 2025 11:24:59 -0800 Subject: [PATCH 5/6] meta correction --- .../java/com/denizenscript/denizen/objects/LocationTag.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index 72d3eac70e..b69354e8d7 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4514,7 +4514,8 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk // @mechanism LocationTag.crafter_disabled_slots // @group world // @description - // Returns the disabled slots of a crafter block from left to right, top to bottom. + // Returns which slots in a crafter are disabled. + // The slots are arranged from left to right, top to bottom. // --> tagProcessor.registerTag(ListTag.class, "crafter_disabled_slots", (attribute, object) -> { if (!(object.getBlockStateForTag(attribute) instanceof Crafter crafter)) { From 52042127785897808f2031486cf2933de47732d4 Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Fri, 12 Dec 2025 16:31:00 -0800 Subject: [PATCH 6/6] renamed the tag and mechanism, cleaned up handling of mechanism --- .../denizen/objects/LocationTag.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index b69354e8d7..35501f2d69 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -4509,17 +4509,17 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk }); // <--[tag] - // @attribute + // @attribute // @returns ListTag - // @mechanism LocationTag.crafter_disabled_slots + // @mechanism LocationTag.disabled_slots // @group world // @description // Returns which slots in a crafter are disabled. // The slots are arranged from left to right, top to bottom. // --> - tagProcessor.registerTag(ListTag.class, "crafter_disabled_slots", (attribute, object) -> { + tagProcessor.registerTag(ListTag.class, "disabled_slots", (attribute, object) -> { if (!(object.getBlockStateForTag(attribute) instanceof Crafter crafter)) { - attribute.echoError("The 'LocationTag.crafter_disabled_slots' tag can only be called on a crafter block."); + attribute.echoError("The 'LocationTag.disabled_slots' tag can only be called on a crafter block."); return null; } ListTag slots = new ListTag(); @@ -4533,21 +4533,21 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk // <--[mechanism] // @object LocationTag - // @name crafter_disabled_slots + // @name disabled_slots // @input ListTag // @description // Sets which slots in a crafter are disabled. // The slots are arranged from left to right, top to bottom. // Provide no input to enable all slots. // @tags - // + // // @example // # Disables the slots in the top left and middle right - // - adjustblock <[location]> crafter_disabled_slots:1|6 + // - adjustblock <[location]> disabled_slots:1|6 // --> - tagProcessor.registerMechanism("crafter_disabled_slots", false, ListTag.class, (object, mechanism, input) -> { + tagProcessor.registerMechanism("disabled_slots", false, ListTag.class, (object, mechanism, input) -> { if (!(object.getBlockState() instanceof Crafter crafter)) { - mechanism.echoError("The 'LocationTag.crafter_disabled_slots' mechanism can only be called on a crafter block."); + mechanism.echoError("The 'LocationTag.disabled_slots' mechanism can only be called on a crafter block."); return; } for (int i = 0; i <= 8; i++) { @@ -4555,14 +4555,16 @@ else if (material.hasModernData() && material.getModernData() instanceof org.buk } for (String slot : input) { ElementTag element = new ElementTag(slot); - if (element.isInt()) { - int value = element.asInt(); - if (value > 0 && value <= 9) { - crafter.setSlotDisabled(value - 1, true); - continue; - } + if (!element.isInt()) { + mechanism.echoError("Invalid slot '" + slot + "' specified: must be an integer."); + continue; + } + int value = element.asInt(); + if (value < 1 || value > 9) { + mechanism.echoError("Invalid slot '" + slot + "' specified: must between 1 and 9."); + continue; } - mechanism.echoError("'" + slot + "' is not a valid slot for the 'crafter_disabled_slots' mechanism."); + crafter.setSlotDisabled(value - 1, true); } crafter.update(); });