| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package me.lethunderhawk.minion.enchantedVariant.item.abstraction;
- import me.lethunderhawk.main.Main;
- import me.lethunderhawk.main.util.UnItalic;
- import net.kyori.adventure.text.Component;
- import org.bukkit.Material;
- import org.bukkit.NamespacedKey;
- import org.bukkit.inventory.ItemFlag;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.persistence.PersistentDataType;
- import java.util.List;
- /**
- * Abstract base class for all enchanted items
- */
- public abstract class EnchantedItem {
- protected final Component displayName;
- protected final List<Component> lore;
- protected final Material baseMaterial;
- // Persistent Data Container key for storing item ID
- protected final NamespacedKey itemIdKey;
- private final String itemId;
- private final ItemStack itemStack;
- public EnchantedItem(String itemId, Component displayName, List<Component> lore, Material baseMaterial) {
- this.displayName = displayName;
- this.lore = lore;
- this.baseMaterial = baseMaterial;
- this.itemId = itemId;
- this.itemIdKey = new NamespacedKey(Main.getInstance(), itemId);
- this.itemStack = createItem();
- }
- public ItemStack getItemStack() {
- return itemStack;
- }
- /**
- * Create the ItemStack with embedded metadata
- */
- private ItemStack createItem() {
- ItemStack item = new ItemStack(baseMaterial);
- ItemMeta meta = item.getItemMeta();
- // Set visible properties
- meta.displayName(displayName);
- if (lore != null && !lore.isEmpty()) {
- meta.lore(lore);
- }
- // Embed the unique identifier in Persistent Data Container
- meta.getPersistentDataContainer().set(
- itemIdKey,
- PersistentDataType.STRING,
- itemId
- );
- //meta.setHideTooltip(true);
- meta.addItemFlags(ItemFlag.HIDE_PLACED_ON);
- item.setItemMeta(UnItalic.removeItalicFromMeta(meta));
- // Apply any additional customizations
- applyCustomizations(item);
- return item;
- }
- /**
- * Check if an ItemStack is an instance of this custom item
- */
- public boolean isEnchantedItem(ItemStack item) {
- if (item == null || !item.hasItemMeta()) return false;
- ItemMeta meta = item.getItemMeta();
- String storedId = meta.getPersistentDataContainer().get(itemIdKey, PersistentDataType.STRING);
- return itemId.equals(storedId);
- }
- /**
- * Get the custom item ID from an ItemStack
- */
- public static String getEnchantedItemId(ItemStack item, NamespacedKey key) {
- if (item == null || !item.hasItemMeta()) return null;
- ItemMeta meta = item.getItemMeta();
- return meta.getPersistentDataContainer().get(key, PersistentDataType.STRING);
- }
- /**
- * Template method for subclasses to add additional customizations
- */
- protected void applyCustomizations(ItemStack item) {
- }
- // Getters
- public String getItemId() { return itemId; }
- public Component getDisplayName() { return displayName; }
- public Material getBaseMaterial() { return baseMaterial; }
- public NamespacedKey getItemIdKey() { return itemIdKey; }
- public String getName() {
- return displayName.toString();
- }
- }
|