From 362040ac47dff74b80c62061973955d4ec8b0cd8 Mon Sep 17 00:00:00 2001 From: Nicolas Shreiner Date: Mon, 23 Mar 2015 03:34:16 -0400 Subject: [PATCH] Add Variants for Rabbits and Guardians, add ability to Capture mobs by simply smacking them with the egg --- .../listeners/EggCatcherEntityListener.java | 128 ++++++++++++++---- .../EggCatcherPlayerClickListener.java | 19 +-- 2 files changed, 116 insertions(+), 31 deletions(-) diff --git a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java index dad2e87..eb1d4c5 100644 --- a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java +++ b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java @@ -11,11 +11,13 @@ import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.PortalType; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Ageable; import org.bukkit.entity.Creeper; import org.bukkit.entity.Damageable; import org.bukkit.entity.Egg; +import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; import org.bukkit.entity.Guardian; import org.bukkit.entity.Horse; @@ -33,9 +35,11 @@ import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityCreatePortalEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.HorseInventory; import org.bukkit.inventory.ItemStack; @@ -457,9 +461,13 @@ public class EggCatcherEntityListener { lore.add(ChatColor.BLUE + "Variant: " + ChatColor.WHITE + ((Ocelot)entity).getCatType().name()); } - if ((entity instanceof Creeper) && ((Creeper) entity).isPowered()) + if ((entity instanceof Creeper)) { - lore.add(ChatColor.BLUE + "Variant: " + ChatColor.WHITE + "Charged"); + Creeper c = (Creeper)entity; + if(c.isPowered()){ + lore.add(ChatColor.BLUE + "Variant: " + ChatColor.WHITE + "Charged"); + entity = (Entity)c; + } } if ((entity instanceof Ageable)) { @@ -520,35 +528,41 @@ public class EggCatcherEntityListener lore.add(ChatColor.BLUE + "Color: " + ChatColor.WHITE + ((Wolf)entity).getCollarColor().name()); } - if((entity instanceof Guardian && ((Guardian)entity).isElder())) { - meta = eggStack.getItemMeta(); - meta.setDisplayName("Spawn Elder Guardian"); - eggStack.setItemMeta(meta); - lore.add(ChatColor.BLUE + "Variant: " + ChatColor.WHITE + "Elder"); + if(entity instanceof Guardian) { + Guardian g = (Guardian)entity; + if(g.isElder()){ + meta = eggStack.getItemMeta(); + meta.setDisplayName("Spawn Elder Guardian"); + eggStack.setItemMeta(meta); + lore.add(ChatColor.BLUE + "Variant: " + ChatColor.WHITE + "Elder"); + entity = (Entity)g; + } } - if((entity instanceof Rabbit)){ - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.BLACK) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if(entity instanceof Rabbit){ + Rabbit r = (Rabbit)entity; + if (r.getRabbitType() == Rabbit.Type.BLACK) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.BLACK_AND_WHITE) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.BLACK_AND_WHITE) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.BROWN) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.BROWN) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.GOLD) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.GOLD) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.SALT_AND_PEPPER) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.SALT_AND_PEPPER) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.THE_KILLER_BUNNY) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } - if (((Rabbit)entity).getRabbitType() == Rabbit.Type.WHITE) { - lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + ((Rabbit)entity).getRabbitType().toString()); + if (r.getRabbitType() == Rabbit.Type.WHITE) { + lore.add(ChatColor.BLUE + "Type: " + ChatColor.WHITE + r.getRabbitType().toString()); } + entity = (Entity)r; } if ((entity instanceof Horse)) { @@ -625,9 +639,77 @@ public class EggCatcherEntityListener return entity; } - // ************* Stop Creatures killed by EggCatcher from Dropping Normal Drops ***************** + //If Entity is an EnderDragon, Cancel the Explode Effect; This technically shouldn't happen, but just in case. @EventHandler(priority = EventPriority.HIGH) + public void onEntityExplode(EntityExplodeEvent event){ + if(event.getEntity() instanceof EnderDragon){ + Entity entity = event.getEntity(); + EnderDragon d = (EnderDragon) entity; + if(d.getHealth() <= 0) + { + if((d.getKiller() instanceof Player || d.getKiller() instanceof Egg) && d.getKiller() != null) + { + if(d.getKiller() instanceof Egg) + { + event.setCancelled(true); + } + if(d.getKiller() instanceof Player) + { + Player p = d.getKiller(); + ItemStack hand = null; + if(p.getItemInHand()!=null) + hand = p.getItemInHand(); + if(hand.getType() == Material.EGG) + { + event.setCancelled(true); + } + } + } + } + } + } + + //If Entity is an EnderDragon, Cancel the EnderPortal Drops; This technically shouldn't happen, but just in case. + @EventHandler(priority = EventPriority.HIGH) + public void onEntityCreatePortal(EntityCreatePortalEvent event){ + if(event.getEntity() instanceof EnderDragon) + { + Entity entity = event.getEntity(); + EnderDragon d = (EnderDragon) entity; + if(d.getHealth() <= 0) + { + if((d.getKiller() instanceof Player || d.getKiller() instanceof Egg) && d.getKiller() != null) + { + if(d.getKiller() instanceof Egg) + { + if(event.getPortalType() != null && event.getPortalType() == PortalType.ENDER) + { + event.setCancelled(true); + } + } + if(d.getKiller() instanceof Player) + { + Player p = d.getKiller(); + ItemStack hand = null; + if(p.getItemInHand()!=null) + hand = p.getItemInHand(); + if(hand.getType() == Material.EGG) + { + if(event.getPortalType() != null && event.getPortalType() == PortalType.ENDER) + { + event.setCancelled(true); + } + } + } + } + } + } + } + + // ************* Stop Creatures killed by EggCatcher from Dropping Normal Drops ***************** + + @EventHandler public void stopCaptureDrops(EntityDeathEvent event) { Entity entity = event.getEntity(); diff --git a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerClickListener.java b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerClickListener.java index 3c15497..226d4f3 100644 --- a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerClickListener.java +++ b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerClickListener.java @@ -39,13 +39,10 @@ public class EggCatcherPlayerClickListener implements org.bukkit.event.Listener if (i.getItemMeta().getDisplayName() != null) { String s = i.getItemMeta().getDisplayName(); - if(s.contains("Spawn ")){ - String l = s.replace("§f", ""); - l = l.replace("Spawn ", ""); - s = l; - } + if(!(s.contains("Spawn "))){ entity.setCustomName(s); entity.setCustomNameVisible(true); + } } for (String s : i.getItemMeta().getLore()) { if (s.contains("Health:")) { @@ -69,10 +66,14 @@ public class EggCatcherPlayerClickListener implements org.bukkit.event.Listener ((Skeleton)entity).setSkeletonType(Skeleton.SkeletonType.valueOf(l)); } if ((entity instanceof Guardian)){ - ((Guardian)entity).setElder(true); + Guardian g = (Guardian)entity; + g.setElder(true); + entity = (LivingEntity)g; } if ((entity instanceof Creeper)){ - ((Creeper)entity).setPowered(true); + Creeper c = (Creeper)entity; + c.setPowered(true); + entity = (LivingEntity) c; } } if (s.contains("Age:")) { @@ -223,7 +224,9 @@ public class EggCatcherPlayerClickListener implements org.bukkit.event.Listener l = l.replaceAll("§f", ""); l = l.replaceAll("Type: ", ""); if ((entity instanceof Rabbit)) { - ((Rabbit)entity).setRabbitType(Rabbit.Type.valueOf(l)); + Rabbit r = (Rabbit)entity; + r.setRabbitType(Rabbit.Type.valueOf(l)); + entity = (LivingEntity)r; } } }