Skip to content

Commit 1e12cf8

Browse files
committed
Add more to the save fixes
- Set forceTicks to true, so that player packets are always processed so that the main process queue can be drained
1 parent 196271d commit 1e12cf8

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

patches/server/0881-Fix-save-problems-on-shutdown.patch

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ Subject: [PATCH] Fix save problems on shutdown
88
while waiting for the chunk system to empty, as there's simply
99
too much trash that could prevent them from executing during
1010
the chunk source tick (i.e "time left in tick" logic).
11+
- Set forceTicks to true, so that player packets are always
12+
processed so that the main process queue can be drained
1113

1214
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
13-
index 17e87875a95495940899b862eabf98b3d6a365da..e25c9a9ccab67a018c2e58e13b24089bc2ce538f 100644
15+
index 17e87875a95495940899b862eabf98b3d6a365da..39b7c78b032ed6fc29ac765020d5a38858bf2a3a 100644
1416
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
1517
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
1618
@@ -998,6 +998,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -27,18 +29,31 @@ index 17e87875a95495940899b862eabf98b3d6a365da..e25c9a9ccab67a018c2e58e13b24089b
2729
while (this.levels.values().stream().anyMatch((worldserver1) -> {
2830
return worldserver1.getChunkSource().chunkMap.hasWork();
2931
})) {
30-
@@ -1010,9 +1017,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
32+
@@ -1010,9 +1017,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
3133
worldserver.getChunkSource().tick(() -> {
3234
return true;
3335
}, false);
3436
+ while (worldserver.getChunkSource().pollTask()); // Paper - drain tasks
3537
}
3638

3739
- this.waitUntilNextTick();
40+
+ this.forceTicks = true; // Paper
3841
+ while (this.pollTask()); // Paper - drain tasks
3942
}
4043

4144
this.saveAllChunks(false, true, false);
45+
@@ -1308,6 +1317,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
46+
}
47+
48+
private boolean haveTime() {
49+
+ // Paper start
50+
+ if (this.forceTicks) {
51+
+ return true;
52+
+ }
53+
+ // Paper end
54+
// CraftBukkit start
55+
if (isOversleep) return canOversleep();// Paper - because of our changes, this logic is broken
56+
return this.forceTicks || this.runningTask() || Util.getMillis() < (this.mayHaveDelayedTasks ? this.delayedTasksMaxNextTickTime : this.nextTickTime);
4257
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
4358
index b5b56d4549e97abbbe9e91d881b9bca8428f1eec..dce7452d58d6081f1a83baddafb1596ebd423d21 100644
4459
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java

0 commit comments

Comments
 (0)