package net.knarcraft.blacksmith.util; import org.bukkit.Material; import org.bukkit.enchantments.EnchantmentTarget; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import java.util.ArrayList; import java.util.List; public final class ItemHelper { private ItemHelper() { } /** * Gets the current durability of the given item * * @param itemStack

The item to get the durability of

* @return

The durability of the item

*/ public static short getDurability(ItemStack itemStack) { Damageable damageable = (Damageable) itemStack.getItemMeta(); int maxDurability = itemStack.getType().getMaxDurability(); if (damageable != null) { return (short) (maxDurability - damageable.getDamage()); } else { return (short) maxDurability; } } /** * Gets the damage done to the given item * * @param itemStack

The damage done to the item

* @return

The damage done to the item

*/ public static short getDamage(ItemStack itemStack) { Damageable damageable = (Damageable) itemStack.getItemMeta(); if (damageable != null) { return (short) damageable.getDamage(); } else { return 0; } } /** * Gets a complete list of all reforge-able materials * * @return

A complete list of reforge-able materials

*/ public static List getAllReforgeAbleMaterials() { List reforgeAbleMaterials = new ArrayList<>(); for (Material material : Material.values()) { ItemStack item = new ItemStack(material); if (item.getItemMeta() instanceof Damageable && EnchantmentTarget.BREAKABLE.includes(item)) { reforgeAbleMaterials.add(material); } } return reforgeAbleMaterials; } /** * Checks whether the given material is an anvil * * @param material

The material to check

* @param requireDamaged

Whether only a damaged anvil should count

* @return

True if the given material is an anvil

*/ public static boolean isAnvil(Material material, boolean requireDamaged) { boolean isDamagedAnvil = material == Material.CHIPPED_ANVIL || material == Material.DAMAGED_ANVIL; boolean isAnvil = isDamagedAnvil || material == Material.ANVIL; return (requireDamaged && isDamagedAnvil) || (!requireDamaged && isAnvil); } }