From bf60f44013adaa05e93d5ce865f686349a0ee97f Mon Sep 17 00:00:00 2001
From: Andrew Ardill <andrew.ardill@gmail.com>
Date: Mon, 5 Dec 2011 19:18:05 +1100
Subject: [PATCH] Teach EnderDragon how to throw EntityDamage events

Relates to BUKKIT-129
---
 .../minecraft/server/EntityEnderDragon.java    | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java
index e0836fe561..2897ab4f8a 100644
--- a/src/main/java/net/minecraft/server/EntityEnderDragon.java
+++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java
@@ -1,5 +1,9 @@
 package net.minecraft.server;
 
+import org.bukkit.Bukkit;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+
 import java.util.Iterator;
 import java.util.List;
 
@@ -388,7 +392,19 @@ public class EntityEnderDragon extends EntityComplex {
             Entity entity = (Entity) list.get(i);
 
             if (entity instanceof EntityLiving) {
-                entity.damageEntity(DamageSource.mobAttack(this), 10);
+                // CraftBukkit start - throw damage events when the dragon attacks
+                // The EntityHuman case is handled in EntityHuman, so don't throw it here
+                if (!(entity instanceof EntityHuman)) {
+                    EntityDamageByEntityEvent damageEvent = new EntityDamageByEntityEvent(this.getBukkitEntity(), entity.getBukkitEntity(), EntityDamageEvent.DamageCause.ENTITY_ATTACK, 10);
+                    Bukkit.getPluginManager().callEvent(damageEvent);
+
+                    if (!damageEvent.isCancelled()) {
+                        entity.damageEntity(DamageSource.mobAttack(this), damageEvent.getDamage());
+                    }
+                } else {
+                    entity.damageEntity(DamageSource.mobAttack(this), 10);
+                }
+                // CraftBukkit end
             }
         }
     }