aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch
diff options
context:
space:
mode:
authorZach Brown <[email protected]>2019-09-29 15:02:04 -0500
committerZach Brown <[email protected]>2019-09-29 15:02:04 -0500
commit89eb8902395f0a38b88d8f149658d846f88ee293 (patch)
tree99f6ca0a8d67525272bacbe8b0d2422bce6d6661 /Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch
parent27fca92fa13b0142b447d4919e2750afa644fc84 (diff)
downloadPaper-89eb8902395f0a38b88d8f149658d846f88ee293.tar.gz
Paper-89eb8902395f0a38b88d8f149658d846f88ee293.zip
[CI-SKIP] Rebuild patches
Diffstat (limited to 'Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch')
-rw-r--r--Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch b/Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch
new file mode 100644
index 0000000000..78a967a017
--- /dev/null
+++ b/Spigot-Server-Patches/0376-Handle-bad-chunks-more-gracefully.patch
@@ -0,0 +1,63 @@
+From b03aa2b2428cf6e504fe4f069f208679e666676f Mon Sep 17 00:00:00 2001
+From: Shane Freeder <[email protected]>
+Date: Mon, 15 Apr 2019 02:24:52 +0100
+Subject: [PATCH] Handle bad chunks more gracefully
+
+Prior to this change the server would crash when attempting to load a
+chunk from a region with bad data.
+
+After this change the server will defer back to vanilla behavior. At
+this time, that means attempting to generate a chunk in its place
+(and occasionally just not generating anything and leaving small
+holes in the world (This statement might not be accurate as of 1.13.x)).
+
+Should Mojang choose to alter this behavior in the future, this change
+will simply defer to whatever that new behavior is.
+
+diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java
+index c53518a47..6f34d8aea 100644
+--- a/src/main/java/net/minecraft/server/RegionFileCache.java
++++ b/src/main/java/net/minecraft/server/RegionFileCache.java
+@@ -171,8 +171,21 @@ public abstract class RegionFileCache implements AutoCloseable {
+ private static NBTTagCompound readOversizedChunk(RegionFile regionfile, ChunkCoordIntPair chunkCoordinate) throws IOException {
+ synchronized (regionfile) {
+ try (DataInputStream datainputstream = regionfile.getReadStream(chunkCoordinate)) {
+- NBTTagCompound oversizedData = regionfile.getOversizedData(chunkCoordinate.x, chunkCoordinate.z);
+- NBTTagCompound chunk = NBTCompressedStreamTools.readNBT(datainputstream);
++ // Paper start - Handle bad chunks more gracefully - also handle similarly with oversized data
++ NBTTagCompound oversizedData = null;
++
++ try {
++ oversizedData = regionfile.getOversizedData(chunkCoordinate.x, chunkCoordinate.z);
++ } catch (Exception ex) {}
++
++ NBTTagCompound chunk;
++
++ try {
++ chunk = NBTCompressedStreamTools.readNBT(datainputstream);
++ } catch (final Exception ex) {
++ return null;
++ }
++ // Paper end
+ if (oversizedData == null) {
+ return chunk;
+ }
+@@ -231,8 +244,13 @@ public abstract class RegionFileCache implements AutoCloseable {
+
+ try {
+ if (datainputstream != null) {
+- nbttagcompound = NBTCompressedStreamTools.a(datainputstream);
+- return nbttagcompound;
++ // Paper start - Handle bad chunks more gracefully
++ try {
++ return NBTCompressedStreamTools.a(datainputstream);
++ } catch (Exception ex) {
++ return null;
++ }
++ // Paper end
+ }
+
+ nbttagcompound = null;
+--
+2.23.0
+