From df57dc656157c2df692858b66b253575232f2a68 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 3 Mar 2016 00:07:23 -0600
Subject: [PATCH] EAR: Fix bug with teleporting entities

[17:53:15] <Aikar> had a reproduceable issue of losing entities on teleport, now resolved
https://hub.spigotmc.org/stash/projects/SPIGOT/repos/spigot/pull-requests/52/overview

diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 96014a9..c99b402 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -119,9 +119,17 @@ public abstract class Entity implements ICommandListener {
     private static final DataWatcherObject<Boolean> aA = DataWatcher.a(Entity.class, DataWatcherRegistry.h);
     private static final DataWatcherObject<Boolean> aB = DataWatcher.a(Entity.class, DataWatcherRegistry.h);
     public boolean aa;
-    public int ab;
-    public int ac;
-    public int ad;
+    // Paper start - EAR: Fix bug with teleporting entities
+    public boolean isAddedToChunk() {
+        int chunkX = MathHelper.floor(locX / 16.0D);
+        int chunkY = MathHelper.floor(locY / 16.0D);
+        int chunkZ = MathHelper.floor(locZ / 16.0D);
+        return aa && getChunkX() == chunkX && getChunkY() == chunkY || getChunkZ() == chunkZ;
+    }
+    public int ab; public int getChunkX() { return ab; }
+    public int ac; public int getChunkY() { return ac; }
+    public int ad; public int getChunkZ() { return ad; }
+    // Paper end
     public boolean ah;
     public boolean impulse;
     public int portalCooldown;
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
index f0d3a19..a1bd1a6 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -249,7 +249,7 @@ public class ActivationRange
     {
         // Never safe to skip fireworks or entities not yet added to chunk
         // PAIL: inChunk
-        if ( !entity.aa || entity instanceof EntityFireworks ) {
+        if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks ) { // Paper - EAR: Fix bug with teleporting entities
             return true;
         }
 
-- 
2.7.4