From aa5ba3307b20dc28bb7487fac1fb9624ab18501e Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 29 Sep 2018 01:18:16 -0400 Subject: [PATCH] Fix Sending Chunks to Client Vanilla has some screwy logic that doesn't send a chunk until it has been post processed. This is an issue as post processing doesn't occur until all neighbor chunks have been loaded. This can reduce view distance while generating terrain, but also cause bugs where chunks are never sent to the client. This fix always sends chunks to the client, and simply updates the client anytime post processing is triggered with the new chunk data. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java index ccdc171d4..7751ae444 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -1200,7 +1200,7 @@ public class Chunk implements IChunkAccess { } public boolean isReady() { - return this.C.a(ChunkStatus.POSTPROCESSED); + return true; // Paper - Always send chunks } public boolean v() { @@ -1438,6 +1438,13 @@ public class Chunk implements IChunkAccess { this.h.clear(); this.a(ChunkStatus.POSTPROCESSED); this.m.a(this); + // Paper start - resend chunk after post process + PlayerChunk playerChunk = ((WorldServer) world).getPlayerChunkMap().getChunk(locX, locZ); + if (playerChunk != null) { + playerChunk.done = false; + playerChunk.sendAll(); + } + // Paper end } } diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java index e61538b3c..f5d971bbe 100644 --- a/src/main/java/net/minecraft/server/PlayerChunk.java +++ b/src/main/java/net/minecraft/server/PlayerChunk.java @@ -18,7 +18,7 @@ public class PlayerChunk { private int dirtyCount; private int h; private long i; - private boolean done; + boolean done; // Paper - package-private boolean chunkExists; // Paper // Paper start PaperAsyncChunkProvider.CancellableChunkRequest chunkRequest; @@ -144,6 +144,7 @@ public class PlayerChunk { } } + public boolean sendAll() { return b(); } // Paper - OBFHELPER public boolean b() { if (this.done) { return true; -- 2.20.0