package com.nisovin.magicspells.spells.targeted; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import com.nisovin.magicspells.MagicSpells; import com.nisovin.magicspells.spells.TargetedEntitySpell; import com.nisovin.magicspells.spells.TargetedSpell; import com.nisovin.magicspells.util.MagicConfig; import com.nisovin.magicspells.util.TargetInfo; public class SwitchSpell extends TargetedSpell implements TargetedEntitySpell { private int switchBack; public SwitchSpell(MagicConfig config, String spellName) { super(config, spellName); switchBack = getConfigInt("switch-back", 0); } @Override public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) { if (state == SpellCastState.NORMAL) { // get target TargetInfo<LivingEntity> target = getTargetedEntity(player, power); if (target == null) { return noTarget(player); } // teleport playSpellEffects(player, target.getTarget()); switchPlaces(player, target.getTarget()); // send messages sendMessages(player, target.getTarget()); return PostCastAction.NO_MESSAGES; } return PostCastAction.HANDLE_NORMALLY; } private void switchPlaces(final Player player, final LivingEntity target) { Location targetLoc = target.getLocation(); Location casterLoc = player.getLocation(); player.teleport(targetLoc); target.teleport(casterLoc); if (switchBack > 0) { Bukkit.getScheduler().scheduleSyncDelayedTask(MagicSpells.plugin, new Runnable() { public void run() { if (!player.isDead() && !target.isDead()) { Location targetLoc = target.getLocation(); Location casterLoc = player.getLocation(); player.teleport(targetLoc); target.teleport(casterLoc); } } }, switchBack); } } @Override public boolean castAtEntity(Player caster, LivingEntity target, float power) { if (validTargetList.canTarget(caster, target)) { switchPlaces(caster, target); return true; } return false; } @Override public boolean castAtEntity(LivingEntity target, float power) { return false; } }