package com.nisovin.magicspells.spells.instant; 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 RoarSpell extends InstantSpell { private int radius; private boolean cancelIfNoTargets; private String strNoTarget; public RoarSpell(MagicConfig config, String spellName) { super(config, spellName); radius = getConfigInt("range", 8); cancelIfNoTargets = getConfigBoolean("cancel-if-no-targets", true); strNoTarget = getConfigString("str-no-target", "No targets found."); } @Override public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) { if (state == SpellCastState.NORMAL) { int count = 0; List<Entity> entities = player.getNearbyEntities(radius, radius, radius); for (Entity entity : entities) { if (entity instanceof LivingEntity && !(entity instanceof Player) && validTargetList.canTarget(player, (LivingEntity)entity)) { MagicSpells.getVolatileCodeHandler().setTarget((LivingEntity)entity, player); count++; playSpellEffects(EffectPosition.TARGET, entity); } } if (cancelIfNoTargets && count == 0) { // nothing affected sendMessage(player, strNoTarget); return PostCastAction.ALREADY_HANDLED; } else { playSpellEffects(EffectPosition.CASTER, player); } } return PostCastAction.HANDLE_NORMALLY; } }