package com.alttd.easter.util; import com.alttd.easter.egg.EggType; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import java.util.ArrayList; import java.util.List; public final class ItemUtils { private static String colorName(EggType type) { return switch (type) { case BROWN_HUSK -> "Brown"; case RED_SPIDER -> "Red"; case ORANGE_BLAZE -> "Orange"; case YELLOW_PIGLIN -> "Yellow"; case LIME_CREEPER -> "Lime"; case GREEN_ZOMBIE -> "Green"; case LIGHT_BLUE_STRAY -> "Light Blue"; case CYAN_GUARDIAN -> "Cyan"; case BLUE_WARDEN -> "Blue"; case PURPLE_ENDER_DRAGON -> "Purple"; case MAGENTA_ENDERMAN -> "Magenta"; case PINK_HOGLIN -> "Pink"; case WHITE_SKELETON -> "White"; case LIGHT_GRAY_SILVERFISH -> "Light Gray"; case GRAY_WITHER -> "Gray"; case BLACK_WITHER_SKELETON -> "Black"; }; } public static Component colorNameComponent(EggType type) { return Component.text(colorName(type), type.getColor()); } public static Component typeNameComponent(EggType type) { return Component.text(prettify(type.name()), type.getColor()); } public static ItemStack createEggItem(EggType type) { ItemStack item = new ItemStack(type.getMaterial()); ItemMeta meta = item.getItemMeta(); meta.addEnchant(type.getEnchantment(), type.getEnchantLevel(), true); meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); Component name = MiniMessage.miniMessage().deserialize("Easter Egg - ", Placeholder.component("type", typeNameComponent(type)) ); meta.displayName(name); meta.getPersistentDataContainer().set(Keys.EGG_ITEM, PersistentDataType.STRING, type.name()); item.setItemMeta(meta); return item; } public static boolean isEggItem(ItemStack item) { if (item == null) { return false; } ItemMeta meta = item.getItemMeta(); if (meta == null) { return false; } return meta.getPersistentDataContainer().has(Keys.EGG_ITEM, PersistentDataType.STRING); } public static EggType getEggType(ItemStack item) { if (!isEggItem(item)) { return null; } String name = item.getItemMeta().getPersistentDataContainer().get(Keys.EGG_ITEM, PersistentDataType.STRING); try { return name == null ? null : EggType.valueOf(name); } catch (IllegalArgumentException ex) { return null; } } public static String prettify(String name) { String[] parts = name.toLowerCase().split("_"); List out = new ArrayList<>(); for (String p : parts) { if (p.isEmpty()) { continue; } out.add(Character.toUpperCase(p.charAt(0)) + p.substring(1)); } return String.join(" ", out); } private ItemUtils() { } }