package com.github.jamesnorris.ablockalypse.event.bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import com.github.jamesnorris.ablockalypse.Ablockalypse;
import com.github.jamesnorris.ablockalypse.DataContainer;
import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer;
import com.github.jamesnorris.ablockalypse.aspect.Zombie;
public class EntityDamage implements Listener {
private DataContainer data = Ablockalypse.getData();
protected DamageCause[] cancelCauses = new DamageCause[] {DamageCause.SUFFOCATION, DamageCause.LIGHTNING};
/* Called when an entity is damaged.
* Used mostly for cancelling fire damage to ZA mobs. */
@EventHandler(priority = EventPriority.HIGHEST) public void EDE(EntityDamageEvent event) {
Entity entity = event.getEntity();
if (!(entity instanceof LivingEntity)) {
return;
}
LivingEntity e = (LivingEntity) entity;
if (e != null && data.isZAMob(e)) {
if ((event.getCause() == DamageCause.FIRE || event.getCause() == DamageCause.FIRE_TICK) && e instanceof org.bukkit.entity.Zombie) {
Zombie gu = data.getZombie(e);
if (gu.isFireproof()) {
e.setFireTicks(0);
event.setCancelled(true);
}
} else if (event.getCause() == DamageCause.FALL && event.getDamage() <= 2) {
event.setCancelled(true);
} else if (shouldBeCancelled(event.getCause())) {
event.setCancelled(true);
}
} else if (e != null && e instanceof Player) {
Player player = (Player) e;
if (data.isZAPlayer(player)) {
ZAPlayer zap = data.getZAPlayer(player);
if (zap.isInLastStand()) {
event.setCancelled(true);
}
}
}
}
protected boolean shouldBeCancelled(DamageCause cause) {
for (DamageCause dmg : cancelCauses) {
if (dmg == cause) {
return true;
}
}
return false;
}
}