package net.glowstone.inventory.crafting; import org.bukkit.Material; import org.bukkit.inventory.ItemMatcher; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.FireworkEffectMeta; import org.bukkit.inventory.meta.FireworkMeta; import java.util.ArrayList; import java.util.List; public class GlowFireworkMatcher extends ItemMatcher { @Override public ItemStack getResult(ItemStack[] matrix) { int gunpowder = 0; boolean hasPaper = false; List<ItemStack> charges = new ArrayList<>(); for (ItemStack item : matrix) { if (item == null) continue; switch (item.getType()) { case SULPHUR: gunpowder++; break; case FIREWORK_CHARGE: charges.add(item); break; case PAPER: if (hasPaper) return null; // Only one paper allowed hasPaper = true; break; default: return null; // Wrong item on matrix } } if (gunpowder < 1 || gunpowder > 3) return null; // Must have 1-3 gunpowder if (!hasPaper) return null; // Paper needed ItemStack ret = new ItemStack(Material.FIREWORK, 1); if (charges.isEmpty()) { // This makes no sense Mojang, but whatever return ret; } FireworkMeta firework = (FireworkMeta) ret.getItemMeta(); firework.setPower(gunpowder); for (ItemStack item : charges) { FireworkEffectMeta charge = (FireworkEffectMeta) item.getItemMeta(); if (!charge.hasEffect()) continue; firework.addEffect(charge.getEffect()); } ret.setItemMeta(firework); return ret; } }