@@ -8,9 +8,11 @@ Subject: [PATCH] Fix save problems on shutdown
8
8
while waiting for the chunk system to empty, as there's simply
9
9
too much trash that could prevent them from executing during
10
10
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
11
13
12
14
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
14
16
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
15
17
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
16
18
@@ -998,6 +998,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -27,18 +29,31 @@ index 17e87875a95495940899b862eabf98b3d6a365da..e25c9a9ccab67a018c2e58e13b24089b
27
29
while (this.levels.values().stream().anyMatch((worldserver1) -> {
28
30
return worldserver1.getChunkSource().chunkMap.hasWork();
29
31
})) {
30
- @@ -1010,9 +1017,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
32
+ @@ -1010,9 +1017,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
31
33
worldserver.getChunkSource().tick(() -> {
32
34
return true;
33
35
}, false);
34
36
+ while (worldserver.getChunkSource().pollTask()); // Paper - drain tasks
35
37
}
36
38
37
39
- this.waitUntilNextTick();
40
+ + this.forceTicks = true; // Paper
38
41
+ while (this.pollTask()); // Paper - drain tasks
39
42
}
40
43
41
44
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);
42
57
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
43
58
index b5b56d4549e97abbbe9e91d881b9bca8428f1eec..dce7452d58d6081f1a83baddafb1596ebd423d21 100644
44
59
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
0 commit comments