PaperMC/Spigot-Server-Patches/0379-MC-50319-Check-other-worlds-for-shooter-of-projectil.patch
Shane Freeder ea855e2b46 Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Developers!: You will need to clean up your work/Minecraft/1.13.2 folder
for this

Also, restore a patch that was dropped in the last upstream

Bukkit Changes:
279eeab3 Fix command description not being set
96e2bb18 Remove debug print from SyntheticEventTest

CraftBukkit Changes:
d3ed1516 Fix dangerously threaded beacons
217a293d Don't relocate joptsimple to allow --help to work.
1be05a21 Prepare for imminent Java 12 release
a49270b2 Mappings Update
5259d80c SPIGOT-4669: Fix PlayerTeleportEvent coordinates for relative teleports

Spigot Changes:
e6eb36f2 Rebuild patches
2019-03-20 01:55:16 +00:00

42 lines
1.8 KiB
Diff

From 0f87ea655baaaa6ca4d45542454bd04f44104ded Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 62b5b6ece..60ab1c751 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.21.0