From 356c97cd67e2c1568a21f8c03c1f9e6146a865b1 Mon Sep 17 00:00:00 2001 From: bm01 Date: Wed, 27 Feb 2013 13:49:56 +0100 Subject: [PATCH] Fixed CME in BleedTimer --- .../nossr50/skills/runnables/BleedTimer.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/skills/runnables/BleedTimer.java b/src/main/java/com/gmail/nossr50/skills/runnables/BleedTimer.java index a076f6c00..464b6b013 100644 --- a/src/main/java/com/gmail/nossr50/skills/runnables/BleedTimer.java +++ b/src/main/java/com/gmail/nossr50/skills/runnables/BleedTimer.java @@ -27,7 +27,10 @@ public class BleedTimer implements Runnable { continue; } + int damage = 0; + if (entity instanceof Player) { + damage = 1; Player player = (Player) entity; if (!player.isOnline()) { @@ -35,21 +38,30 @@ public class BleedTimer implements Runnable { } // Never kill with Bleeding - if (player.getHealth() - 1 > 0) { - CombatTools.dealDamage(player, 1); + if (player.getHealth() - damage > 0) { + CombatTools.dealDamage(player, damage); ParticleEffectUtils.playBleedEffect(entity); } - entry.setValue(entry.getValue() - 1); + entry.setValue(entry.getValue() - damage); if (entry.getValue() <= 0) { player.sendMessage(LocaleLoader.getString("Swords.Combat.Bleeding.Stopped")); } } else { - CombatTools.dealDamage(entity, 2); + damage = 2; + + // Anticipate the entity's death to prevent CME because of our EntityDeathEvent listener + if (entity.getHealth() - damage > 0) { + entry.setValue(entry.getValue() - 1); + } + else { + bleedIterator.remove(); + } + + CombatTools.dealDamage(entity, damage); ParticleEffectUtils.playBleedEffect(entity); - entry.setValue(entry.getValue() - 1); } } }