package com.nisovin.magicspells.spells.targeted;
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.DisguiseManager;
import com.nisovin.magicspells.util.MagicConfig;
import com.nisovin.magicspells.util.TargetInfo;
public class UndisguiseSpell extends TargetedSpell implements TargetedEntitySpell {
DisguiseManager manager;
public UndisguiseSpell(MagicConfig config, String spellName) {
super(config, spellName);
}
@Override
public void initialize() {
super.initialize();
manager = DisguiseSpell.getDisguiseManager();
}
@Override
public PostCastAction castSpell(Player player, SpellCastState state, float power, String[] args) {
if (manager == null) return PostCastAction.ALREADY_HANDLED;
if (state == SpellCastState.NORMAL) {
TargetInfo<Player> target = getTargetPlayer(player, power);
if (target != null) {
undisguise(player, target.getTarget());
sendMessages(player, target.getTarget());
return PostCastAction.NO_MESSAGES;
} else {
return noTarget(player);
}
}
return PostCastAction.HANDLE_NORMALLY;
}
private boolean undisguise(Player caster, Player player) {
if (manager != null) {
manager.removeDisguise(player);
if (caster != null) {
playSpellEffects(caster, player);
} else {
playSpellEffects(EffectPosition.TARGET, player);
}
return true;
}
return false;
}
@Override
public boolean castAtEntity(Player caster, LivingEntity target, float power) {
if (target instanceof Player) {
return undisguise(caster, (Player)target);
} else {
return false;
}
}
@Override
public boolean castAtEntity(LivingEntity target, float power) {
if (target instanceof Player) {
return undisguise(null, (Player)target);
} else {
return false;
}
}
}