From 645fcd8fdb928740cab84ee92c99e55b715e0b9d Mon Sep 17 00:00:00 2001 From: Jeremy Schroeder Date: Sat, 3 Aug 2013 12:44:42 -0400 Subject: [PATCH] Fix up KillListener (Should be working fully now) --- .../listeners/core/KillListenerInstance.java | 114 ++++++++++++------ .../denizen/utilities/Utilities.java | 2 + 2 files changed, 80 insertions(+), 36 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/listeners/core/KillListenerInstance.java b/src/main/java/net/aufdemrand/denizen/listeners/core/KillListenerInstance.java index 3ea24e6422..00463238ff 100644 --- a/src/main/java/net/aufdemrand/denizen/listeners/core/KillListenerInstance.java +++ b/src/main/java/net/aufdemrand/denizen/listeners/core/KillListenerInstance.java @@ -2,16 +2,14 @@ import net.aufdemrand.denizen.events.ReplaceableTagEvent; import net.aufdemrand.denizen.listeners.AbstractListener; -import net.aufdemrand.denizen.objects.aH; -import net.aufdemrand.denizen.objects.dCuboid; -import net.aufdemrand.denizen.objects.dEntity; -import net.aufdemrand.denizen.objects.dList; +import net.aufdemrand.denizen.objects.*; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizen.utilities.depends.Depends; import net.aufdemrand.denizen.utilities.depends.WorldGuardUtilities; import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.trait.LookClose; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.Listener; @@ -184,56 +182,102 @@ public void listen(EntityDeathEvent event) { if (cuboid != null) if (!cuboid.isInsideCuboid(player.getLocation())) return; - // Check type! + // + // ENTITY type Kill Listener + // if (type == KillType.ENTITY) { - + // Get entity killed dEntity ent = new dEntity(event.getEntity()); - dB.log("Entity killed: " + ent.identify()); boolean count_it = false; - + // Check targets, if any match entity killed, count_it! for (String target : targets) { if (dEntity.valueOf(target) != null) if (ent.comparesTo(dEntity.valueOf(target)) == 1) count_it = true; } - - if (count_it - || targets.contains("*")) { + // If an entity was found, or targets is '*', increment the + // kills_so_far + if (count_it || targets.contains("*")) { kills_so_far++; dB.log(player.getName() + " killed a " + ent.identify() + ". Current progress '" + kills_so_far + "/" + required + "'."); + // Check the number of kills so far check(); } + } - } else if (type == KillType.NPC) { - if (CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) - if (targets.contains(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).getName().toUpperCase()) - || targets.contains("*") - || targets.contains(String.valueOf(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).getId() ))) { - kills_so_far++; - dB.log(player.getName() + " killed " - + String.valueOf(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).getId()) - + "/" + CitizensAPI.getNPCRegistry().getNPC(event.getEntity()).getName() - + ". Current progress '" + kills_so_far + "/" + required + "'."); - check(); - } + // + // NPC type Kill Listener + // + else if (type == KillType.NPC) { + // If a NPC wasn't killed, return. + if (!CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) return; + // Get the NPC killed + dNPC npc = dNPC.mirrorCitizensNPC(CitizensAPI.getNPCRegistry().getNPC(event.getEntity())); + boolean count_it = false; - } else if (type == KillType.PLAYER) { - if (event.getEntityType() == EntityType.PLAYER) - if (targets.contains(((Player) event.getEntity()).getName().toUpperCase()) - || targets.contains("*") - || targets.isEmpty()) { - kills_so_far++; - dB.log(player.getName() + " killed " - + ((Player) event.getEntity()).getName().toUpperCase() - + ". Current progress '" + kills_so_far + "/" + required + "'."); - check(); + // Check targets, if any match entity killed, count_it! + for (String target : targets) { + // Check IDs + if (dNPC.valueOf(target) != null) { + if (dNPC.valueOf(target).getId() == npc.getId()) + count_it = true; } + // Check Names + else if (npc.getName().equalsIgnoreCase(target)) + count_it = true; + } + // If NPC was matched or targets contains '*', increment + // the kills so far. + if (count_it || targets.contains("*")) { + kills_so_far++; + dB.log(player.getName() + " killed " + + npc.toString() + ". Current progress '" + + kills_so_far + "/" + required + "'."); + // Check the number of kills so far + check(); + } + } + + // + // PLAYER type Kill Listener + // + else if (type == KillType.PLAYER) { + // Check to make sure entity is a Player, and not a NPC + if (event.getEntityType() != EntityType.PLAYER) return; + if (CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) return; + + // Get player killed + dPlayer player = dPlayer.mirrorBukkitPlayer((Player) event.getEntity()); + boolean count_it = false; + // Check targets, if any match entity killed, count_it! + for (String target : targets) { + if (dPlayer.valueOf(target) != null) + if (dPlayer.valueOf(target).getName().equalsIgnoreCase(player.getName())) + count_it = true; + } + // If an entity was found, or targets is '*', increment the + // kills_so_far + if (count_it || targets.contains("*")) { + kills_so_far++; + dB.log(player.getName() + " killed " + + player.getName() + ". Current progress '" + + kills_so_far + "/" + required + "'."); + // Check the number of kills so far + check(); + } + } - } else if (type == KillType.GROUP) { + // + // GROUP type Kill Listener + // + else if (type == KillType.GROUP) { + // Require the entity to be a Player if (event.getEntityType() == EntityType.PLAYER) + // Iterate through groups on the Player for (String group : Depends.permissions.getPlayerGroups((Player) event.getEntity())) + // If a group matches, count it! if (targets.contains(group.toUpperCase())) { kills_so_far++; dB.log(player.getName() + " killed " + ((Player) event.getEntity()).getName().toUpperCase() + " of group " + group + "."); @@ -241,8 +285,6 @@ public void listen(EntityDeathEvent event) { break; } } - - } diff --git a/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java b/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java index 1727bfdf33..dedd0d0ccd 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/Utilities.java @@ -16,6 +16,8 @@ import net.aufdemrand.denizen.objects.dPlayer; import net.aufdemrand.denizen.tags.TagManager; +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.npc.NPC; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material;