9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-27 10:59:07 +00:00

feat(item): 添加物品名称属性- 在 Item 接口中新增 itemName 方法用于获取和设置物品名称- 在 ItemFactory 接口中添加对应的抽象方法

- 实现 UniversalItemFactory 和 ComponentItemFactory 中的物品名称相关方法
- 在 AbstractItem 中实现新的物品名称相关方法
- 更新 AbstractItemManager 以支持物品名称属性
This commit is contained in:
jhqwqmc
2025-02-12 00:49:19 +08:00
parent 05b392795d
commit 7df4321fd7
8 changed files with 87 additions and 0 deletions

View File

@@ -84,6 +84,11 @@ public class AbstractItem<W extends ItemWrapper<I>, I> implements Item<I> {
return this.factory.displayName(this.item);
}
@Override
public Optional<String> itemName() {
return this.factory.itemName(this.item);
}
@Override
public Item<I> lore(List<String> lore) {
this.factory.lore(this.item, lore);
@@ -111,6 +116,11 @@ public class AbstractItem<W extends ItemWrapper<I>, I> implements Item<I> {
this.factory.displayName(this.item, displayName);
return this;
}
@Override
public Item<I> itemName(String itemName) {
this.factory.itemName(this.item, itemName);
return this;
}
@Override
public Item<I> skull(String data) {

View File

@@ -49,6 +49,14 @@ public abstract class AbstractItemManager<I> 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<String> name = (List<String>) TypeUtils.checkType(obj, List.class);

View File

@@ -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();

View File

@@ -42,6 +42,10 @@ public interface Item<I> {
Optional<String> displayName();
Item<I> itemName(String itemName);
Optional<String> itemName();
Item<I> lore(List<String> lore);
Optional<List<String>> lore();

View File

@@ -53,6 +53,10 @@ public abstract class ItemFactory<P extends Plugin, W extends ItemWrapper<I>, I>
protected abstract Optional<String> displayName(ItemWrapper<I> item);
protected abstract void itemName(ItemWrapper<I> item, String json);
protected abstract Optional<String> itemName(ItemWrapper<I> item);
protected abstract void skull(ItemWrapper<I> item, String skullData);
protected abstract Optional<List<String>> lore(ItemWrapper<I> item);

View File

@@ -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<I> implements ItemModifier<I> {
private final String parameter;
public ItemNameModifier(String parameter) {
this.parameter = parameter;
}
@Override
public String name() {
return "item-name";
}
@Override
public void apply(Item<I> item, Player player) {
item.itemName(AdventureHelper.componentToJson(AdventureHelper.miniMessage().deserialize(
parameter, ImageTag.instance(), new PlaceholderTag(player))));
}
}