package net.glowstone.inventory.crafting; import net.glowstone.inventory.GlowItemFactory; import net.glowstone.inventory.MaterialMatcher; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.inventory.ItemMatcher; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.material.Dye; import java.util.ArrayList; import java.util.List; public class GlowArmorDyeMatcher extends ItemMatcher { public static final MaterialMatcher LEATHERS = new MaterialMatcher() { @Override public boolean matches(Material material) { return material.equals(Material.LEATHER_HELMET) || material.equals(Material.LEATHER_CHESTPLATE) || material.equals(Material.LEATHER_LEGGINGS) || material.equals(Material.LEATHER_BOOTS); } }; @Override public ItemStack getResult(ItemStack[] matrix) { ItemStack armor = null; List<Color> colors = new ArrayList<>(); for (ItemStack item : matrix) { if (item == null) continue; if (item.getType() == Material.INK_SACK) { Color color = ((Dye) item.getData()).getColor().getColor(); colors.add(color); continue; } if (LEATHERS.matches(item.getType())) { if (armor != null) return null; // Can't dye more than one item armor = item; continue; } return null; // Non-armor item } if (armor == null) return null; // No armor if (colors.isEmpty()) return null; // No colors LeatherArmorMeta meta = (LeatherArmorMeta) armor.getItemMeta(); Color base = meta.getColor(); if (meta.getColor() == GlowItemFactory.instance().getDefaultLeatherColor()) { base = colors.remove(0); } Color newColor = base.mixColors(colors.toArray(new Color[colors.size()])); ItemStack ret = armor.clone(); LeatherArmorMeta retMeta = ((LeatherArmorMeta) ret.getItemMeta()); retMeta.setColor(newColor); ret.setItemMeta(retMeta); return ret; } }