From b2a835466d4c335c3858aa3a6e6895d35437ff8e Mon Sep 17 00:00:00 2001 From: mcmonkey4eva Date: Wed, 17 Dec 2014 21:02:29 -0800 Subject: [PATCH] Fix the proximity trigger Who wrote this memleaking nightmare bit of code!? This needs far more work than this little bandaid, but this is all I have time for. --- .../denizen/npc/traits/HealthTrait.java | 3 ++- .../commands/world/PlayEffectCommand.java | 1 + .../scripts/triggers/core/ProximityTrigger.java | 17 +++++++---------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/npc/traits/HealthTrait.java b/src/main/java/net/aufdemrand/denizen/npc/traits/HealthTrait.java index b043675613..120760ded9 100644 --- a/src/main/java/net/aufdemrand/denizen/npc/traits/HealthTrait.java +++ b/src/main/java/net/aufdemrand/denizen/npc/traits/HealthTrait.java @@ -101,7 +101,8 @@ public boolean animatesOnDeath() { * information for this trait. * */ - @Override public void onSpawn() { + @Override + public void onSpawn() { dying = false; setHealth(); diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java index 5cd13daf96..2be3e0c4b3 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/world/PlayEffectCommand.java @@ -33,6 +33,7 @@ // // Visual effects: // - iconcrack_[id] (item break effect - examples: iconcrack_7, iconcrack_268) +// - TODO: Update the below list. Mojang chamged some of 'em! // - ENDER_SIGNAL, MOBSPAWNER_FLAMES, POTION_BREAK, SMOKE // - HUGE_EXPLOSION, LARGE_EXPLODE, FIREWORKS_SPARK, BUBBLE, SUSPEND, DEPTH_SUSPEND, TOWN_AURA, // CRIT, MAGIC_CRIT, MOB_SPELL, MOB_SPELL_AMBIENT, SPELL, INSTANT_SPELL, WITCH_MAGIC, NOTE, STEP_SOUND, diff --git a/src/main/java/net/aufdemrand/denizen/scripts/triggers/core/ProximityTrigger.java b/src/main/java/net/aufdemrand/denizen/scripts/triggers/core/ProximityTrigger.java index 61ca74c233..51b82e2b3c 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/triggers/core/ProximityTrigger.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/triggers/core/ProximityTrigger.java @@ -17,10 +17,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -349,14 +346,14 @@ public void checkMaxProximities(ScriptReloadEvent event) { } } - private static Map> proximityTracker = new ConcurrentHashMap>(8, 0.9f, 1); + private static Map> proximityTracker = new ConcurrentHashMap>(8, 0.9f, 1); // // Ensures that a Player who has entered proximity of an NPC also fires Exit Proximity. // private boolean hasExitedProximityOf(Player player, dNPC npc) { // If Player hasn't entered proximity, it's not in the Map. Return true, must be exited. - Set existing = proximityTracker.get(player); + Set existing = proximityTracker.get(player.getUniqueId()); if (existing == null) return true; // If Player has no entry for this NPC, return true. if (!existing.contains(npc.getId())) return true; @@ -372,10 +369,10 @@ private boolean hasExitedProximityOf(Player player, dNPC npc) { * @param npc the NPC */ private void enterProximityOf(Player player, dNPC npc) { - Set npcs = proximityTracker.get(player); + Set npcs = proximityTracker.get(player.getUniqueId()); if (npcs == null) { npcs = new HashSet(); - proximityTracker.put(player, npcs); + proximityTracker.put(player.getUniqueId(), npcs); } npcs.add(npc.getId()); } @@ -388,10 +385,10 @@ private void enterProximityOf(Player player, dNPC npc) { * @param npc the NPC */ private void exitProximityOf(Player player, dNPC npc) { - Set npcs = proximityTracker.get(player); + Set npcs = proximityTracker.get(player.getUniqueId()); if (npcs == null) { npcs = new HashSet(); - proximityTracker.put(player, npcs); + proximityTracker.put(player.getUniqueId(), npcs); } npcs.remove(npc.getId()); }