From e29406ec43097e098182c50cbc7c04f3b743ec5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 18:22:35 +0100 Subject: [PATCH 01/11] add ExprItemModel --- .../bukkit/item/elements/ExprItemModel.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java new file mode 100644 index 00000000000..17db8a761fd --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -0,0 +1,78 @@ +package org.skriptlang.skript.bukkit.item.elements; + +import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.bukkitutil.ItemUtils; +import ch.njol.skript.classes.Changer.ChangeMode; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Example; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; +import ch.njol.skript.expressions.base.SimplePropertyExpression; +import ch.njol.util.coll.CollectionUtils; +import org.bukkit.NamespacedKey; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.registration.SyntaxRegistry; + +import static ch.njol.skript.classes.Changer.ChangeMode.SET; + +@Name("Item Model") +@Description("The item model of an item. Accepts a Namespaced Key (e.g. 'minecraft:emerald').") +@Example(""" + set the item model of player's held item to "diamond" + set the item model of {_item} to "minecraft:dirt" + """) +@Since("INSERT VERSION") +public class ExprItemModel extends SimplePropertyExpression { + public static void register(SyntaxRegistry registry) { + registry.register( + SyntaxRegistry.EXPRESSION, + infoBuilder(ExprItemModel.class, String.class, "item model", "itemtypes", true) + .supplier(ExprItemModel::new) + .build() + ); + } + + @Override + public @Nullable String convert(ItemType from) { + ItemStack itemStack = ItemUtils.asItemStack(from); + if (itemStack == null) return null; + + NamespacedKey key = itemStack.getItemMeta().getItemModel(); + if (key == null) return null; + + return key.asString(); + } + + @Override + public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { + //noinspection DataFlowIssue + NamespacedKey key = (mode == SET) ? NamespacedKey.fromString((String) delta[0]) : null; + + for (ItemType item : getExpr().getArray(event)) { + ItemMeta meta = item.getItemMeta(); + meta.setItemModel(key); + item.setItemMeta(meta); + } + } + + @Override + public Class @Nullable [] acceptChange(ChangeMode mode) { + return switch (mode) { + case SET, DELETE, RESET -> CollectionUtils.array(String.class); + default -> null; + }; + } + + @Override + public Class getReturnType() { + return String.class; + } + + @Override + protected String getPropertyName() { + return "item model"; + } +} From 4ffa700a7951a44d81b1641fbe2dc1ed28b298d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 18:22:47 +0100 Subject: [PATCH 02/11] add ExprItemWithModel --- .../skript/bukkit/item/ItemModule.java | 4 +- .../item/elements/ExprItemWithModel.java | 71 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java b/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java index d3b5d311cda..a55ec38bf9f 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java @@ -25,7 +25,9 @@ public Iterable children() { public void loadSelf(SkriptAddon addon) { register(addon, ExprItemWithLore::register, - ExprLore::register + ExprLore::register, + ExprItemModel::register, + ExprItemWithModel::register ); } diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java new file mode 100644 index 00000000000..ef32ec51ad8 --- /dev/null +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -0,0 +1,71 @@ +package org.skriptlang.skript.bukkit.item.elements; + +import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.doc.*; +import ch.njol.skript.expressions.base.PropertyExpression; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.util.Kleenean; +import org.bukkit.NamespacedKey; +import org.bukkit.event.Event; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.registration.DefaultSyntaxInfos; +import org.skriptlang.skript.registration.SyntaxRegistry; + +@Name("Item with model") +@Keywords("item model") +@Description("Returns a copy of an item with a custom item model. Accepts a Namespaced Key (e.g. 'minecraft:emerald').") +@Example(""" + set {_item} to emerald with model "minecraft:diamond" named "fake diamond"' + give {_item} to player + """) +@Since("INSERT VERSION") +public class ExprItemWithModel extends PropertyExpression { + + public static void register(SyntaxRegistry registry) { + registry.register( + SyntaxRegistry.EXPRESSION, + DefaultSyntaxInfos.Expression.builder(ExprItemWithModel.class, ItemType.class) + .addPattern("%itemtype% with [the] [item] model %string%") + .supplier(ExprItemWithModel::new) + .build() + ); + } + + private Expression keyExpr; + + @Override + @SuppressWarnings("unchecked") + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + setExpr((Expression) exprs[0]); + keyExpr = (Expression) exprs[1]; + return true; + } + + @Override + protected ItemType[] get(Event event, ItemType[] source) { + String keyString = keyExpr.getSingle(event); + if (keyString == null) + return source; + + NamespacedKey key = NamespacedKey.fromString(keyString); + return get(source, itemType -> { + itemType = itemType.clone(); + ItemMeta itemMeta = itemType.getItemMeta(); + itemMeta.setItemModel(key); + itemType.setItemMeta(itemMeta); + return itemType; + }); + } + + @Override + public Class getReturnType() { + return ItemType.class; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return getExpr().toString(event, debug) + " with item model " + keyExpr.toString(event, debug); + } +} From 5f64658a0d920bb35d05fcbb9857ec09fc180b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 18:23:02 +0100 Subject: [PATCH 03/11] add tests for Item model syntax --- .../skript/tests/bukkit/item/ExprItemModel.sk | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/test/skript/tests/bukkit/item/ExprItemModel.sk diff --git a/src/test/skript/tests/bukkit/item/ExprItemModel.sk b/src/test/skript/tests/bukkit/item/ExprItemModel.sk new file mode 100644 index 00000000000..e4148fb4595 --- /dev/null +++ b/src/test/skript/tests/bukkit/item/ExprItemModel.sk @@ -0,0 +1,39 @@ +test "ExprItemModel": + set {_item} to diamond + + set item model of {_item} to "emerald" + assert item model of {_item} is "minecraft:emerald" with "Set item model of item" + + set {_inv} to chest inventory with 1 row named "test slots" + set slot 1 of {_inv} to diamond + + set item model of slot 1 of {_inv} to "emerald" + + assert item model of slot 1 of {_inv} is "minecraft:emerald" with "Set item model of slot from container" + + set {_item} to dirt with item model "diamond" + assert item model of {_item} is "minecraft:diamond" with "ItemType with item model" + + reset item model of {_item} + assert item model of {_item} is not set with "Reset item model of item" + + set item model of {_item} to "minecraft:redstone" + delete item model of {_item} + assert item model of {_item} is not set with "Delete item model of item" + + set {_string} to "test_string" + set item model of {_item} to {_string} + assert item model of {_item} is "minecraft:test_string" with "Set item model from variable string" + + set item model of {_item} to {_} + assert item model of {_item} is not set with "Set item model of item to null" + + set {_item} to diamond with model {_} + assert item model of {_item} is not set with "Item with null item model" + + set {_item} to emerald with model {_string} + assert item model of {_item} is "minecraft:test_string" with "Item with item model of variable string" + + set {_item} to diamond + set item model of {_item} to "with spaces" + assert item model of {_item} is not set with "Attempt to set invalid key for item model" From 00c44d304a36d0d93a68b2180d2db380ab422518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 18:46:42 +0100 Subject: [PATCH 04/11] remove redundant conversion to ItemStack --- .../skript/bukkit/item/elements/ExprItemModel.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 17db8a761fd..80adc62bcf7 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -1,7 +1,6 @@ package org.skriptlang.skript.bukkit.item.elements; import ch.njol.skript.aliases.ItemType; -import ch.njol.skript.bukkitutil.ItemUtils; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Example; @@ -11,7 +10,6 @@ import ch.njol.util.coll.CollectionUtils; import org.bukkit.NamespacedKey; import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.Nullable; import org.skriptlang.skript.registration.SyntaxRegistry; @@ -37,10 +35,7 @@ public static void register(SyntaxRegistry registry) { @Override public @Nullable String convert(ItemType from) { - ItemStack itemStack = ItemUtils.asItemStack(from); - if (itemStack == null) return null; - - NamespacedKey key = itemStack.getItemMeta().getItemModel(); + NamespacedKey key = from.getItemMeta().getItemModel(); if (key == null) return null; return key.asString(); From ab9361efe0701caec07286fd1919994f544c1ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=9C=A9?= <150085350+novystar@users.noreply.github.com> Date: Thu, 16 Jul 2026 19:03:08 +0100 Subject: [PATCH 05/11] Apply suggestions from code review Co-authored-by: Patrick Miller --- .../skriptlang/skript/bukkit/item/elements/ExprItemModel.java | 1 + .../skript/bukkit/item/elements/ExprItemWithModel.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 80adc62bcf7..1cff3c36334 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -24,6 +24,7 @@ """) @Since("INSERT VERSION") public class ExprItemModel extends SimplePropertyExpression { + public static void register(SyntaxRegistry registry) { registry.register( SyntaxRegistry.EXPRESSION, diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index ef32ec51ad8..bf44cfd9c1d 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -13,7 +13,7 @@ import org.skriptlang.skript.registration.DefaultSyntaxInfos; import org.skriptlang.skript.registration.SyntaxRegistry; -@Name("Item with model") +@Name("Item With Model") @Keywords("item model") @Description("Returns a copy of an item with a custom item model. Accepts a Namespaced Key (e.g. 'minecraft:emerald').") @Example(""" @@ -68,4 +68,5 @@ public Class getReturnType() { public String toString(@Nullable Event event, boolean debug) { return getExpr().toString(event, debug) + " with item model " + keyExpr.toString(event, debug); } + } From 8f646c1a57e4daec9ffd7b3750cf3a9c0d76b2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=9C=A9?= <150085350+novystar@users.noreply.github.com> Date: Thu, 16 Jul 2026 19:04:21 +0100 Subject: [PATCH 06/11] Apply suggestion from @APickledWalrus Co-authored-by: Patrick Miller --- .../skriptlang/skript/bukkit/item/elements/ExprItemModel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 1cff3c36334..4a3e98c4048 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -71,4 +71,5 @@ public Class getReturnType() { protected String getPropertyName() { return "item model"; } + } From 5c16a52404ff926a0cc3fb66723abde547b39661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 19:08:51 +0100 Subject: [PATCH 07/11] clean up code --- .../skript/bukkit/item/ItemModule.java | 6 +++--- .../bukkit/item/elements/ExprItemModel.java | 19 ++++++++++--------- .../item/elements/ExprItemWithModel.java | 10 +++++----- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java b/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java index a55ec38bf9f..759f7a4b236 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/ItemModule.java @@ -24,10 +24,10 @@ public Iterable children() { @Override public void loadSelf(SkriptAddon addon) { register(addon, - ExprItemWithLore::register, - ExprLore::register, ExprItemModel::register, - ExprItemWithModel::register + ExprItemWithLore::register, + ExprItemWithModel::register, + ExprLore::register ); } diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 4a3e98c4048..3a5ab12f4d4 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -37,11 +37,20 @@ public static void register(SyntaxRegistry registry) { @Override public @Nullable String convert(ItemType from) { NamespacedKey key = from.getItemMeta().getItemModel(); - if (key == null) return null; + if (key == null) + return null; return key.asString(); } + @Override + public Class @Nullable [] acceptChange(ChangeMode mode) { + return switch (mode) { + case SET, DELETE, RESET -> CollectionUtils.array(String.class); + default -> null; + }; + } + @Override public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { //noinspection DataFlowIssue @@ -54,14 +63,6 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { } } - @Override - public Class @Nullable [] acceptChange(ChangeMode mode) { - return switch (mode) { - case SET, DELETE, RESET -> CollectionUtils.array(String.class); - default -> null; - }; - } - @Override public Class getReturnType() { return String.class; diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index bf44cfd9c1d..e66ab566d56 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -14,13 +14,13 @@ import org.skriptlang.skript.registration.SyntaxRegistry; @Name("Item With Model") -@Keywords("item model") @Description("Returns a copy of an item with a custom item model. Accepts a Namespaced Key (e.g. 'minecraft:emerald').") @Example(""" set {_item} to emerald with model "minecraft:diamond" named "fake diamond"' give {_item} to player """) @Since("INSERT VERSION") +@Keywords("item model") public class ExprItemWithModel extends PropertyExpression { public static void register(SyntaxRegistry registry) { @@ -33,19 +33,19 @@ public static void register(SyntaxRegistry registry) { ); } - private Expression keyExpr; + private Expression key; @Override @SuppressWarnings("unchecked") public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { setExpr((Expression) exprs[0]); - keyExpr = (Expression) exprs[1]; + key = (Expression) exprs[1]; return true; } @Override protected ItemType[] get(Event event, ItemType[] source) { - String keyString = keyExpr.getSingle(event); + String keyString = key.getSingle(event); if (keyString == null) return source; @@ -66,7 +66,7 @@ public Class getReturnType() { @Override public String toString(@Nullable Event event, boolean debug) { - return getExpr().toString(event, debug) + " with item model " + keyExpr.toString(event, debug); + return getExpr().toString(event, debug) + " with item model " + key.toString(event, debug); } } From 0f61c6808b5402b4428cebcdd02deeff5fd1c0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 19:31:03 +0100 Subject: [PATCH 08/11] use NamespacedUtils instead of fromString method, for runtime error handling --- .../skript/bukkit/item/elements/ExprItemModel.java | 8 ++++++-- .../bukkit/item/elements/ExprItemWithModel.java | 3 ++- src/test/skript/tests/bukkit/item/ExprItemModel.sk | 11 +++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 3a5ab12f4d4..72b4f7d7982 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -1,6 +1,7 @@ package org.skriptlang.skript.bukkit.item.elements; import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.bukkitutil.NamespacedUtils; import ch.njol.skript.classes.Changer.ChangeMode; import ch.njol.skript.doc.Description; import ch.njol.skript.doc.Example; @@ -53,8 +54,11 @@ public static void register(SyntaxRegistry registry) { @Override public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { - //noinspection DataFlowIssue - NamespacedKey key = (mode == SET) ? NamespacedKey.fromString((String) delta[0]) : null; + NamespacedKey key = null; + if (mode == SET) { + //noinspection DataFlowIssue + key = NamespacedUtils.checkValidationAndSend((String) delta[0], this); + } for (ItemType item : getExpr().getArray(event)) { ItemMeta meta = item.getItemMeta(); diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index e66ab566d56..88e99a730df 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -1,6 +1,7 @@ package org.skriptlang.skript.bukkit.item.elements; import ch.njol.skript.aliases.ItemType; +import ch.njol.skript.bukkitutil.NamespacedUtils; import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.PropertyExpression; import ch.njol.skript.lang.Expression; @@ -49,7 +50,7 @@ protected ItemType[] get(Event event, ItemType[] source) { if (keyString == null) return source; - NamespacedKey key = NamespacedKey.fromString(keyString); + NamespacedKey key = NamespacedUtils.checkValidationAndSend(keyString, this); return get(source, itemType -> { itemType = itemType.clone(); ItemMeta itemMeta = itemType.getItemMeta(); diff --git a/src/test/skript/tests/bukkit/item/ExprItemModel.sk b/src/test/skript/tests/bukkit/item/ExprItemModel.sk index e4148fb4595..5236e990e07 100644 --- a/src/test/skript/tests/bukkit/item/ExprItemModel.sk +++ b/src/test/skript/tests/bukkit/item/ExprItemModel.sk @@ -1,3 +1,5 @@ +using error catching + test "ExprItemModel": set {_item} to diamond @@ -35,5 +37,10 @@ test "ExprItemModel": assert item model of {_item} is "minecraft:test_string" with "Item with item model of variable string" set {_item} to diamond - set item model of {_item} to "with spaces" - assert item model of {_item} is not set with "Attempt to set invalid key for item model" + catch runtime errors: + set item model of {_item} to "with spaces" + assert last caught runtime errors are set with "Runtime errors produced for invalid key for item model" + + catch runtime errors: + set {_item} to diamond with model "with spaces" + assert last caught runtime errors are set with "Runtime errors produced for invalid key for item with model" From 067f15e92e8a251d7cb81f7fcd7180fe28c36f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Thu, 16 Jul 2026 21:15:34 +0100 Subject: [PATCH 09/11] check for null after validation --- .../skriptlang/skript/bukkit/item/elements/ExprItemModel.java | 3 +++ .../skript/bukkit/item/elements/ExprItemWithModel.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index 72b4f7d7982..d3310288cf5 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -58,6 +58,9 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) { if (mode == SET) { //noinspection DataFlowIssue key = NamespacedUtils.checkValidationAndSend((String) delta[0], this); + if (key == null) { + return; + } } for (ItemType item : getExpr().getArray(event)) { diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index 88e99a730df..1bab12960f6 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -51,6 +51,9 @@ protected ItemType[] get(Event event, ItemType[] source) { return source; NamespacedKey key = NamespacedUtils.checkValidationAndSend(keyString, this); + if (key == null) + return source; + return get(source, itemType -> { itemType = itemType.clone(); ItemMeta itemMeta = itemType.getItemMeta(); From aa7831f75c43da8982d5ab5a66f542412fe3176a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Fri, 17 Jul 2026 11:40:09 +0100 Subject: [PATCH 10/11] minor readability changes --- .../skript/bukkit/item/elements/ExprItemModel.java | 4 ++-- .../skript/bukkit/item/elements/ExprItemWithModel.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java index d3310288cf5..fd74de59272 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemModel.java @@ -26,8 +26,8 @@ @Since("INSERT VERSION") public class ExprItemModel extends SimplePropertyExpression { - public static void register(SyntaxRegistry registry) { - registry.register( + public static void register(SyntaxRegistry syntaxRegistry) { + syntaxRegistry.register( SyntaxRegistry.EXPRESSION, infoBuilder(ExprItemModel.class, String.class, "item model", "itemtypes", true) .supplier(ExprItemModel::new) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index 1bab12960f6..26f41042f5f 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -24,8 +24,8 @@ @Keywords("item model") public class ExprItemWithModel extends PropertyExpression { - public static void register(SyntaxRegistry registry) { - registry.register( + public static void register(SyntaxRegistry syntaxRegistry) { + syntaxRegistry.register( SyntaxRegistry.EXPRESSION, DefaultSyntaxInfos.Expression.builder(ExprItemWithModel.class, ItemType.class) .addPattern("%itemtype% with [the] [item] model %string%") @@ -46,7 +46,7 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override protected ItemType[] get(Event event, ItemType[] source) { - String keyString = key.getSingle(event); + String keyString = this.key.getSingle(event); if (keyString == null) return source; From 29cf6acdd91752e1760e1803a70a3345565c91cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nova=20=E2=AD=90?= Date: Fri, 17 Jul 2026 12:03:37 +0100 Subject: [PATCH 11/11] minor readability changes --- .../skript/bukkit/item/elements/ExprItemWithModel.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java index 26f41042f5f..6cca83cf10f 100644 --- a/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java +++ b/src/main/java/org/skriptlang/skript/bukkit/item/elements/ExprItemWithModel.java @@ -46,18 +46,18 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye @Override protected ItemType[] get(Event event, ItemType[] source) { - String keyString = this.key.getSingle(event); - if (keyString == null) + String key = this.key.getSingle(event); + if (key == null) return source; - NamespacedKey key = NamespacedUtils.checkValidationAndSend(keyString, this); - if (key == null) + NamespacedKey namespacedKey = NamespacedUtils.checkValidationAndSend(key, this); + if (namespacedKey == null) return source; return get(source, itemType -> { itemType = itemType.clone(); ItemMeta itemMeta = itemType.getItemMeta(); - itemMeta.setItemModel(key); + itemMeta.setItemModel(namespacedKey); itemType.setItemMeta(itemMeta); return itemType; });