package com.nisovin.magicspells.castmodifiers; import java.util.ArrayList; import java.util.List; import org.bukkit.entity.Player; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.Spell; import com.nisovin.magicspells.events.*; public class ModifierSet { public static void initializeModifierListeners() { boolean modifiers = false; boolean targetModifiers = false; for (Spell spell : MagicSpells.spells()) { if (spell.getModifiers() != null) { modifiers = true; } if (spell.getTargetModifiers() != null) { targetModifiers = true; } if (modifiers && targetModifiers) break; } if (modifiers) { MagicSpells.registerEvents(new CastListener()); } if (targetModifiers) { MagicSpells.registerEvents(new TargetListener()); } if (MagicSpells.getManaHandler() != null && MagicSpells.getManaHandler().getModifiers() != null) { MagicSpells.registerEvents(new ManaListener()); } } private List<Modifier> modifiers; public ModifierSet(List<String> data) { modifiers = new ArrayList<Modifier>(); for (String s : data) { Modifier m = Modifier.factory(s); if (m != null) { modifiers.add(m); MagicSpells.debug(3, " Modifier added: " + s); } else { MagicSpells.error("Problem with modifier: " + s); } } } public void apply(SpellCastEvent event) { for (Modifier modifier : modifiers) { boolean cont = modifier.apply(event); if (!cont) { String msg = modifier.strModifierFailed != null ? modifier.strModifierFailed : event.getSpell().getStrModifierFailed(); MagicSpells.sendMessage(event.getCaster(), msg); break; } } } public void apply(ManaChangeEvent event) { for (Modifier modifier : modifiers) { boolean cont = modifier.apply(event); if (!cont) { break; } } } public void apply(SpellTargetEvent event) { for (Modifier modifier : modifiers) { boolean cont = modifier.apply(event); if (!cont) { if (modifier.strModifierFailed != null) { MagicSpells.sendMessage(event.getCaster(), modifier.strModifierFailed); } break; } } } public void apply(MagicSpellsGenericPlayerEvent event) { for (Modifier modifier : modifiers) { boolean cont = modifier.apply(event); if (!cont) { break; } } } public void apply(SpellTargetLocationEvent event) { for (Modifier modifier : modifiers) { boolean cont = modifier.apply(event); if (!cont) { break; } } } public boolean check(Player player) { for (Modifier modifier : modifiers) { boolean pass = modifier.check(player); if (!pass) return false; } return true; } }