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 2029b783e1..70b69a14d3 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 @@ -6,6 +6,7 @@ public static void register() { DataComponentAdapter.register(new FoodAdapter()); DataComponentAdapter.register(new GliderAdapter()); DataComponentAdapter.register(new ItemModelAdapter()); + DataComponentAdapter.register(new ItemNameAdapter()); DataComponentAdapter.register(new MaxDurabilityAdapter()); DataComponentAdapter.register(new MaxStackSizeAdapter()); DataComponentAdapter.register(new RarityAdapter()); diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java new file mode 100644 index 0000000000..18abd1c5c9 --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -0,0 +1,40 @@ +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 net.kyori.adventure.text.Component; +import com.denizenscript.denizen.paper.PaperModule; +import net.md_5.bungee.api.ChatColor; + +public class ItemNameAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name item_name + // @input ElementTag + // @description + // Controls the item's default name. + // The item's default name cannot be modified by a player and is displayed when <@link mechanism ItemTag.display> is not set. + // If a display name is set, item_name will still retain its original value but will be hidden. + // See also <@link language Item Components>. + // @mechanism + // Provide no input to reset the item to its default value. + // @tag + // By default, this will return the item's vanilla display name. + // --> + + public ItemNameAdapter() { + super(ElementTag.class, DataComponentTypes.ITEM_NAME, "item_name"); + } + + @Override + public ElementTag toDenizen(Component value) { + return new ElementTag(PaperModule.stringifyComponent(value), true); + } + + @Override + public Component fromDenizen(ElementTag value, Mechanism mechanism) { + return PaperModule.parseFormattedText(value.toString(), ChatColor.WHITE); + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemDisplayname.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemDisplayname.java index 8a7ca5a299..344533332a 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemDisplayname.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemDisplayname.java @@ -62,6 +62,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) { // @group properties // @description // Returns the display name of the item, as set by plugin or an anvil. + // See also <@link property ItemTag.item_name>. // --> if (attribute.startsWith("display")) { if (hasDisplayName()) { @@ -77,6 +78,7 @@ public ObjectTag getObjectAttribute(Attribute attribute) { // @group properties // @description // Returns whether the item has a custom set display name. + // See also <@link property ItemTag.item_name>. // --> if (attribute.startsWith("has_display")) { return new ElementTag(hasDisplayName()) @@ -116,6 +118,7 @@ public void adjust(Mechanism mechanism) { // @description // Changes the item's display name. // Give no input to remove the item's display name. + // See also <@link property ItemTag.item_name> to set the item's default name, which cannot be changed by players. // @tags // // -->