geforkt von Mirrors/Paper
89a1469d3f
Their chunk is set to null before removal, so we kept them around.
43 Zeilen
1.8 KiB
Diff
43 Zeilen
1.8 KiB
Diff
From 5b343a1fa590b5869013aca47839c69e10490ab2 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 c19828ed56..7deeaa0834 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityProjectile.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityProjectile.java
|
|
@@ -213,11 +213,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
|
|
|