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() {
}
}