package com.nisovin.magicspells.spells.instant; import java.util.ArrayList; import java.util.List; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.spelleffects.EffectPosition; import com.nisovin.magicspells.spells.InstantSpell; import com.nisovin.magicspells.util.MagicConfig; public class ConfusionSpell extends InstantSpell { private int range; public ConfusionSpell(MagicConfig config, String spellName) { super(config, spellName); range = getConfigInt("range", 10); } @Override public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) { if (state == SpellCastState.NORMAL) { int range = Math.round(this.range*power); List<Entity> entities = player.getNearbyEntities(range, range, range); List<LivingEntity> monsters = new ArrayList<LivingEntity>(); for (Entity e : entities) { if (e instanceof LivingEntity && validTargetList.canTarget(player, (LivingEntity)e)) { monsters.add((LivingEntity)e); } } for (int i = 0; i < monsters.size(); i++) { int next = i+1; if (next >= monsters.size()) { next = 0; } MagicSpells.getVolatileCodeHandler().setTarget(monsters.get(i), monsters.get(next)); playSpellEffects(EffectPosition.TARGET, monsters.get(i)); } playSpellEffects(EffectPosition.CASTER, player); } return PostCastAction.HANDLE_NORMALLY; } }