From 7d65f5ad931a49f8d1179d18c86ae1134b85d96b Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Fri, 24 Jul 2026 03:01:23 -0700 Subject: [PATCH 1/5] add item_name property --- .../ComponentAdaptersRegistry.java | 1 + .../paper/datacomponents/ItemNameAdapter.java | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java 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..5a8de07d7d 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 @@ -9,5 +9,6 @@ public static void register() { DataComponentAdapter.register(new MaxDurabilityAdapter()); DataComponentAdapter.register(new MaxStackSizeAdapter()); DataComponentAdapter.register(new RarityAdapter()); + DataComponentAdapter.register(new ItemNameAdapter()); } } 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..70a060e5b5 --- /dev/null +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -0,0 +1,35 @@ +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 net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; + +public class ItemNameAdapter extends DataComponentAdapter.Valued { + + // <--[property] + // @object ItemTag + // @name item_name + // @input ElementTag + // @description + // Controls the item's item name component. This exists under the item's <@link mechanism ItemTag.display> and persists if it is renamed in an anvil. + // 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(LegacyComponentSerializer.legacyAmpersand().serialize(value)); + } + + @Override + public Component fromDenizen(ElementTag value, Mechanism mechanism) { + return Component.text(value.toString()); + } +} From 958a5b929028e39d232ad2144681af715405db35 Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:35:57 -0700 Subject: [PATCH 2/5] Use papermodule methods --- .../denizen/paper/datacomponents/ItemNameAdapter.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 index 70a060e5b5..c27f3d0c6b 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -4,7 +4,8 @@ import com.denizenscript.denizencore.objects.core.ElementTag; import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import com.denizenscript.denizen.paper.PaperModule; +import net.md_5.bungee.api.ChatColor; public class ItemNameAdapter extends DataComponentAdapter.Valued { @@ -25,11 +26,11 @@ public ItemNameAdapter() { @Override public ElementTag toDenizen(Component value) { - return new ElementTag(LegacyComponentSerializer.legacyAmpersand().serialize(value)); + return new ElementTag(PaperModule.stringifyComponent(value)); } @Override public Component fromDenizen(ElementTag value, Mechanism mechanism) { - return Component.text(value.toString()); + return PaperModule.parseFormattedText(value.toString(), ChatColor.WHITE); } } From 893f96cec1038cb68a54315765c99353cfd88a64 Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:52:48 -0700 Subject: [PATCH 3/5] item_name meta pending change to itemtag.display meta --- .../denizen/paper/datacomponents/ItemNameAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index c27f3d0c6b..93bea3b67a 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -14,7 +14,7 @@ public class ItemNameAdapter extends DataComponentAdapter.Valued and persists if it is renamed in an anvil. + // 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. From 13a1015b6f302143cca9455ee2e1a19824170653 Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:05:48 -0700 Subject: [PATCH 4/5] add to itemtag.display's docs --- .../denizen/objects/properties/item/ItemDisplayname.java | 3 +++ 1 file changed, 3 insertions(+) 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 // // --> From 2976b7ccaa372902ef67def54ef1da1961c7066b Mon Sep 17 00:00:00 2001 From: Inquisitor <62276696+creaturesofhabit@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:07:43 -0700 Subject: [PATCH 5/5] fixes --- .../paper/datacomponents/ComponentAdaptersRegistry.java | 2 +- .../denizen/paper/datacomponents/ItemNameAdapter.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) 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 5a8de07d7d..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,9 +6,9 @@ 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()); - DataComponentAdapter.register(new ItemNameAdapter()); } } 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 index 93bea3b67a..724ddb4281 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/datacomponents/ItemNameAdapter.java @@ -14,7 +14,9 @@ public class ItemNameAdapter extends DataComponentAdapter.Valued, 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. + // 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.