package net.glowstone.inventory.crafting;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.inventory.ItemMatcher;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.material.Dye;
import java.util.ArrayList;
import java.util.List;
public class GlowChargeFadeMatcher extends ItemMatcher {
@Override
public ItemStack getResult(ItemStack[] matrix) {
ItemStack charge = null;
List<Color> colors = new ArrayList<>();
for (ItemStack item : matrix) {
if (item == null) continue;
switch (item.getType()) {
case INK_SACK:
Dye dye = (Dye) item.getData();
colors.add(dye.getColor().getFireworkColor());
break;
case FIREWORK_CHARGE:
charge = item;
break;
default:
return null; // Wrong item on matrix
}
}
if (charge == null || colors.isEmpty()) return null; // No charge, or no colors
FireworkEffectMeta meta = (FireworkEffectMeta) charge.getItemMeta();
FireworkEffect old = meta.getEffect();
FireworkEffect newEffect = FireworkEffect.builder()
.with(old.getType())
.withColor(old.getColors())
.flicker(old.hasFlicker())
.trail(old.hasTrail())
.withFade(colors)
.build();
meta.setEffect(newEffect);
ItemStack ret = charge.clone();
ret.setItemMeta(meta);
return ret;
}
}