package com.nisovin.magicspells.spells.targeted; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; 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 SwitchHealthSpell extends TargetedSpell implements TargetedEntitySpell { boolean requireGreaterHealthPercent; boolean requireLesserHealthPercent; public SwitchHealthSpell(MagicConfig config, String spellName) { super(config, spellName); requireGreaterHealthPercent = getConfigBoolean("require-greater-health-percent", false); requireLesserHealthPercent = getConfigBoolean("require-lesser-health-percent", false); } @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); } boolean ok = switchHealth(player, target.getTarget()); if (!ok) { return noTarget(player); } sendMessages(player, target.getTarget()); return PostCastAction.NO_MESSAGES; } return PostCastAction.HANDLE_NORMALLY; } boolean switchHealth(Player caster, LivingEntity target) { if (caster.isDead() || target.isDead()) return false; double casterPct = caster.getHealth() / caster.getMaxHealth(); double targetPct = target.getHealth() / target.getMaxHealth(); if (requireGreaterHealthPercent && casterPct < targetPct) return false; if (requireLesserHealthPercent && casterPct > targetPct) return false; caster.setHealth(targetPct * caster.getMaxHealth()); target.setHealth(casterPct * target.getMaxHealth()); playSpellEffects(caster, target); return true; } @Override public boolean castAtEntity(Player caster, LivingEntity target, float power) { if (!validTargetList.canTarget(caster, target)) { return false; } return switchHealth(caster, target); } @Override public boolean castAtEntity(LivingEntity target, float power) { return false; } }