PaperMC/paper-server/nms-patches/EntityProjectile.patch
CraftBukkit/Spigot 64b9c40cd7 MC-88491: Fix projectile colliding with shooter
In some situations, a projectile made collide with the entity that shot
it. This occurs because the game sets the ignored entity incorrectly.
Our fix is to ensure that the shooter is the only entity that gets
ignored by the projectile.

By: Zach Brown <zach.brown@destroystokyo.com>
2016-12-22 15:29:23 -06:00

31 lines
1.4 KiB
Diff

--- a/net/minecraft/server/EntityProjectile.java
+++ b/net/minecraft/server/EntityProjectile.java
@@ -35,6 +35,7 @@
public EntityProjectile(World world, EntityLiving entityliving) {
this(world, entityliving.locX, entityliving.locY + (double) entityliving.getHeadHeight() - 0.10000000149011612D, entityliving.locZ);
this.shooter = entityliving;
+ this.projectileSource = (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity(); // CraftBukkit
}
protected void i() {}
@@ -127,7 +128,7 @@
if (entity1.isInteractable()) {
if (entity1 == this.c) {
flag = true;
- } else if (this.shooter != null && this.ticksLived < 2 && this.c == null) {
+ } else if (this.shooter != null && this.ticksLived < 2 && this.c == null && this.shooter == entity1) { // CraftBukkit - MC-88491
this.c = entity1;
flag = true;
} else {
@@ -164,6 +165,11 @@
this.e(movingobjectposition.a());
} else {
this.a(movingobjectposition);
+ // CraftBukkit start
+ if (this.dead) {
+ org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition);
+ }
+ // CraftBukkit end
}
}