--- a/net/minecraft/server/IProjectile.java
+++ b/net/minecraft/server/IProjectile.java
@@ -4,6 +4,10 @@
 import java.util.UUID;
 import javax.annotation.Nullable;
 
+// CraftBukkit start
+import org.bukkit.projectiles.ProjectileSource;
+// CraftBukkit end
+
 public abstract class IProjectile extends Entity {
 
     private UUID shooter;
@@ -19,6 +23,7 @@
             this.shooter = entity.getUniqueID();
             this.c = entity.getId();
         }
+        this.projectileSource = (entity != null && entity.getBukkitEntity() instanceof ProjectileSource) ? (ProjectileSource) entity.getBukkitEntity() : null; // CraftBukkit
 
     }
 
@@ -101,6 +106,7 @@
     }
 
     protected void a(MovingObjectPosition movingobjectposition) {
+        org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition); // CraftBukkit - Call event
         MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType();
 
         if (movingobjectposition_enummovingobjecttype == MovingObjectPosition.EnumMovingObjectType.ENTITY) {