mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 07:20:00 +08:00
c6d6773678
Vanilla logic here would allow us to remvoe an entity from its current chunk, and if it was going to move into an unloaded chunk, that entity would not be added to the unloaded chunk. This is bad because this will result in the entity being lost! In almost all cases, the chunk will be loaded, but in the event it wasn't, instead of losing the entity, load the chunk to add the entity to it.
35 lines
1.5 KiB
Diff
35 lines
1.5 KiB
Diff
From 8133b92590c9b861b7342bcc1079c23f2e106450 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Wed, 21 Sep 2016 22:54:28 -0400
|
|
Subject: [PATCH] Chunk registration fixes
|
|
|
|
World checks and the Chunk Add logic are inconsistent on how Y > 256, < 0, is treated
|
|
|
|
Keep them consistent
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 6e37c4366..ea24a6e4c 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -1770,7 +1770,7 @@ public abstract class World implements IBlockAccess {
|
|
}
|
|
|
|
i = MathHelper.floor(entity.locX / 16.0D);
|
|
- j = MathHelper.floor(entity.locY / 16.0D);
|
|
+ j = Math.min(15, Math.max(0, MathHelper.floor(entity.locY / 16.0D))); // Paper - stay consistent with chunk add/remove behavior
|
|
int k = MathHelper.floor(entity.locZ / 16.0D);
|
|
|
|
if (!entity.aa || entity.ab != i || entity.ac != j || entity.ad != k) {
|
|
@@ -1778,7 +1778,7 @@ public abstract class World implements IBlockAccess {
|
|
this.getChunkAt(entity.ab, entity.ad).a(entity, entity.ac);
|
|
}
|
|
|
|
- if (!entity.bD() && !this.isChunkLoaded(i, k, true)) {
|
|
+ if (false && !entity.bD() && !this.isChunkLoaded(i, k, true)) { // Paper - Always send entities into a new chunk, never lose them
|
|
entity.aa = false;
|
|
} else {
|
|
this.getChunkAt(i, k).a(entity);
|
|
--
|
|
2.18.0
|
|
|