@@ -136,10 +136,10 @@ index 0000000000000000000000000000000000000000..89724b9d82813cc5d42eb1a0a3d4bf50
136136\ No newline at end of file
137137diff --git a/src/main/java/io/multipaper/shreddedpaper/threading/ShreddedPaperChunkTicker.java b/src/main/java/io/multipaper/shreddedpaper/threading/ShreddedPaperChunkTicker.java
138138new file mode 100644
139- index 0000000000000000000000000000000000000000..41e3f42b860ec3a9c030d0e627908ea5c84a2694
139+ index 0000000000000000000000000000000000000000..0a74bace54fbae64d08faeda9ce4f100f92438fd
140140--- /dev/null
141141+++ b/src/main/java/io/multipaper/shreddedpaper/threading/ShreddedPaperChunkTicker.java
142- @@ -0,0 +1,120 @@
142+ @@ -0,0 +1,122 @@
143143+ package io.multipaper.shreddedpaper.threading;
144144+
145145+ import com.mojang.logging.LogUtils;
@@ -199,7 +199,9 @@ index 0000000000000000000000000000000000000000..41e3f42b860ec3a9c030d0e627908ea5
199199+ try {
200200+ currentlyTickingRegion.set(region);
201201+
202- + region.forEach(chunk -> this._tickChunk(level, chunk, spawnercreature_d));
202+ + if (level.tickRateManager().runsNormally()) {
203+ + region.forEach(chunk -> this._tickChunk(level, chunk, spawnercreature_d));
204+ + }
203205+
204206+ if (region.isEmpty()) {
205207+ level.chunkSource.tickingRegions.remove(region.getRegionPos());
@@ -352,7 +354,7 @@ index c617f12b7e44859a4edafc0deff844cd2148268d..1cfde8e63d039144846a743ddb2b4079
352354 // MinecraftTimings.connectionTimer.startTiming(); // Spigot // Paper // Purpur
353355 this.getConnection().tick();
354356diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
355- index e80e14c7b512a3e4e46586c8816dbe05a9cdf0da..7a75de1ad600505ce44b299e8eabfece9b48c387 100644
357+ index e80e14c7b512a3e4e46586c8816dbe05a9cdf0da..038c0bd7bb271e63fb4cca949a5fe82c502992c2 100644
356358--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
357359+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
358360@@ -1,12 +1,10 @@
@@ -449,7 +451,7 @@ index e80e14c7b512a3e4e46586c8816dbe05a9cdf0da..7a75de1ad600505ce44b299e8eabfece
449451 long i = this.level.getGameTime();
450452 long j = i - this.lastInhabitedUpdate;
451453
452- @@ -591,75 +599,76 @@ public class ServerChunkCache extends ChunkSource {
454+ @@ -591,83 +599,90 @@ public class ServerChunkCache extends ChunkSource {
453455 // Paper - optimise chunk tick iteration
454456
455457 int chunksTicked = 0; // Paper
@@ -587,16 +589,22 @@ index e80e14c7b512a3e4e46586c8816dbe05a9cdf0da..7a75de1ad600505ce44b299e8eabfece
587589+ future = future.thenRun(() -> this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies)); // ShreddedPaper - run async
588590 //} // Paper - timings // Purpur
589591 }
592+ + // ShreddedPaper start - tick freeze
593+ + } else {
594+ + // Tick the regions even if we're frozen
595+ + future = future.thenCompose(v -> this.shreddedPaperChunkTicker.tickChunks(lastSpawnState));
590596 }
591- @@ -668,6 +677,7 @@ public class ServerChunkCache extends ChunkSource {
597+ + // ShreddedPaper end - tick freeze
598+
599+ //gameprofilerfiller.popPush("broadcast"); // Purpur
592600 // Paper - optimise chunk tick iteration
593601 //this.level.timings.broadcastChunkUpdates.startTiming(); // Paper - timing // Purpur
594602 // Paper start - optimise chunk tick iteration
595603+ future = future.thenRun(() -> { // ShreddedPaper - run async
596604 if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) {
597605 it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<ChunkHolder> copy = this.chunkMap.needsChangeBroadcasting.clone();
598606 this.chunkMap.needsChangeBroadcasting.clear();
599- @@ -679,14 +689 ,16 @@ public class ServerChunkCache extends ChunkSource {
607+ @@ -679,14 +694 ,16 @@ public class ServerChunkCache extends ChunkSource {
600608 }
601609 }
602610 }
@@ -614,7 +622,7 @@ index e80e14c7b512a3e4e46586c8816dbe05a9cdf0da..7a75de1ad600505ce44b299e8eabfece
614622 if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) {
615623 for (ServerPlayer player : this.level.players) {
616624 // Paper start - per player mob spawning backoff
617- @@ -718,7 +730 ,10 @@ public class ServerChunkCache extends ChunkSource {
625+ @@ -718,7 +735 ,10 @@ public class ServerChunkCache extends ChunkSource {
618626 });
619627 }
620628 }
0 commit comments