diff --git a/patches/server/0006-MC-Utils.patch b/patches/server/0006-MC-Utils.patch
index 04674e548..f2bbd285c 100644
--- a/patches/server/0006-MC-Utils.patch
+++ b/patches/server/0006-MC-Utils.patch
@@ -3079,7 +3079,7 @@ index e9d2034f0753670c2ce69cc93c7e98e89af65c87..2b62f4664f439808661d559dc99762bf
  
      @Override
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 9591f50922343283597bad6d9ac17c175d8ae230..8639ffa2347e3d5c44ab30de0aa98623f95d1fe7 100644
+index 9591f50922343283597bad6d9ac17c175d8ae230..8513490230f5fae0042f536b69b401efca995293 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 @@ -44,6 +44,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureMana
@@ -3299,21 +3299,7 @@ index 9591f50922343283597bad6d9ac17c175d8ae230..8639ffa2347e3d5c44ab30de0aa98623
      @Nullable
      @Override
      public ChunkAccess getChunk(int x, int z, ChunkStatus leastStatus, boolean create) {
-@@ -425,10 +621,9 @@ public class ServerChunkCache extends ChunkSource {
- 
-             this.lastSpawnState = spawnercreature_d;
-             this.level.getProfiler().pop();
--            List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.getChunks());
--
--            Collections.shuffle(list);
--            list.forEach((playerchunk) -> {
-+            //List<PlayerChunk> list = Lists.newArrayList(this.playerChunkMap.f()); // Paper
-+            //Collections.shuffle(list); // Paper
-+            this.chunkMap.getChunks().forEach((playerchunk) -> { // Paper - no... just no...
-                 Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
- 
-                 if (optional.isPresent()) {
-@@ -453,7 +648,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -453,7 +649,7 @@ public class ServerChunkCache extends ChunkSource {
              }
  
              this.level.getProfiler().popPush("broadcast");
@@ -3447,7 +3433,7 @@ index e6d003701426a823768966d944384c69b9701967..3b09f76805053802bb779e227749d814
      @Override
      public float getBukkitYaw() {
 diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
-index 3a830166b65e81b970b0e9930bd79cb3e4eafc74..9d9d7990c49fd37c660efcb2c87a6c3495d648a6 100644
+index deac6d08082b3291e748af6394235b3d18790ff2..d0047fc5156f13c831ab4f23a429d567ed6a39ac 100644
 --- a/src/main/java/net/minecraft/world/entity/Mob.java
 +++ b/src/main/java/net/minecraft/world/entity/Mob.java
 @@ -235,6 +235,7 @@ public abstract class Mob extends LivingEntity {
diff --git a/patches/server/0009-Timings-v2.patch b/patches/server/0009-Timings-v2.patch
index 85a0f95a2..ad0bab37e 100644
--- a/patches/server/0009-Timings-v2.patch
+++ b/patches/server/0009-Timings-v2.patch
@@ -669,7 +669,7 @@ index 0000000000000000000000000000000000000000..0fda52841b5e1643efeda92106124998
 +    }
 +}
 diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
-index da922f395f0fff0881ead893c900c5b2623f48f0..f973828da3ab56dba768fb029a271b2e55cfc24e 100644
+index 99ad5dfe52534048078a386020c4f3f277020107..997041d4bc1cd6be97a2d403723eded7eda60351 100644
 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
 +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
 @@ -14,12 +14,15 @@ import java.util.concurrent.TimeUnit;
@@ -1135,7 +1135,7 @@ index 2b62f4664f439808661d559dc99762bfbac09b16..4788946d7fb25c1b0f26e6a038924c4a
  
      public void broadcast(Entity entity, Packet<?> packet) {
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 8639ffa2347e3d5c44ab30de0aa98623f95d1fe7..bafd97074461d5b17b21579ba493ba8eae8468d8 100644
+index 8513490230f5fae0042f536b69b401efca995293..c5bffd1b40ca9ae3c973044c1ad4947ba2c285ae 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 @@ -348,13 +348,15 @@ public class ServerChunkCache extends ChunkSource {
@@ -1176,7 +1176,7 @@ index 8639ffa2347e3d5c44ab30de0aa98623f95d1fe7..bafd97074461d5b17b21579ba493ba8e
          this.level.timings.doChunkUnload.startTiming(); // Spigot
          this.level.getProfiler().popPush("unload");
          this.chunkMap.tick(booleansupplier);
-@@ -616,13 +622,16 @@ public class ServerChunkCache extends ChunkSource {
+@@ -616,14 +622,17 @@ public class ServerChunkCache extends ChunkSource {
              boolean flag2 = level.ticksPerAnimalSpawns != 0L && worlddata.getGameTime() % level.ticksPerAnimalSpawns == 0L; // CraftBukkit
  
              this.level.getProfiler().push("naturalSpawnCount");
@@ -1187,13 +1187,14 @@ index 8639ffa2347e3d5c44ab30de0aa98623f95d1fe7..bafd97074461d5b17b21579ba493ba8e
  
              this.lastSpawnState = spawnercreature_d;
              this.level.getProfiler().pop();
-             //List<PlayerChunk> list = Lists.newArrayList(this.playerChunkMap.f()); // Paper
-             //Collections.shuffle(list); // Paper
+             List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.getChunks());
+ 
+             Collections.shuffle(list);
 +            this.level.timings.chunkTicks.startTiming(); // Paper
-             this.chunkMap.getChunks().forEach((playerchunk) -> { // Paper - no... just no...
+             list.forEach((playerchunk) -> {
                  Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
  
-@@ -636,15 +645,18 @@ public class ServerChunkCache extends ChunkSource {
+@@ -637,15 +646,18 @@ public class ServerChunkCache extends ChunkSource {
                              NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag2);
                          }
  
@@ -1214,7 +1215,7 @@ index 8639ffa2347e3d5c44ab30de0aa98623f95d1fe7..bafd97074461d5b17b21579ba493ba8e
              }
  
              this.level.getProfiler().popPush("broadcast");
-@@ -652,15 +664,20 @@ public class ServerChunkCache extends ChunkSource {
+@@ -653,15 +665,20 @@ public class ServerChunkCache extends ChunkSource {
                  Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left(); // CraftBukkit - decompile error
  
                  Objects.requireNonNull(playerchunk);
diff --git a/patches/server/0173-PlayerNaturallySpawnCreaturesEvent.patch b/patches/server/0173-PlayerNaturallySpawnCreaturesEvent.patch
index 67b05f5d8..8659753d4 100644
--- a/patches/server/0173-PlayerNaturallySpawnCreaturesEvent.patch
+++ b/patches/server/0173-PlayerNaturallySpawnCreaturesEvent.patch
@@ -36,13 +36,13 @@ index 5ce8ac377b0d2b05dd90baa67f420945cc419609..919a489a5c7b338659c62ae67fc0a6ce
          });
      }
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index bafd97074461d5b17b21579ba493ba8eae8468d8..2c0dd4b5a751e413936f399106367d4b22c17dda 100644
+index c5bffd1b40ca9ae3c973044c1ad4947ba2c285ae..918555ba0af8a779ad55c7cf73f615eb804d00d9 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -631,6 +631,15 @@ public class ServerChunkCache extends ChunkSource {
-             this.level.getProfiler().pop();
-             //List<PlayerChunk> list = Lists.newArrayList(this.playerChunkMap.f()); // Paper
-             //Collections.shuffle(list); // Paper
+@@ -632,6 +632,15 @@ public class ServerChunkCache extends ChunkSource {
+             List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.getChunks());
+ 
+             Collections.shuffle(list);
 +            //Paper start - call player naturally spawn event
 +            int chunkRange = level.spigotConfig.mobSpawnRange;
 +            chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange;
@@ -53,7 +53,7 @@ index bafd97074461d5b17b21579ba493ba8eae8468d8..2c0dd4b5a751e413936f399106367d4b
 +            };
 +            // Paper end
              this.level.timings.chunkTicks.startTiming(); // Paper
-             this.chunkMap.getChunks().forEach((playerchunk) -> { // Paper - no... just no...
+             list.forEach((playerchunk) -> {
                  Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
 diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
 index 823fc38b5bbf5eac2d2e7cc48c4b0557d252f960..fb42d7e3a1a23c02e8fd2cc04e6986ead581018c 100644
diff --git a/patches/server/0260-Asynchronous-chunk-IO-and-loading.patch b/patches/server/0260-Asynchronous-chunk-IO-and-loading.patch
index 93103dfa0..2fbab391d 100644
--- a/patches/server/0260-Asynchronous-chunk-IO-and-loading.patch
+++ b/patches/server/0260-Asynchronous-chunk-IO-and-loading.patch
@@ -2623,7 +2623,7 @@ index db4dac607cf24d3d2cd407255c60678ae4be1a1b..6d024db8bfbd5139d4c94be3d3a48cfa
          return this.poiManager;
      }
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 2c0dd4b5a751e413936f399106367d4b22c17dda..7239dd29ff622a2823d7c25a89cd3dc9e0bafac1 100644
+index 918555ba0af8a779ad55c7cf73f615eb804d00d9..c0bde909755190603e9b4946fe924ba1cac53072 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 @@ -322,10 +322,128 @@ public class ServerChunkCache extends ChunkSource {
@@ -2787,7 +2787,7 @@ index 2c0dd4b5a751e413936f399106367d4b22c17dda..7239dd29ff622a2823d7c25a89cd3dc9
          ChunkPos chunkcoordintpair = new ChunkPos(i, j);
          long k = chunkcoordintpair.toLong();
          int l = 33 + ChunkStatus.getDistance(chunkstatus);
-@@ -837,11 +965,12 @@ public class ServerChunkCache extends ChunkSource {
+@@ -838,11 +966,12 @@ public class ServerChunkCache extends ChunkSource {
          // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task
          public boolean pollTask() {
          try {
diff --git a/patches/server/0396-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch b/patches/server/0396-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch
index a162eefed..e774a7b27 100644
--- a/patches/server/0396-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch
+++ b/patches/server/0396-Optimize-PlayerChunkMap-memory-use-for-visibleChunks.patch
@@ -233,18 +233,18 @@ index 2b291296821dc6d6a8437bd977eeba517cdb5003..962028a58ee54b99be20905c1fd16cfe
          while (objectbidirectionaliterator.hasNext()) {
              Entry<ChunkHolder> entry = (Entry) objectbidirectionaliterator.next();
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index a10c8df3061ebc20c32346462cf2dfccd85ad722..ac077d88e0102b50edce094a6ac4c63546915e88 100644
+index 6f33d4f4ca86bfcad907b451a56e71de0d4585d5..228ff4b52a017e8af987f60d84b7906c9be098f0 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -772,7 +772,7 @@ public class ServerChunkCache extends ChunkSource {
-             };
-             // Paper end
-             this.level.timings.chunkTicks.startTiming(); // Paper
--            this.chunkMap.getChunks().forEach((playerchunk) -> { // Paper - no... just no...
-+            this.chunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping
-                 Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
+@@ -760,7 +760,7 @@ public class ServerChunkCache extends ChunkSource {
  
-                 if (optional.isPresent()) {
+             this.lastSpawnState = spawnercreature_d;
+             this.level.getProfiler().pop();
+-            List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.getChunks());
++            List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.visibleChunkMap.values()); // Paper
+ 
+             Collections.shuffle(list);
+             //Paper start - call player naturally spawn event
 diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
 index a4d05aeccc142808981f1ecebd001c905ae721ed..e6b7302554b2a54363d55e149744237679262174 100644
 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
diff --git a/patches/server/0397-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch b/patches/server/0397-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch
index 17fbed0b5..20ac68b24 100644
--- a/patches/server/0397-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch
+++ b/patches/server/0397-Mid-Tick-Chunk-Tasks-Speed-up-processing-of-chunk-lo.patch
@@ -147,7 +147,7 @@ index ce438760cbc92c08c079d06a8b97eaeda1018491..0115ffe84356468ddc254d8d5bdd719b
                  // Spigot Start
                  CrashReport crashreport;
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index c86457b8d2e99072840f8d4f693502bc23c98b35..41c148b05771438855d157ddd0c3ab21f0267c96 100644
+index 228ff4b52a017e8af987f60d84b7906c9be098f0..c9e4802251dd1582e467112d45a3bd5f31ac1be2 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 @@ -709,6 +709,7 @@ public class ServerChunkCache extends ChunkSource {
@@ -166,16 +166,15 @@ index c86457b8d2e99072840f8d4f693502bc23c98b35..41c148b05771438855d157ddd0c3ab21
          this.level.timings.doChunkUnload.stopTiming(); // Spigot
          this.level.getProfiler().pop();
          this.clearCache();
-@@ -772,7 +774,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -773,6 +775,7 @@ public class ServerChunkCache extends ChunkSource {
              };
              // Paper end
              this.level.timings.chunkTicks.startTiming(); // Paper
--            this.chunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping
-+            final int[] chunksTicked = {0}; this.chunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping
++            final int[] chunksTicked = {0}; // Paper
+             list.forEach((playerchunk) -> {
                  Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
  
-                 if (optional.isPresent()) {
-@@ -783,6 +785,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -784,6 +787,7 @@ public class ServerChunkCache extends ChunkSource {
                          chunk.setInhabitedTime(chunk.getInhabitedTime() + j);
                          if (flag1 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunk.getPos()) && !this.chunkMap.isOutsideOfRange(chunkcoordintpair, true)) { // Spigot
                              NaturalSpawner.spawnForChunk(this.level, chunk, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag2);
@@ -183,7 +182,7 @@ index c86457b8d2e99072840f8d4f693502bc23c98b35..41c148b05771438855d157ddd0c3ab21
                          }
  
                          // this.level.timings.doTickTiles.startTiming(); // Spigot // Paper
-@@ -800,7 +803,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -801,7 +805,7 @@ public class ServerChunkCache extends ChunkSource {
              }
  
              this.level.getProfiler().popPush("broadcast");
@@ -192,7 +191,7 @@ index c86457b8d2e99072840f8d4f693502bc23c98b35..41c148b05771438855d157ddd0c3ab21
                  Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left(); // CraftBukkit - decompile error
  
                  Objects.requireNonNull(playerchunk);
-@@ -964,6 +967,41 @@ public class ServerChunkCache extends ChunkSource {
+@@ -965,6 +969,41 @@ public class ServerChunkCache extends ChunkSource {
              super.doRunTask(task);
          }
  
diff --git a/patches/server/0414-Fix-Chunk-Post-Processing-deadlock-risk.patch b/patches/server/0414-Fix-Chunk-Post-Processing-deadlock-risk.patch
index d7f0b8221..8d65eeaef 100644
--- a/patches/server/0414-Fix-Chunk-Post-Processing-deadlock-risk.patch
+++ b/patches/server/0414-Fix-Chunk-Post-Processing-deadlock-risk.patch
@@ -46,10 +46,10 @@ index 6d810cdb538d078dbf7ccd2ef84a4be27eb1f3e7..aa9846c7d6b8499e01bf0ffeece6a940
  
          completablefuture1.thenAcceptAsync((either) -> {
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 7cc8a898b5a6349da91b34b8be6ec00707183589..3e7469032d38b9432bb36d37214524ca2df11098 100644
+index c9e4802251dd1582e467112d45a3bd5f31ac1be2..a50ad7a3268ea87be36f9718b1030d5ff56628b2 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -1014,6 +1014,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -1016,6 +1016,7 @@ public class ServerChunkCache extends ChunkSource {
                  return super.pollTask() || execChunkTask; // Paper
              }
          } finally {
diff --git a/patches/server/0433-Optimize-isOutsideRange-to-use-distance-maps.patch b/patches/server/0433-Optimize-isOutsideRange-to-use-distance-maps.patch
index 4740fb004..84a3ba938 100644
--- a/patches/server/0433-Optimize-isOutsideRange-to-use-distance-maps.patch
+++ b/patches/server/0433-Optimize-isOutsideRange-to-use-distance-maps.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Optimize isOutsideRange to use distance maps
 Use a distance map to find the players in range quickly
 
 diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java
-index bf641519ce1592737feac6eaf1d155d8fd126ec7..4569788773c8a9dc072d5ae5239c17c4f50e9ab0 100644
+index bbb94e8a5e3585701849e025b534a69a6e67949f..7223c6daf6f0eb959a5cab701096324a34b9c88a 100644
 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java
 +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java
 @@ -100,6 +100,18 @@ public class ChunkHolder {
@@ -291,7 +291,7 @@ index b49d380ef088aed3204ec71abc437c348ef004fa..577b391dcba1db712c1e2c83296e1c87
  
      public String getDebugStatus() {
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index 3e7469032d38b9432bb36d37214524ca2df11098..b85a85fbb12802c355e8f458077b4b124380813b 100644
+index a50ad7a3268ea87be36f9718b1030d5ff56628b2..7d8db5bc79fbff0832b87f4004f919d28bf44eca 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 @@ -735,6 +735,37 @@ public class ServerChunkCache extends ChunkSource {
@@ -332,10 +332,10 @@ index 3e7469032d38b9432bb36d37214524ca2df11098..b85a85fbb12802c355e8f458077b4b12
              this.level.getProfiler().push("pollingChunks");
              int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
              boolean flag2 = level.ticksPerAnimalSpawns != 0L && worlddata.getGameTime() % level.ticksPerAnimalSpawns == 0L; // CraftBukkit
-@@ -764,15 +795,7 @@ public class ServerChunkCache extends ChunkSource {
-             this.level.getProfiler().pop();
-             //List<PlayerChunk> list = Lists.newArrayList(this.playerChunkMap.f()); // Paper
-             //Collections.shuffle(list); // Paper
+@@ -765,15 +796,7 @@ public class ServerChunkCache extends ChunkSource {
+             List<ChunkHolder> list = Lists.newArrayList(this.chunkMap.visibleChunkMap.values()); // Paper
+ 
+             Collections.shuffle(list);
 -            //Paper start - call player naturally spawn event
 -            int chunkRange = level.spigotConfig.mobSpawnRange;
 -            chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange;
@@ -345,11 +345,11 @@ index 3e7469032d38b9432bb36d37214524ca2df11098..b85a85fbb12802c355e8f458077b4b12
 -                entityPlayer.playerNaturallySpawnedEvent.callEvent();
 -            };
 -            // Paper end
-+            // Paper - moved up
++            // Paper - moved natural spawn event up
              this.level.timings.chunkTicks.startTiming(); // Paper
-             final int[] chunksTicked = {0}; this.chunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping
-                 Optional<LevelChunk> optional = ((Either) playerchunk.getTickingChunkFuture().getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left();
-@@ -781,9 +804,9 @@ public class ServerChunkCache extends ChunkSource {
+             final int[] chunksTicked = {0}; // Paper
+             list.forEach((playerchunk) -> {
+@@ -783,9 +806,9 @@ public class ServerChunkCache extends ChunkSource {
                      LevelChunk chunk = (LevelChunk) optional.get();
                      ChunkPos chunkcoordintpair = chunk.getPos();
  
diff --git a/patches/server/0495-Optimize-Light-Engine.patch b/patches/server/0495-Optimize-Light-Engine.patch
index 7485ae7b3..f15d10729 100644
--- a/patches/server/0495-Optimize-Light-Engine.patch
+++ b/patches/server/0495-Optimize-Light-Engine.patch
@@ -25,7 +25,7 @@ Massive update to light to improve performance and chunk loading/generation.
 8) Fix NPE risk that crashes server in getting nibble data
 
 diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java
-index 90115430d7b068b1d92f92dee73214dd8dc0053e..a076829f21afaffd5c281f4c16ce0889a8c38a5e 100644
+index 52fc256c0d4de63ba94625218661db397b6e704e..e3c8e7692e8ca005e98d4158de0c961087dfb199 100644
 --- a/src/main/java/net/minecraft/server/level/ChunkHolder.java
 +++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java
 @@ -773,6 +773,7 @@ public class ChunkHolder {
@@ -126,10 +126,10 @@ index d3d6651eb51c852ed1d1eeb5689569d5308b246d..c2d36600a0081c78425868154bdcf7f4
                          m = Long.MAX_VALUE;
                      }
 diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-index f4f6124c20c31224312070c5e95be00a62e89897..a24790b798d733976db4de430164d648b739158b 100644
+index c63cbb6da6f734c3a93c63af2b28a6e588f22bf2..ddf28939d8037bcea456350093d077c503a3b66e 100644
 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
 +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
-@@ -1074,7 +1074,7 @@ public class ServerChunkCache extends ChunkSource {
+@@ -1076,7 +1076,7 @@ public class ServerChunkCache extends ChunkSource {
              if (ServerChunkCache.this.runDistanceManagerUpdates()) {
                  return true;
              } else {