package net.glowstone.inventory.crafting; import org.bukkit.Material; import org.bukkit.enchantments.EnchantmentTarget; import org.bukkit.inventory.ItemMatcher; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; public class GlowRepairMatcher extends ItemMatcher { @Override public ItemStack getResult(ItemStack[] matrix) { List<ItemStack> items = new ArrayList<>(); for (ItemStack item : matrix) { if (item == null) continue; if (!isRepairable(item)) return null; // Non-repairable item in matrix items.add(item); } if (items.size() != 2) return null; // Can only have 2 tools ItemStack itemA = items.get(0); ItemStack itemB = items.get(1); if (itemA.getType() != itemB.getType()) return null; // Not same item type Material type = itemA.getType(); int usesA = type.getMaxDurability() - itemA.getDurability(); int usesB = type.getMaxDurability() - itemB.getDurability(); int totalUses = (int) (usesA + usesB + (type.getMaxDurability() * 0.05)); int damage = type.getMaxDurability() - totalUses; return new ItemStack(type, 1, (short) Math.max(damage, 0)); } private static boolean isRepairable(ItemStack item) { return EnchantmentTarget.ARMOR.includes(item) || EnchantmentTarget.TOOL.includes(item) || EnchantmentTarget.WEAPON.includes(item) || EnchantmentTarget.BOW.includes(item) || EnchantmentTarget.FISHING_ROD.includes(item); } }