package tv.mineinthebox.essentials.events.players;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.entity.Zombie;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
public class EntityUseHeadOnPlayerDeathEvent implements Listener {
private HashMap<String, UUID> entitys = new HashMap<String, UUID>();
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) {
if(e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
if(e.getDamager() instanceof Zombie) {
entitys.put(p.getName(), e.getDamager().getUniqueId());
} else if(e.getDamager() instanceof Arrow) {
Arrow arrow = (Arrow) e.getDamager();
if(arrow.getShooter() instanceof Skeleton) {
Skeleton skel = (Skeleton) arrow.getShooter();
entitys.put(p.getName(), skel.getUniqueId());
}
}
}
}
@EventHandler
public void onDeath(PlayerDeathEvent e) {
if(entitys.containsKey(e.getEntity().getName())) {
try {
Entity entity = getEntity(entitys.get(e.getEntity().getName()), e.getEntity().getWorld());
if(entity instanceof Zombie) {
ItemStack item = new ItemStack(Material.SKULL_ITEM);
item.setDurability((short) 3);
SkullMeta meta = (SkullMeta) item.getItemMeta();
meta.setOwner(e.getEntity().getName());
item.setItemMeta(meta);
Zombie zombie = (Zombie) entity;
zombie.getEquipment().setHelmet(item);
zombie.getEquipment().setHelmetDropChance(100);
entitys.remove(e.getEntity().getName());
} else if(entity instanceof Skeleton) {
ItemStack item = new ItemStack(Material.SKULL_ITEM);
item.setDurability((short) 3);
SkullMeta meta = (SkullMeta) item.getItemMeta();
meta.setOwner(e.getEntity().getName());
item.setItemMeta(meta);
Skeleton skeleton = (Skeleton) entity;
skeleton.getEquipment().setHelmet(item);
skeleton.getEquipment().setHelmetDropChance(100);
entitys.remove(e.getEntity().getName());
}
} catch(NullPointerException r) {
entitys.remove(e.getEntity().getName());
}
}
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
if(entitys.containsKey(e.getPlayer().getName())) {
entitys.remove(e.getPlayer().getName());
}
}
@EventHandler
public void onQuit(PlayerKickEvent e) {
if(entitys.containsKey(e.getPlayer().getName())) {
entitys.remove(e.getPlayer().getName());
}
}
private Entity getEntity(UUID uid, World w) {
for(Entity entity : w.getEntities()) {
if(entity.getUniqueId().equals(uid)) {
return entity;
}
}
throw new NullPointerException();
}
}