aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch')
-rw-r--r--Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch b/Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch
new file mode 100644
index 0000000000..014bdbd6b6
--- /dev/null
+++ b/Spigot-Server-Patches/0366-Fix-Sending-Chunks-to-Client.patch
@@ -0,0 +1,66 @@
+From 07a00d527e871eadaf4a96af5ad367ddcbfa9cc3 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+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 0d51c1baeb..46804203fe 100644
+--- a/src/main/java/net/minecraft/server/Chunk.java
++++ b/src/main/java/net/minecraft/server/Chunk.java
+@@ -1190,7 +1190,7 @@ public class Chunk implements IChunkAccess {
+ }
+
+ public boolean isReady() {
+- return this.C.a(ChunkStatus.POSTPROCESSED);
++ return true; // Paper - Always send chunks
+ }
+
+ public boolean v() {
+@@ -1428,6 +1428,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 e4cf8548d3..ac5d158093 100644
+--- a/src/main/java/net/minecraft/server/PlayerChunk.java
++++ b/src/main/java/net/minecraft/server/PlayerChunk.java
+@@ -20,7 +20,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;
+@@ -147,6 +147,7 @@ public class PlayerChunk {
+ }
+ }
+
++ public boolean sendAll() { return b(); } // Paper - OBFHELPER
+ public boolean b() {
+ if (this.done) {
+ return true;
+--
+2.21.0
+