From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sat, 5 Mar 2022 17:12:52 -0800 Subject: [PATCH] Fix save problems on shutdown - Save level.dat first, in case the shutdown is killed later - Force run minecraftserver tasks and the chunk source tasks while waiting for the chunk system to empty, as there's simply too much trash that could prevent them from executing during the chunk source tick (i.e "time left in tick" logic). diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 17e87875a95495940899b862eabf98b3d6a365da..e25c9a9ccab67a018c2e58e13b24089bc2ce538f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -998,6 +998,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return worldserver1.getChunkSource().chunkMap.hasWork(); })) { @@ -1010,9 +1017,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return true; }, false); + while (worldserver.getChunkSource().pollTask()); // Paper - drain tasks } - this.waitUntilNextTick(); + while (this.pollTask()); // Paper - drain tasks } this.saveAllChunks(false, true, false); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java index b5b56d4549e97abbbe9e91d881b9bca8428f1eec..dce7452d58d6081f1a83baddafb1596ebd423d21 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1258,7 +1258,13 @@ public class ServerLevel extends Level implements WorldGenLevel { } } + // Paper start + this.saveLevelDat(); + } + public void saveLevelDat() { + this.saveLevelData(); + // Paper end // CraftBukkit start - moved from MinecraftServer.saveChunks ServerLevel worldserver1 = this;