Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-15 04:20:04 +01:00
2ecb1c6483
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.
54 Zeilen
2.7 KiB
Diff
54 Zeilen
2.7 KiB
Diff
From 436002c12133ffec2180ad47f4b16609b6de4399 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 98cc4efc..f86d3aa2 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -43,9 +43,23 @@ 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
|
|
+ // Paper start - Do NOT attempt to load chunks saved with newer versions
|
|
+ if (nbttagcompound.hasKeyOfType("DataVersion", 3)) {
|
|
+ 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
|
|
ChunkGenerator<?> chunkgenerator = worldserver.getChunkProvider().getChunkGenerator();
|
|
WorldChunkManager worldchunkmanager = chunkgenerator.getWorldChunkManager();
|
|
NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Level");
|
|
diff --git a/src/main/java/net/minecraft/server/SharedConstants.java b/src/main/java/net/minecraft/server/SharedConstants.java
|
|
index cd04322e..7befab85 100644
|
|
--- a/src/main/java/net/minecraft/server/SharedConstants.java
|
|
+++ b/src/main/java/net/minecraft/server/SharedConstants.java
|
|
@@ -33,6 +33,7 @@ public class SharedConstants {
|
|
return stringbuilder.toString();
|
|
}
|
|
|
|
+ public static GameVersion getGameVersion() { return a(); } // Paper - OBFHELPER
|
|
public static GameVersion a() {
|
|
if (SharedConstants.d == null) {
|
|
SharedConstants.d = MinecraftVersion.a();
|
|
--
|
|
2.24.1
|
|
|