mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-06 02:42:14 +01:00
e886d8118e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing
40 lines
2.5 KiB
Diff
40 lines
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach@zachbr.io>
|
|
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 63bd11ba69c9e4645269f62973ef23bfa034999b..8e7da2c5f3852920ec5fbcdd2bff4d299e6aa499 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
|