diff --git a/Spigot-Server-Patches/0395-MC-50319-Check-other-worlds-for-shooter-of-projectil.patch b/Spigot-Server-Patches/0395-MC-50319-Check-other-worlds-for-shooter-of-projectil.patch new file mode 100644 index 0000000000..659ef06282 --- /dev/null +++ b/Spigot-Server-Patches/0395-MC-50319-Check-other-worlds-for-shooter-of-projectil.patch @@ -0,0 +1,42 @@ +From d6423d5e60baa126e36ae5a5dddca163a36992d6 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 17 Oct 2018 19:17:27 -0400 +Subject: [PATCH] MC-50319: Check other worlds for shooter of projectiles + +Say a player shoots an arrow through a nether portal, the game +would lose the shooter for determining things such as Player Kills, +because the entity is in another world. + +If the projectile fails to find the shooter in the current world, check +other worlds. + +diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java +index dd8af4be80..b4a5bc600f 100644 +--- a/src/main/java/net/minecraft/server/EntityProjectile.java ++++ b/src/main/java/net/minecraft/server/EntityProjectile.java +@@ -250,11 +250,21 @@ public abstract class EntityProjectile extends Entity implements IProjectile { + public EntityLiving getShooter() { + if (this.shooter == null && this.shooterId != null && this.world instanceof WorldServer) { + Entity entity = ((WorldServer) this.world).getEntity(this.shooterId); ++ // Paper start - MC-50319 - shooter might be in another world (arrows through portals) ++ if (entity == null) { ++ for (WorldServer world : world.getMinecraftServer().getWorlds()) { ++ entity = world.getEntity(this.shooterId); ++ if (entity != null) { ++ break; ++ } ++ } ++ } ++ // Paper end + + if (entity instanceof EntityLiving) { + this.shooter = (EntityLiving) entity; + } else { +- this.shooterId = null; ++ //this.shooterId = null; // Paper - don't unset shooterId + } + } + +-- +2.19.1 +