diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java index 477c8bb129..a524d6453b 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java @@ -233,6 +233,9 @@ public static void registerMainProperties() { PropertyParser.registerProperty(ItemComponentsPatch.class, ItemTag.class); registerItemProperty(ItemCustomData.class, "custom_data"); } + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) { + registerItemProperty(ItemItemModel.class, "item_model"); + } registerItemProperty(ItemCustomModel.class, "custom_model_data"); registerItemProperty(ItemChargedProjectile.class, "charged_projectiles"); registerItemProperty(ItemEnchantments.class, "enchantments", "stored_enchantments"); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemItemModel.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemItemModel.java new file mode 100644 index 0000000000..e14e1ef33f --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemItemModel.java @@ -0,0 +1,63 @@ +package com.denizenscript.denizen.objects.properties.item; + +import com.denizenscript.denizen.objects.ItemTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class ItemItemModel extends ItemProperty { + + // <--[property] + // @object ItemTag + // @name item_model + // @input ElementTag + // @description + // Controls the Item Model of the item. + // Use with no input to remove the Item Model. + // See also <@link tag ItemTag.has_item_model> + // --> + public static boolean describes(ItemTag item) { + return !item.getBukkitMaterial().isAir(); + } + + @Override + public ElementTag getPropertyValue() { + if (getItemMeta().hasItemModel()) { + return new ElementTag(getItemMeta().getItemModel().toString()); + } + return null; + } + + @Override + public void setPropertyValue(ElementTag value, Mechanism mechanism) { + ItemMeta meta = getItemMeta(); + meta.setItemModel(mechanism.hasValue() ? NamespacedKey.fromString(value.asString()) : null); + setItemMeta(meta); + } + + @Override + public String getPropertyId() { + return "item_model"; + } + + public static void register() { + autoRegisterNullable("item_model", ItemItemModel.class, ElementTag.class, false); + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @mechanism ItemTag.item_model + // @group properties + // @description + // Returns whether the item has an Item Model set on it. + // See also <@link tag ItemTag.item_model>. + // --> + PropertyParser.registerTag(ItemItemModel.class, ElementTag.class, "has_item_model", (attribute, prop) -> { + return new ElementTag(prop.getItemMeta().hasItemModel()); + }); + } +}