--- ../work/decompile-8eb82bde//net/minecraft/server/EntityProjectile.java	2014-11-28 17:43:43.153707434 +0000
+++ src/main/java/net/minecraft/server/EntityProjectile.java	2014-11-28 17:38:23.000000000 +0000
@@ -25,6 +25,7 @@
     public EntityProjectile(World world, EntityLiving entityliving) {
         super(world);
         this.shooter = entityliving;
+        this.projectileSource = (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity(); // CraftBukkit
         this.a(0.25F, 0.25F);
         this.setPositionRotation(entityliving.locX, entityliving.locY + (double) entityliving.getHeadHeight(), entityliving.locZ, entityliving.yaw, entityliving.pitch);
         this.locX -= (double) (MathHelper.cos(this.yaw / 180.0F * 3.1415927F) * 0.16F);
@@ -130,7 +131,7 @@
                     MovingObjectPosition movingobjectposition1 = axisalignedbb.a(vec3d, vec3d1);
 
                     if (movingobjectposition1 != null) {
-                        double d1 = vec3d.f(movingobjectposition1.pos);
+                        double d1 = vec3d.distanceSquared(movingobjectposition1.pos); // CraftBukkit - distance efficiency
 
                         if (d1 < d0 || d0 == 0.0D) {
                             entity = entity1;
@@ -150,6 +151,11 @@
                 this.aq();
             } else {
                 this.a(movingobjectposition);
+                // CraftBukkit start
+                if (this.dead) {
+                    org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this);
+                }
+                // CraftBukkit end
             }
         }