diff options
author | Zach Brown <[email protected]> | 2020-08-21 19:27:25 -0400 |
---|---|---|
committer | Aikar <[email protected]> | 2020-08-21 19:27:25 -0400 |
commit | 7470c3ef69fa31044473e39ad03a8e133026d45d (patch) | |
tree | f49d4edb487f10c023ff6ec0eb012caa2ab1d862 | |
parent | cb50e74436245cc7128b32b1d3668db1522ac455 (diff) | |
download | Paper-7470c3ef69fa31044473e39ad03a8e133026d45d.tar.gz Paper-7470c3ef69fa31044473e39ad03a8e133026d45d.zip |
Do not let the server load chunks from newer versions (1.16.2+)
If the server attempts to load a chunk generated by a newer version of
the game, immediately stop the server to prevent data corruption.
You can override this functionality at your own peril.
-rw-r--r-- | Spigot-Server-Patches/0553-Do-not-let-the-server-load-chunks-from-newer-version.patch | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0553-Do-not-let-the-server-load-chunks-from-newer-version.patch b/Spigot-Server-Patches/0553-Do-not-let-the-server-load-chunks-from-newer-version.patch new file mode 100644 index 0000000000..f58f41602a --- /dev/null +++ b/Spigot-Server-Patches/0553-Do-not-let-the-server-load-chunks-from-newer-version.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Zach Brown <[email protected]> +Date: Tue, 23 Jul 2019 20:44:47 -0500 +Subject: [PATCH] Do not let the server load chunks from newer versions + +If the server attempts to load a chunk generated by a newer version of +the game, immediately stop the server to prevent data corruption. + +You can override this functionality at your own peril. + +diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +index ac58fcb7985ebe0cfdab6e1400deb37c233ff637..66a39d75394236f5ee745da7ac0b0ac5fe71f911 100644 +--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java ++++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +@@ -51,10 +51,24 @@ public class ChunkRegionLoader { + return holder.protoChunk; + } + ++ // Paper start ++ private static final int CURRENT_DATA_VERSION = SharedConstants.getGameVersion().getWorldVersion(); ++ private static final boolean JUST_CORRUPT_IT = Boolean.getBoolean("Paper.ignoreWorldDataVersion"); ++ // Paper end ++ + public static InProgressChunkHolder loadChunk(WorldServer worldserver, DefinedStructureManager definedstructuremanager, VillagePlace villageplace, ChunkCoordIntPair chunkcoordintpair, NBTTagCompound nbttagcompound, boolean distinguish) { + ArrayDeque<Runnable> tasksToExecuteOnMain = new ArrayDeque<>(); + // Paper end + ChunkGenerator chunkgenerator = worldserver.getChunkProvider().getChunkGenerator(); ++ // Paper start - Do NOT attempt to load chunks saved with newer versions ++ if (nbttagcompound.hasKeyOfType("DataVersion", 99)) { ++ int dataVersion = nbttagcompound.getInt("DataVersion"); ++ if (!JUST_CORRUPT_IT && dataVersion > CURRENT_DATA_VERSION) { ++ new RuntimeException("Server attempted to load chunk saved with newer version of minecraft! " + dataVersion + " > " + CURRENT_DATA_VERSION).printStackTrace(); ++ System.exit(1); ++ } ++ } ++ // Paper end + WorldChunkManager worldchunkmanager = chunkgenerator.getWorldChunkManager(); + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Level"); // Paper - diff on change, see ChunkRegionLoader#getChunkCoordinate + ChunkCoordIntPair chunkcoordintpair1 = new ChunkCoordIntPair(nbttagcompound1.getInt("xPos"), nbttagcompound1.getInt("zPos")); // Paper - diff on change, see ChunkRegionLoader#getChunkCoordinate |