package com.nisovin.magicspells.spells.buff; import java.util.HashSet; import java.util.List; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import com.nisovin.magicspells.spells.BuffSpell; import com.nisovin.magicspells.util.MagicConfig; public class InvulnerabilitySpell extends BuffSpell { private HashSet<DamageCause> damageCauses; private HashSet<String> gods; public InvulnerabilitySpell(MagicConfig config, String spellName) { super(config, spellName); damageCauses = new HashSet<DamageCause>(); List<String> causes = getConfigStringList("damage-causes", null); if (causes != null) { for (String s : causes) { s = s.replace(" ","_").replace("-","_").toUpperCase(); DamageCause cause = DamageCause.valueOf(s); if (cause != null) { damageCauses.add(cause); } } } gods = new HashSet<String>(); } @Override public boolean castBuff(Player player, float power, String[] args) { gods.add(player.getName()); return true; } @EventHandler public void onEntityDamage(EntityDamageEvent event) { if (event.isCancelled()) return; if (event.getEntity() instanceof Player && (damageCauses.size() == 0 || damageCauses.contains(event.getCause()))) { Player player = (Player)event.getEntity(); if (gods.contains(player.getName())) { if (isExpired(player)) { turnOff(player); } else { event.setCancelled(true); if (player.getNoDamageTicks() < player.getMaximumNoDamageTicks() / 2.0F) { addUseAndChargeCost(player); } } } } } @Override public void turnOffBuff(Player player) { gods.remove(player.getName()); } @Override protected void turnOff() { gods.clear(); } @Override public boolean isActive(Player player) { return gods.contains(player.getName()); } }