diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ComponentAdaptersRegistry.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ComponentAdaptersRegistry.java index ad691abf2b..2029b783e1 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ComponentAdaptersRegistry.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ComponentAdaptersRegistry.java @@ -5,5 +5,9 @@ public class ComponentAdaptersRegistry { public static void register() { DataComponentAdapter.register(new FoodAdapter()); DataComponentAdapter.register(new GliderAdapter()); + DataComponentAdapter.register(new ItemModelAdapter()); + DataComponentAdapter.register(new MaxDurabilityAdapter()); + DataComponentAdapter.register(new MaxStackSizeAdapter()); + DataComponentAdapter.register(new RarityAdapter()); } } diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemModelAdapter.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemModelAdapter.java new file mode 100644 index 0000000000..f9eb15acbd --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemModelAdapter.java @@ -0,0 +1,36 @@ +package com.denizenscript.denizen.paper.datacomponents; + +import com.denizenscript.denizen.utilities.Utilities; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import io.papermc.paper.datacomponent.DataComponentTypes; +import net.kyori.adventure.key.Key; + +public class ItemModelAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name item_model + // @input ElementTag + // @description + // Controls an item's model <@link language Item Components> in namespaced key format. + // The default namespace is "minecraft", so for example an input of "stone" becomes "minecraft:stone", and will set the item model to a stone block. + // This can also be used to display item models from your own custom resource packs. + // @mechanism + // Provide no input to reset the item to its default value. + // --> + + public ItemModelAdapter() { + super(ElementTag.class, DataComponentTypes.ITEM_MODEL, "item_model"); + } + + @Override + public ElementTag toDenizen(Key value) { + return new ElementTag(value.asMinimalString(), true); + } + + @Override + public Key fromDenizen(ElementTag value, Mechanism mechanism) { + return Utilities.parseNamespacedKey(value.asString()); + } +} diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxDurabilityAdapter.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxDurabilityAdapter.java new file mode 100644 index 0000000000..6a9967d95f --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxDurabilityAdapter.java @@ -0,0 +1,32 @@ +package com.denizenscript.denizen.paper.datacomponents; + +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import io.papermc.paper.datacomponent.DataComponentTypes; + +public class MaxDurabilityAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name max_durability + // @input ElementTag(Number) + // @description + // Controls an item's max durability <@link language Item Components>. + // @mechanism + // Provide no input to reset the item to its default value. + // --> + + public MaxDurabilityAdapter() { + super(ElementTag.class, DataComponentTypes.MAX_DAMAGE, "max_durability"); + } + + @Override + public ElementTag toDenizen(Integer value) { + return new ElementTag(value); + } + + @Override + public Integer fromDenizen(ElementTag value, Mechanism mechanism) { + return mechanism.requireInteger() ? value.asInt() : null; + } +} diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxStackSizeAdapter.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxStackSizeAdapter.java new file mode 100644 index 0000000000..c9365207dd --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/MaxStackSizeAdapter.java @@ -0,0 +1,32 @@ +package com.denizenscript.denizen.paper.datacomponents; + +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import io.papermc.paper.datacomponent.DataComponentTypes; + +public class MaxStackSizeAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name max_stack_size + // @input ElementTag(Number) + // @description + // Controls an item's max stack size <@link language Item Components>. + // @mechanism + // Provide no input to reset the item to its default value. + // --> + + public MaxStackSizeAdapter() { + super(ElementTag.class, DataComponentTypes.MAX_STACK_SIZE, "max_stack_size"); + } + + @Override + public ElementTag toDenizen(Integer value) { + return new ElementTag(value); + } + + @Override + public Integer fromDenizen(ElementTag value, Mechanism mechanism) { + return mechanism.requireInteger() ? value.asInt() : null; + } +} diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/RarityAdapter.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/RarityAdapter.java new file mode 100644 index 0000000000..9772fd51bf --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/RarityAdapter.java @@ -0,0 +1,34 @@ +package com.denizenscript.denizen.paper.datacomponents; + +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import io.papermc.paper.datacomponent.DataComponentTypes; +import org.bukkit.inventory.ItemRarity; + +public class RarityAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name rarity + // @input ElementTag + // @description + // Controls an item's rarity <@link language Item Components>. + // See <@link url https://jd.papermc.io/paper/org/bukkit/inventory/ItemRarity.html> for valid rarity values. + // @mechanism + // Provide no input to reset the item to its default value. + // --> + + public RarityAdapter() { + super(ElementTag.class, DataComponentTypes.RARITY, "rarity"); + } + + @Override + public ElementTag toDenizen(ItemRarity value) { + return new ElementTag(value); + } + + @Override + public ItemRarity fromDenizen(ElementTag value, Mechanism mechanism) { + return mechanism.requireEnum(ItemRarity.class) ? value.asEnum(ItemRarity.class) : null; + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemCustomModel.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemCustomModel.java index c47897271e..e97bea7df7 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemCustomModel.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemCustomModel.java @@ -15,6 +15,7 @@ public class ItemCustomModel extends ItemProperty { // @description // Controls the custom model data ID number of the item. // Use with no input to remove the custom model data. + // Prefer <@link property ItemTag.item_model> on MC 1.21+. // See also <@link tag ItemTag.has_custom_model_data> // --> public static boolean describes(ItemTag item) { @@ -56,6 +57,7 @@ public static void register() { // @group properties // @description // Returns whether the item has a custom model data ID number set on it. + // Prefer <@link property ItemTag.item_model> on MC 1.21+. // See also <@link tag ItemTag.custom_model_data>. // --> PropertyParser.registerTag(ItemCustomModel.class, ElementTag.class, "has_custom_model_data", (attribute, prop) -> {