package com.nisovin.magicspells.spells.targeted;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import com.nisovin.magicspells.spelleffects.EffectPosition;
import com.nisovin.magicspells.spells.TargetedEntitySpell;
import com.nisovin.magicspells.spells.TargetedSpell;
import com.nisovin.magicspells.util.MagicConfig;
import com.nisovin.magicspells.util.TargetInfo;
import com.nisovin.magicspells.util.Util;
public class RotateSpell extends TargetedSpell implements TargetedEntitySpell {
boolean random;
int rotation;
public RotateSpell(MagicConfig config, String spellName) {
super(config, spellName);
random = getConfigBoolean("random", false);
rotation = getConfigInt("rotation", 10);
}
@Override
public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) {
if (state == SpellCastState.NORMAL) {
TargetInfo<LivingEntity> target = getTargetedEntity(player, power);
if (target == null) {
return noTarget(player);
}
spin(target.getTarget());
playSpellEffects(player, target.getTarget());
}
return PostCastAction.HANDLE_NORMALLY;
}
void spin(LivingEntity target) {
if (random) {
Location loc = target.getLocation();
loc.setYaw(Util.getRandomInt(360));
target.teleport(loc);
} else {
Location loc = target.getLocation();
loc.setYaw(loc.getYaw() + rotation);
target.teleport(loc);
}
}
@Override
public boolean castAtEntity(Player caster, LivingEntity target, float power) {
spin(target);
playSpellEffects(caster, target);
return true;
}
@Override
public boolean castAtEntity(LivingEntity target, float power) {
spin(target);
playSpellEffects(EffectPosition.TARGET, target);
return true;
}
}