--- ../src-base/minecraft/net/minecraft/entity/monster/EntityGhast.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityGhast.java
@@ -18,6 +18,11 @@
 import net.minecraft.world.EnumDifficulty;
 import net.minecraft.world.World;
 
+// CraftBukkit start
+import org.bukkit.craftbukkit.entity.CraftEntity;
+import org.bukkit.event.entity.EntityTargetEvent;
+// CraftBukkit end
+
 public class EntityGhast extends EntityFlying implements IMob
 {
     public int courseChangeCooldown;
@@ -117,13 +122,50 @@
 
         if (this.targetedEntity != null && this.targetedEntity.isDead)
         {
-            this.targetedEntity = null;
+            // CraftBukkit start
+            EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, EntityTargetEvent.TargetReason.TARGET_DIED);
+            this.worldObj.getServer().getPluginManager().callEvent(event);
+
+            if (!event.isCancelled())
+            {
+                if (event.getTarget() == null)
+                {
+                    this.targetedEntity = null;
+                }
+                else
+                {
+                    this.targetedEntity = ((CraftEntity) event.getTarget()).getHandle();
+                }
+            }
+
+            // CraftBukkit end
         }
 
         if (this.targetedEntity == null || this.aggroCooldown-- <= 0)
         {
-            this.targetedEntity = this.worldObj.getClosestVulnerablePlayerToEntity(this, 100.0D);
+            // CraftBukkit start
+            Entity target = this.worldObj.getClosestVulnerablePlayerToEntity(this, 100.0D);
 
+            if (target != null)
+            {
+                EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), target.getBukkitEntity(), EntityTargetEvent.TargetReason.CLOSEST_PLAYER);
+                this.worldObj.getServer().getPluginManager().callEvent(event);
+
+                if (!event.isCancelled())
+                {
+                    if (event.getTarget() == null)
+                    {
+                        this.targetedEntity = null;
+                    }
+                    else
+                    {
+                        this.targetedEntity = ((CraftEntity) event.getTarget()).getHandle();
+                    }
+                }
+            }
+
+            // CraftBukkit end
+
             if (this.targetedEntity != null)
             {
                 this.aggroCooldown = 20;
@@ -152,7 +194,8 @@
                 {
                     this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1008, (int)this.posX, (int)this.posY, (int)this.posZ, 0);
                     EntityLargeFireball entitylargefireball = new EntityLargeFireball(this.worldObj, this, d5, d6, d7);
-                    entitylargefireball.field_92057_e = this.explosionStrength;
+                    // CraftBukkit - set bukkitYield when setting explosionpower
+                    entitylargefireball.bukkitYield = entitylargefireball.field_92057_e  = this.explosionStrength;
                     double d8 = 4.0D;
                     Vec3 vec3 = this.getLook(1.0F);
                     entitylargefireball.posX = this.posX + vec3.xCoord * d8;
