package com.github.jamesnorris.ablockalypse.event.bukkit;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.Location;
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 org.bukkit.event.entity.EntityExplodeEvent;
import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer;
import com.github.jamesnorris.ablockalypse.utility.BukkitUtility;
public class EntityExplode implements Listener {
private static HashMap<UUID, Boolean> uuids = new HashMap<UUID, Boolean>();// UUID, whether or not to cancel the event entirely
public static void createNonBlockDesructionExplosion(Location loc, float yield) {
loc.getWorld().createExplosion(loc.getX(), loc.getY(), loc.getZ(), yield, false, false);
}
public static void createNonBlockDestructionExplosionWithPoints(ZAPlayer zap, Location loc, float yield) {
createNonBlockDesructionExplosion(loc, yield);
for (Entity ent : BukkitUtility.getNearbyEntities(loc, yield, yield, yield)) {
EntityDamageEvent lastDamage = ent.getLastDamageCause();
if (ent instanceof LivingEntity && !(ent instanceof Player) && lastDamage != null && lastDamage.getCause() == DamageCause.ENTITY_EXPLOSION) {
EntityDeath.behaveLikeKill(zap.getPlayer(), ent);
}
}
}
/**
* Prevents an explosion from happening or from damaging blocks.
*
* @param uuid The UUID of the entity exploding
* @param complete True if the event should be completely cancelled, otherwise the blocklist is cleared
*/
public static void preventExplosion(UUID uuid, boolean complete) {
uuids.put(uuid, complete);
}
/* Called when an entity explodes.
* Used mainly to prevent grenades from doing damage to land. */
@EventHandler(priority = EventPriority.HIGHEST) public void EEE(EntityExplodeEvent event) {
Entity e = event.getEntity();
if (uuids.containsKey(e.getUniqueId()) && uuids.get(e.getUniqueId())) {
event.setCancelled(true);
uuids.remove(e.getUniqueId());
} else if (uuids.containsKey(e.getUniqueId())) {
event.blockList().clear();
uuids.remove(e.getUniqueId());
}
}
}