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..724ddb4281 --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -0,0 +1,38 @@ +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 item_name component. In effect, this changes its display name. + // Unlike <@link mechanism ItemTag.display>, this name cannot be changed by an anvil, but will be hidden when the display is set, such as with an anvil. + // That is, it will remain under the display name and be shown again if the display is removed. + // See also <@link language Item Components>. + // @mechanism + // Provide no input to reset the item to its default value. + // --> + + public ItemNameAdapter() { + super(ElementTag.class, DataComponentTypes.ITEM_NAME, "item_name"); + } + + @Override + public ElementTag toDenizen(Component value) { + return new ElementTag(PaperModule.stringifyComponent(value)); + } + + @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..f59a323cfd 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. + // Use <@link property ItemTag.item_name> to get the item's item name component, which cannot be changed by an anvil. // --> 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. + // Use <@link property ItemTag.item_name> for the item's item_display component, which also controls its 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. + // Use <@link property ItemTag.item_name> to set the item's item name component, which persists through changes to its display, and shows when no display is set. // @tags // // -->