From 7df4321fd720a6d3cf4d395caa8e48da24f5bbeb Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 00:49:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(item):=20=E6=B7=BB=E5=8A=A0=E7=89=A9?= =?UTF-8?q?=E5=93=81=E5=90=8D=E7=A7=B0=E5=B1=9E=E6=80=A7-=20=E5=9C=A8=20It?= =?UTF-8?q?em=20=E6=8E=A5=E5=8F=A3=E4=B8=AD=E6=96=B0=E5=A2=9E=20itemName?= =?UTF-8?q?=20=E6=96=B9=E6=B3=95=E7=94=A8=E4=BA=8E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=92=8C=E8=AE=BE=E7=BD=AE=E7=89=A9=E5=93=81=E5=90=8D=E7=A7=B0?= =?UTF-8?q?-=20=E5=9C=A8=20ItemFactory=20=E6=8E=A5=E5=8F=A3=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=E5=BA=94=E7=9A=84=E6=8A=BD=E8=B1=A1?= =?UTF-8?q?=E6=96=B9=E6=B3=95=20-=20=E5=AE=9E=E7=8E=B0=20UniversalItemFact?= =?UTF-8?q?ory=20=E5=92=8C=20ComponentItemFactory=20=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=89=A9=E5=93=81=E5=90=8D=E7=A7=B0=E7=9B=B8=E5=85=B3=E6=96=B9?= =?UTF-8?q?=E6=B3=95=20-=20=E5=9C=A8=20AbstractItem=20=E4=B8=AD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=96=B0=E7=9A=84=E7=89=A9=E5=93=81=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95=20-=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=20AbstractItemManager=20=E4=BB=A5=E6=94=AF=E6=8C=81=E7=89=A9?= =?UTF-8?q?=E5=93=81=E5=90=8D=E7=A7=B0=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/factory/ComponentItemFactory.java | 20 +++++++++++++++ .../item/factory/UniversalItemFactory.java | 15 +++++++++++ .../craftengine/core/item/AbstractItem.java | 10 ++++++++ .../core/item/AbstractItemManager.java | 8 ++++++ .../craftengine/core/item/ComponentKeys.java | 1 + .../craftengine/core/item/Item.java | 4 +++ .../craftengine/core/item/ItemFactory.java | 4 +++ .../core/item/modifier/ItemNameModifier.java | 25 +++++++++++++++++++ 8 files changed, 87 insertions(+) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/item/modifier/ItemNameModifier.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java index 408028da7..1e15c76dd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java @@ -81,6 +81,26 @@ public class ComponentItemFactory extends BukkitItemFactory { ); } + @Override + protected void itemName(ItemWrapper item, String json) { + if (json == null) { + item.removeComponent(ComponentKeys.ITEM_NAME); + } else { + item.setComponent(ComponentKeys.ITEM_NAME, json); + } + } + + @Override + protected Optional itemName(ItemWrapper item) { + if (!item.hasComponent(ComponentKeys.ITEM_NAME)) return Optional.empty(); + return Optional.ofNullable( + (String) ComponentType.encodeJava( + ComponentKeys.ITEM_NAME, + item.getComponent(ComponentKeys.ITEM_NAME) + ).orElse(null) + ); + } + @Override protected void skull(ItemWrapper item, String skullData) { final Map profile = Map.of( diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java index de10e57d6..ac62f0f81 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/UniversalItemFactory.java @@ -35,6 +35,21 @@ public class UniversalItemFactory extends BukkitItemFactory { return Optional.of(item.get("display", "Name")); } + @Override + protected void itemName(ItemWrapper item, String json) { + if (json != null) { + item.set(json, "item", "Name"); + } else { + item.remove("item", "Name"); + } + } + + @Override + protected Optional itemName(ItemWrapper item) { + if (!item.hasTag("item", "Name")) return Optional.empty(); + return Optional.of(item.get("item", "Name")); + } + @Override protected void customModelData(ItemWrapper item, Integer data) { if (data == null) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java index 7828c3f72..4945216ba 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java @@ -84,6 +84,11 @@ public class AbstractItem, I> implements Item { return this.factory.displayName(this.item); } + @Override + public Optional itemName() { + return this.factory.itemName(this.item); + } + @Override public Item lore(List lore) { this.factory.lore(this.item, lore); @@ -111,6 +116,11 @@ public class AbstractItem, I> implements Item { this.factory.displayName(this.item, displayName); return this; } + @Override + public Item itemName(String itemName) { + this.factory.itemName(this.item, itemName); + return this; + } @Override public Item skull(String data) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 591e5faae..6c406726c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -49,6 +49,14 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl String name = TypeUtils.checkType(obj, String.class); return new DisplayNameModifier<>(name); }, "name", "display-name", "custom-name"); + registerDataFunction((obj) -> { + String name = TypeUtils.checkType(obj, String.class); + return new ItemNameModifier<>(name); + }, "item-name"); + registerDataFunction((obj) -> { + String name = TypeUtils.checkType(obj, String.class); + return new ItemNameModifier<>(name); + }, "item-name"); registerDataFunction((obj) -> { @SuppressWarnings("unchecked") List name = (List) TypeUtils.checkType(obj, List.class); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ComponentKeys.java b/core/src/main/java/net/momirealms/craftengine/core/item/ComponentKeys.java index 0651ad559..44bd5fa74 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ComponentKeys.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ComponentKeys.java @@ -5,6 +5,7 @@ import net.kyori.adventure.key.Key; public class ComponentKeys { public static final String CUSTOM_MODEL_DATA = Key.key("minecraft", "custom_model_data").asString(); public static final String CUSTOM_NAME = Key.key("minecraft", "custom_name").asString(); + public static final String ITEM_NAME = Key.key("minecraft", "item_name").asString(); public static final String LORE = Key.key("minecraft", "lore").asString(); public static final String DAMAGE = Key.key("minecraft", "damage").asString(); public static final String MAX_DAMAGE = Key.key("minecraft", "max_damage").asString(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/Item.java b/core/src/main/java/net/momirealms/craftengine/core/item/Item.java index 5ea7e299a..61564aa14 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/Item.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/Item.java @@ -42,6 +42,10 @@ public interface Item { Optional displayName(); + Item itemName(String itemName); + + Optional itemName(); + Item lore(List lore); Optional> lore(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java index 345257250..98d7396b1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java @@ -53,6 +53,10 @@ public abstract class ItemFactory

, I> protected abstract Optional displayName(ItemWrapper item); + protected abstract void itemName(ItemWrapper item, String json); + + protected abstract Optional itemName(ItemWrapper item); + protected abstract void skull(ItemWrapper item, String skullData); protected abstract Optional> lore(ItemWrapper item); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ItemNameModifier.java b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ItemNameModifier.java new file mode 100644 index 000000000..b6007279d --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/item/modifier/ItemNameModifier.java @@ -0,0 +1,25 @@ +package net.momirealms.craftengine.core.item.modifier; + +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.item.Item; +import net.momirealms.craftengine.core.plugin.minimessage.ImageTag; +import net.momirealms.craftengine.core.plugin.minimessage.PlaceholderTag; +import net.momirealms.craftengine.core.util.AdventureHelper; + +public class ItemNameModifier implements ItemModifier { + private final String parameter; + + public ItemNameModifier(String parameter) { + this.parameter = parameter; + } + @Override + public String name() { + return "item-name"; + } + + @Override + public void apply(Item item, Player player) { + item.itemName(AdventureHelper.componentToJson(AdventureHelper.miniMessage().deserialize( + parameter, ImageTag.instance(), new PlaceholderTag(player)))); + } +}