From 5afa993be895cc40f64755dedc8711abe36f59e6 Mon Sep 17 00:00:00 2001 From: schum476 Date: Wed, 30 Apr 2014 21:22:28 -0500 Subject: [PATCH] handleEntityDamageEvent was a 55 line method. A good chunk of this was due to a long elseif block from lines 423-441. Another fair chunk was from nested if/else blocks from 396-420. The following was extracted into the method checkMagicOrProjectile(), located at line 429: if (damager.getBukkitEntity() instanceof ThrownPotion) { cause = DamageCause.MAGIC; } else if (damager.getBukkitEntity() instanceof Projectile) { cause = DamageCause.PROJECTILE; } The following was extracted into the method setCause(), located at line 439: DamageCause cause = null; if (source == DamageSource.FIRE) { cause = DamageCause.FIRE; } else if (source == DamageSource.STARVE) { cause = DamageCause.STARVATION; } else if (source == DamageSource.WITHER) { cause = DamageCause.WITHER; } else if (source == DamageSource.STUCK) { cause = DamageCause.SUFFOCATION; } else if (source == DamageSource.DROWN) { cause = DamageCause.DROWNING; } else if (source == DamageSource.BURN) { cause = DamageCause.FIRE_TICK; } else if (source == MELTING) { cause = DamageCause.MELTING; } else if (source == POISON) { cause = DamageCause.POISON; } else if (source == DamageSource.MAGIC) { cause = DamageCause.MAGIC; } handleEntityDamageEvent() is now 32 lines. --- .../craftbukkit/event/CraftEventFactory.java | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 2911d601fd..399c403011 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -401,11 +401,7 @@ public static EntityDamageEvent handleEntityDamageEvent(Entity entity, DamageSou if (source instanceof EntityDamageSourceIndirect) { damager = ((EntityDamageSourceIndirect) source).getProximateDamageSource(); - if (damager.getBukkitEntity() instanceof ThrownPotion) { - cause = DamageCause.MAGIC; - } else if (damager.getBukkitEntity() instanceof Projectile) { - cause = DamageCause.PROJECTILE; - } + cause = checkMagicOrProjectile(damager, cause); } else if ("thorns".equals(source.translationIndex)) { cause = DamageCause.THORNS; } @@ -419,6 +415,28 @@ public static EntityDamageEvent handleEntityDamageEvent(Entity entity, DamageSou return event; } + DamageCause cause = setCause(source); + + if (cause != null) { + return callEntityDamageEvent(null, entity, cause, damage); + } + + // If an event was called earlier, we return null. + // EG: Cactus, Lava, EntityEnderPearl "fall", FallingSand + return null; + } + + private static DamageCause checkMagicOrProjectile(Entity damager, + DamageCause cause) { + if (damager.getBukkitEntity() instanceof ThrownPotion) { + cause = DamageCause.MAGIC; + } else if (damager.getBukkitEntity() instanceof Projectile) { + cause = DamageCause.PROJECTILE; + } + return cause; + } + + private static DamageCause setCause(DamageSource source) { DamageCause cause = null; if (source == DamageSource.FIRE) { cause = DamageCause.FIRE; @@ -439,14 +457,7 @@ public static EntityDamageEvent handleEntityDamageEvent(Entity entity, DamageSou } else if (source == DamageSource.MAGIC) { cause = DamageCause.MAGIC; } - - if (cause != null) { - return callEntityDamageEvent(null, entity, cause, damage); - } - - // If an event was called earlier, we return null. - // EG: Cactus, Lava, EntityEnderPearl "fall", FallingSand - return null; + return cause; } // Non-Living Entities such as EntityEnderCrystal need to call this