Update Moonrise

This commit is contained in:
Jason Penilla 2024-12-03 15:26:43 -07:00
parent 7045b2ad2d
commit 65633e373c
No known key found for this signature in database
GPG key ID: 0E75A301420E48F8
3 changed files with 55 additions and 29 deletions

View file

@ -6484,10 +6484,10 @@ index 0000000000000000000000000000000000000000..7eafc5b7cba23d8dec92ecc1050afe3f
\ No newline at end of file \ No newline at end of file
diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..91a6f57f35fc1553159cca138a0619e703b2b014 index 0000000000000000000000000000000000000000..3990834a41116682d6ae779a3bf24b0fd989d97d
--- /dev/null --- /dev/null
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkHolderManager.java
@@ -0,0 +1,1455 @@ @@ -0,0 +1,1457 @@
+package ca.spottedleaf.moonrise.patches.chunk_system.scheduling; +package ca.spottedleaf.moonrise.patches.chunk_system.scheduling;
+ +
+import ca.spottedleaf.concurrentutil.lock.ReentrantAreaLock; +import ca.spottedleaf.concurrentutil.lock.ReentrantAreaLock;
@ -6709,6 +6709,8 @@ index 0000000000000000000000000000000000000000..91a6f57f35fc1553159cca138a0619e7
+ LOGGER.error("Failed to close '" + type.name() + "' regionfile cache for world '" + WorldUtil.getWorldName(this.world) + "'", ex); + LOGGER.error("Failed to close '" + type.name() + "' regionfile cache for world '" + WorldUtil.getWorldName(this.world) + "'", ex);
+ } + }
+ } + }
+
+ this.taskScheduler.setShutdown(true);
+ } + }
+ +
+ void ensureInAutosave(final NewChunkHolder holder) { + void ensureInAutosave(final NewChunkHolder holder) {
@ -7945,10 +7947,10 @@ index 0000000000000000000000000000000000000000..91a6f57f35fc1553159cca138a0619e7
+} +}
diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..b0bfe655922877676948d9b6ff3fa5a6ebb7a640 index 0000000000000000000000000000000000000000..67532b85073b7978254a0b04caadfe822679e61f
--- /dev/null --- /dev/null
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/scheduling/ChunkTaskScheduler.java
@@ -0,0 +1,1038 @@ @@ -0,0 +1,1055 @@
+package ca.spottedleaf.moonrise.patches.chunk_system.scheduling; +package ca.spottedleaf.moonrise.patches.chunk_system.scheduling;
+ +
+import ca.spottedleaf.concurrentutil.executor.PrioritisedExecutor; +import ca.spottedleaf.concurrentutil.executor.PrioritisedExecutor;
@ -8222,6 +8224,16 @@ index 0000000000000000000000000000000000000000..b0bfe655922877676948d9b6ff3fa5a6
+ return this.lockShift; + return this.lockShift;
+ } + }
+ +
+ private volatile boolean shutdown;
+
+ public boolean hasShutdown() {
+ return this.shutdown;
+ }
+
+ public void setShutdown(final boolean shutdown) {
+ this.shutdown = shutdown;
+ }
+
+ public ChunkTaskScheduler(final ServerLevel world) { + public ChunkTaskScheduler(final ServerLevel world) {
+ this.world = world; + this.world = world;
+ // must be >= region shift (in paper, doesn't exist) and must be >= ticket propagator section shift + // must be >= region shift (in paper, doesn't exist) and must be >= ticket propagator section shift
@ -8476,6 +8488,13 @@ index 0000000000000000000000000000000000000000..b0bfe655922877676948d9b6ff3fa5a6
+ return loaded; + return loaded;
+ } + }
+ +
+ if (this.hasShutdown()) {
+ throw new IllegalStateException(
+ "Chunk system has shut down, cannot process chunk requests in world '" + ca.spottedleaf.moonrise.common.util.WorldUtil.getWorldName(this.world) + "' at "
+ + "(" + chunkX + "," + chunkZ + ") status: " + status
+ );
+ }
+
+ final Long ticketId = getNextNonFullLoadId(); + final Long ticketId = getNextNonFullLoadId();
+ final int ticketLevel = getTicketLevel(status); + final int ticketLevel = getTicketLevel(status);
+ this.chunkHolderManager.addTicketAtLevel(NON_FULL_CHUNK_LOAD, chunkX, chunkZ, ticketLevel, ticketId); + this.chunkHolderManager.addTicketAtLevel(NON_FULL_CHUNK_LOAD, chunkX, chunkZ, ticketLevel, ticketId);
@ -25994,7 +26013,7 @@ index 65206fdfa5b94eaca139e433b4865c16b16641f3..bf4463bcb5dc439ac5a3fa08dd60845a
} }
} }
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da552c6539 100644 index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..d7382fc1498a33db909c343d8d07c5aa7130c20f 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -52,7 +52,7 @@ import net.minecraft.world.level.storage.DimensionDataStorage; @@ -52,7 +52,7 @@ import net.minecraft.world.level.storage.DimensionDataStorage;
@ -26006,7 +26025,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
private static final Logger LOGGER = LogUtils.getLogger(); private static final Logger LOGGER = LogUtils.getLogger();
private final DistanceManager distanceManager; private final DistanceManager distanceManager;
@@ -81,6 +81,100 @@ public class ServerChunkCache extends ChunkSource { @@ -81,6 +81,107 @@ public class ServerChunkCache extends ChunkSource {
} }
long chunkFutureAwaitCounter; long chunkFutureAwaitCounter;
// Paper end // Paper end
@ -26035,6 +26054,13 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
+ completable::complete + completable::complete
+ ); + );
+ +
+ if (!completable.isDone() && chunkTaskScheduler.hasShutdown()) {
+ throw new IllegalStateException(
+ "Chunk system has shut down, cannot process chunk requests in world '" + ca.spottedleaf.moonrise.common.util.WorldUtil.getWorldName(this.level) + "' at "
+ + "(" + chunkX + "," + chunkZ + ") status: " + toStatus
+ );
+ }
+
+ if (ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.level, chunkX, chunkZ)) { + if (ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.level, chunkX, chunkZ)) {
+ ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, chunkX, chunkZ); + ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, chunkX, chunkZ);
+ this.mainThreadProcessor.managedBlock(completable::isDone); + this.mainThreadProcessor.managedBlock(completable::isDone);
@ -26107,7 +26133,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory) { public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory) {
this.level = world; this.level = world;
@@ -112,13 +206,7 @@ public class ServerChunkCache extends ChunkSource { @@ -112,13 +213,7 @@ public class ServerChunkCache extends ChunkSource {
} }
// CraftBukkit end // CraftBukkit end
// Paper start // Paper start
@ -26122,7 +26148,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
@Nullable @Nullable
public ChunkAccess getChunkAtImmediately(int x, int z) { public ChunkAccess getChunkAtImmediately(int x, int z) {
@@ -189,59 +277,42 @@ public class ServerChunkCache extends ChunkSource { @@ -189,59 +284,42 @@ public class ServerChunkCache extends ChunkSource {
@Nullable @Nullable
@Override @Override
public ChunkAccess getChunk(int x, int z, ChunkStatus leastStatus, boolean create) { public ChunkAccess getChunk(int x, int z, ChunkStatus leastStatus, boolean create) {
@ -26138,13 +26164,13 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
- } - }
- // Paper end - Perf: Optimise getChunkAt calls for loaded chunks - // Paper end - Perf: Optimise getChunkAt calls for loaded chunks
- ProfilerFiller gameprofilerfiller = Profiler.get(); - ProfilerFiller gameprofilerfiller = Profiler.get();
-
- gameprofilerfiller.incrementCounter("getChunk");
- long k = ChunkPos.asLong(x, z);
+ // Paper start - rewrite chunk system + // Paper start - rewrite chunk system
+ if (leastStatus == ChunkStatus.FULL) { + if (leastStatus == ChunkStatus.FULL) {
+ final LevelChunk ret = this.fullChunks.get(ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkKey(x, z)); + final LevelChunk ret = this.fullChunks.get(ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkKey(x, z));
- gameprofilerfiller.incrementCounter("getChunk");
- long k = ChunkPos.asLong(x, z);
-
- for (int l = 0; l < 4; ++l) { - for (int l = 0; l < 4; ++l) {
- if (k == this.lastChunkPos[l] && leastStatus == this.lastChunkStatus[l]) { - if (k == this.lastChunkPos[l] && leastStatus == this.lastChunkStatus[l]) {
- ChunkAccess ichunkaccess = this.lastChunk[l]; - ChunkAccess ichunkaccess = this.lastChunk[l];
@ -26195,20 +26221,20 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
+ +
+ if (ret != null || !ca.spottedleaf.moonrise.common.util.TickThread.isTickThread()) { + if (ret != null || !ca.spottedleaf.moonrise.common.util.TickThread.isTickThread()) {
+ return ret; + return ret;
} + }
+ +
+ final ca.spottedleaf.moonrise.patches.chunk_system.scheduling.NewChunkHolder holder = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler() + final ca.spottedleaf.moonrise.patches.chunk_system.scheduling.NewChunkHolder holder = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getChunkTaskScheduler()
+ .chunkHolderManager.getChunkHolder(chunkX, chunkZ); + .chunkHolderManager.getChunkHolder(chunkX, chunkZ);
+ if (holder == null) { + if (holder == null) {
+ return ret; + return ret;
+ } }
+ +
+ return ca.spottedleaf.moonrise.common.PlatformHooks.get().getCurrentlyLoadingChunk(holder.vanillaChunkHolder); + return ca.spottedleaf.moonrise.common.PlatformHooks.get().getCurrentlyLoadingChunk(holder.vanillaChunkHolder);
+ // Paper end - rewrite chunk system + // Paper end - rewrite chunk system
} }
private void clearCache() { private void clearCache() {
@@ -272,56 +343,59 @@ public class ServerChunkCache extends ChunkSource { @@ -272,56 +350,59 @@ public class ServerChunkCache extends ChunkSource {
} }
private CompletableFuture<ChunkResult<ChunkAccess>> getChunkFutureMainThread(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean create) { private CompletableFuture<ChunkResult<ChunkAccess>> getChunkFutureMainThread(int chunkX, int chunkZ, ChunkStatus leastStatus, boolean create) {
@ -26306,7 +26332,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
} }
@Override @Override
@@ -334,30 +408,18 @@ public class ServerChunkCache extends ChunkSource { @@ -334,30 +415,18 @@ public class ServerChunkCache extends ChunkSource {
} }
public boolean runDistanceManagerUpdates() { // Paper - public public boolean runDistanceManagerUpdates() { // Paper - public
@ -26343,7 +26369,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
this.chunkMap.saveAllChunks(flush); this.chunkMap.saveAllChunks(flush);
} }
@@ -368,17 +430,15 @@ public class ServerChunkCache extends ChunkSource { @@ -368,17 +437,15 @@ public class ServerChunkCache extends ChunkSource {
} }
public void close(boolean save) throws IOException { public void close(boolean save) throws IOException {
@ -26364,7 +26390,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
ProfilerFiller gameprofilerfiller = Profiler.get(); ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("purge"); gameprofilerfiller.push("purge");
@@ -403,6 +463,7 @@ public class ServerChunkCache extends ChunkSource { @@ -403,6 +470,7 @@ public class ServerChunkCache extends ChunkSource {
this.runDistanceManagerUpdates(); this.runDistanceManagerUpdates();
gameprofilerfiller.popPush("chunks"); gameprofilerfiller.popPush("chunks");
if (tickChunks) { if (tickChunks) {
@ -26372,7 +26398,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
this.tickChunks(); this.tickChunks();
this.chunkMap.tick(); this.chunkMap.tick();
} }
@@ -429,7 +490,10 @@ public class ServerChunkCache extends ChunkSource { @@ -429,7 +497,10 @@ public class ServerChunkCache extends ChunkSource {
gameprofilerfiller.push("filteringTickingChunks"); gameprofilerfiller.push("filteringTickingChunks");
this.collectTickingChunks(list); this.collectTickingChunks(list);
gameprofilerfiller.popPush("shuffleChunks"); gameprofilerfiller.popPush("shuffleChunks");
@ -26384,7 +26410,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
this.tickChunks(gameprofilerfiller, j, list); this.tickChunks(gameprofilerfiller, j, list);
gameprofilerfiller.pop(); gameprofilerfiller.pop();
} finally { } finally {
@@ -448,7 +512,7 @@ public class ServerChunkCache extends ChunkSource { @@ -448,7 +519,7 @@ public class ServerChunkCache extends ChunkSource {
while (iterator.hasNext()) { while (iterator.hasNext()) {
ChunkHolder playerchunk = (ChunkHolder) iterator.next(); ChunkHolder playerchunk = (ChunkHolder) iterator.next();
@ -26393,7 +26419,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
if (chunk != null) { if (chunk != null) {
playerchunk.broadcastChanges(chunk); playerchunk.broadcastChanges(chunk);
@@ -460,14 +524,26 @@ public class ServerChunkCache extends ChunkSource { @@ -460,14 +531,26 @@ public class ServerChunkCache extends ChunkSource {
} }
private void collectTickingChunks(List<LevelChunk> chunks) { private void collectTickingChunks(List<LevelChunk> chunks) {
@ -26425,7 +26451,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
} }
private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) { private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) {
@@ -508,7 +584,7 @@ public class ServerChunkCache extends ChunkSource { @@ -508,7 +591,7 @@ public class ServerChunkCache extends ChunkSource {
NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, list1); NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, list1);
} }
@ -26434,7 +26460,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
this.level.tickChunk(chunk, k); this.level.tickChunk(chunk, k);
} }
} }
@@ -521,11 +597,13 @@ public class ServerChunkCache extends ChunkSource { @@ -521,11 +604,13 @@ public class ServerChunkCache extends ChunkSource {
} }
private void getFullChunk(long pos, Consumer<LevelChunk> chunkConsumer) { private void getFullChunk(long pos, Consumer<LevelChunk> chunkConsumer) {
@ -26452,7 +26478,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
} }
@@ -619,6 +697,12 @@ public class ServerChunkCache extends ChunkSource { @@ -619,6 +704,12 @@ public class ServerChunkCache extends ChunkSource {
this.chunkMap.setServerViewDistance(watchDistance); this.chunkMap.setServerViewDistance(watchDistance);
} }
@ -26465,7 +26491,7 @@ index 6a2af3cd3aebe525a5ff41a801929547d59b8fec..b3ce572547535001959d9bcc6cb567da
public void setSimulationDistance(int simulationDistance) { public void setSimulationDistance(int simulationDistance) {
this.distanceManager.updateSimulationDistance(simulationDistance); this.distanceManager.updateSimulationDistance(simulationDistance);
} }
@@ -710,21 +794,19 @@ public class ServerChunkCache extends ChunkSource { @@ -710,21 +801,19 @@ public class ServerChunkCache extends ChunkSource {
@Override @Override
// CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task
public boolean pollTask() { public boolean pollTask() {

View file

@ -38,10 +38,10 @@ index 7833c53b4eff67f2ff37c091b5926cb081205921..094096bd08450e5d656ce2c442757cbc
// Paper end // Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index b3ce572547535001959d9bcc6cb567da552c6539..8e96905fa93b02623f16feb4369a45b175031ebf 100644 index d7382fc1498a33db909c343d8d07c5aa7130c20f..59d0739c810d3430de13fa68ce8ea023dcc7435f 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -492,7 +492,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -499,7 +499,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
gameprofilerfiller.popPush("shuffleChunks"); gameprofilerfiller.popPush("shuffleChunks");
// Paper start - chunk tick iteration optimisation // Paper start - chunk tick iteration optimisation
this.shuffleRandom.setSeed(this.level.random.nextLong()); this.shuffleRandom.setSeed(this.level.random.nextLong());
@ -50,7 +50,7 @@ index b3ce572547535001959d9bcc6cb567da552c6539..8e96905fa93b02623f16feb4369a45b1
// Paper end - chunk tick iteration optimisation // Paper end - chunk tick iteration optimisation
this.tickChunks(gameprofilerfiller, j, list); this.tickChunks(gameprofilerfiller, j, list);
gameprofilerfiller.pop(); gameprofilerfiller.pop();
@@ -549,7 +549,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -556,7 +556,19 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) { private void tickChunks(ProfilerFiller profiler, long timeDelta, List<LevelChunk> chunks) {
profiler.popPush("naturalSpawnCount"); profiler.popPush("naturalSpawnCount");
int j = this.distanceManager.getNaturalSpawnChunkCount(); int j = this.distanceManager.getNaturalSpawnChunkCount();

View file

@ -37,10 +37,10 @@ index 094096bd08450e5d656ce2c442757cbc63ffb090..cfeeddf2cb4ff50dbc29c6913e78ca1d
} }
// Paper end // Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 8e96905fa93b02623f16feb4369a45b175031ebf..d021cd5b6136f0125076513977f430c6d4dd4f9f 100644 index 59d0739c810d3430de13fa68ce8ea023dcc7435f..1c87904bb99cc40bafc9357fb2fc1703b759c3df 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -555,7 +555,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -562,7 +562,17 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled
// re-set mob counts // re-set mob counts
for (ServerPlayer player : this.level.players) { for (ServerPlayer player : this.level.players) {