diff options
author | Jake Potrebic <[email protected]> | 2024-04-27 15:50:33 -0700 |
---|---|---|
committer | Jake Potrebic <[email protected]> | 2024-04-27 15:50:38 -0700 |
commit | d02bb811de6f9d7e42001137b93d6a6f88359ab6 (patch) | |
tree | a396cbb1f0ada45b98703f8125f06f17334dc080 /removed-patches-1-20-5 | |
parent | dd571d89f2202bda719a40fd15f92cc754b6ade1 (diff) | |
download | Paper-d02bb811de6f9d7e42001137b93d6a6f88359ab6.tar.gz Paper-d02bb811de6f9d7e42001137b93d6a6f88359ab6.zip |
proper migration to gamerules for keep spawn loaded distance
Diffstat (limited to 'removed-patches-1-20-5')
-rw-r--r-- | removed-patches-1-20-5/0310-Configurable-Keep-Spawn-Loaded-range-per-world.patch | 220 |
1 files changed, 0 insertions, 220 deletions
diff --git a/removed-patches-1-20-5/0310-Configurable-Keep-Spawn-Loaded-range-per-world.patch b/removed-patches-1-20-5/0310-Configurable-Keep-Spawn-Loaded-range-per-world.patch deleted file mode 100644 index 4d9cba2dd0..0000000000 --- a/removed-patches-1-20-5/0310-Configurable-Keep-Spawn-Loaded-range-per-world.patch +++ /dev/null @@ -1,220 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar <[email protected]> -Date: Sat, 13 Sep 2014 23:14:43 -0400 -Subject: [PATCH] Configurable Keep Spawn Loaded range per world - -This lets you disable it for some worlds and lower it for others. - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 176378ddbf21d758694e8e624cc6c555c78e0fab..6342b7a3c4ccad528f026384da64e973e630f030 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -768,30 +768,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa - - // CraftBukkit start - public void prepareLevels(ChunkProgressListener worldloadlistener, ServerLevel worldserver) { -+ ServerChunkCache chunkproviderserver = worldserver.getChunkSource(); // Paper - Configurable Keep Spawn Loaded range per world - // WorldServer worldserver = this.overworld(); - this.forceTicks = true; - // CraftBukkit end -+ if (worldserver.getWorld().getKeepSpawnInMemory()) { // Paper - Configurable Keep Spawn Loaded range per world - - MinecraftServer.LOGGER.info("Preparing start region for dimension {}", worldserver.dimension().location()); - BlockPos blockposition = worldserver.getSharedSpawnPos(); - - worldloadlistener.updateSpawnPos(new ChunkPos(blockposition)); -- ServerChunkCache chunkproviderserver = worldserver.getChunkSource(); -+ //ChunkProviderServer chunkproviderserver = worldserver.getChunkProvider(); // Paper - Configurable Keep Spawn Loaded range per world; move up - - this.nextTickTimeNanos = Util.getNanos(); -- // CraftBukkit start -- if (worldserver.getWorld().getKeepSpawnInMemory()) { -- chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(blockposition), 11, Unit.INSTANCE); -+ // Paper start - Configurable Keep Spawn Loaded range per world -+ int radiusBlocks = worldserver.paperConfig().spawn.keepSpawnLoadedRange * 16; -+ int radiusChunks = radiusBlocks / 16 + ((radiusBlocks & 15) != 0 ? 1 : 0); -+ int totalChunks = ((radiusChunks) * 2 + 1); -+ totalChunks *= totalChunks; -+ worldloadlistener.setChunkRadius(radiusBlocks / 16); - -- while (chunkproviderserver.getTickingGenerated() != 441) { -- // this.nextTickTimeNanos = SystemUtils.getNanos() + MinecraftServer.PREPARE_LEVELS_DEFAULT_DELAY_NANOS; -- this.executeModerately(); -- } -- } -+ worldserver.addTicketsForSpawn(radiusBlocks, blockposition); -+ // Paper end - Configurable Keep Spawn Loaded range per world - - // this.nextTickTimeNanos = SystemUtils.getNanos() + MinecraftServer.PREPARE_LEVELS_DEFAULT_DELAY_NANOS; - this.executeModerately(); - // Iterator iterator = this.levels.values().iterator(); -+ } // Paper - Configurable Keep Spawn Loaded range per world - - if (true) { - ServerLevel worldserver1 = worldserver; -@@ -814,7 +817,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa - // this.nextTickTimeNanos = SystemUtils.getNanos() + MinecraftServer.PREPARE_LEVELS_DEFAULT_DELAY_NANOS; - this.executeModerately(); - // CraftBukkit end -- worldloadlistener.stop(); -+ if (worldserver.getWorld().getKeepSpawnInMemory()) worldloadlistener.stop(); // Paper - Configurable Keep Spawn Loaded range per world - // CraftBukkit start - // this.updateMobSpawningFlags(); - worldserver.setSpawnSettings(this.isSpawningMonsters(), this.isSpawningAnimals()); -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 57f129651778d6c20c695bf7b3a8b4d40c402a20..20de3be232ccc7ec7bbc3c6aee9acf66fd396af1 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1640,12 +1640,84 @@ public class ServerLevel extends Level implements WorldGenLevel { - return ((MapIndex) this.getServer().overworld().getDataStorage().computeIfAbsent(MapIndex.factory(), "idcounts")).getFreeAuxValueForMap(); - } - -+ // Paper start - Configurable Keep Spawn Loaded range per world -+ public void addTicketsForSpawn(int radiusInBlocks, BlockPos spawn) { -+ // In order to respect vanilla behavior, which is ensuring everything but the spawn border can tick, we add tickets -+ // with level 31 for the non-border spawn chunks -+ ServerChunkCache chunkproviderserver = this.getChunkSource(); -+ int tickRadius = radiusInBlocks - 16; -+ -+ // add ticking chunks -+ for (int x = -tickRadius; x <= tickRadius; x += 16) { -+ for (int z = -tickRadius; z <= tickRadius; z += 16) { -+ // radius of 2 will have the current chunk be level 31 -+ chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, z)), 2, Unit.INSTANCE); -+ } -+ } -+ -+ // add border chunks -+ -+ // add border along x axis (including corner chunks) -+ for (int x = -radiusInBlocks; x <= radiusInBlocks; x += 16) { -+ // top -+ chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, radiusInBlocks)), 1, Unit.INSTANCE); // level 32 -+ // bottom -+ chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, -radiusInBlocks)), 1, Unit.INSTANCE); // level 32 -+ } -+ -+ // add border along z axis (excluding corner chunks) -+ for (int z = -radiusInBlocks + 16; z < radiusInBlocks; z += 16) { -+ // right -+ chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(spawn.offset(radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32 -+ // left -+ chunkproviderserver.addRegionTicket(TicketType.START, new ChunkPos(spawn.offset(-radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32 -+ } -+ } -+ public void removeTicketsForSpawn(int radiusInBlocks, BlockPos spawn) { -+ // In order to respect vanilla behavior, which is ensuring everything but the spawn border can tick, we added tickets -+ // with level 31 for the non-border spawn chunks -+ ServerChunkCache chunkproviderserver = this.getChunkSource(); -+ int tickRadius = radiusInBlocks - 16; -+ -+ // remove ticking chunks -+ for (int x = -tickRadius; x <= tickRadius; x += 16) { -+ for (int z = -tickRadius; z <= tickRadius; z += 16) { -+ // radius of 2 will have the current chunk be level 31 -+ chunkproviderserver.removeRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, z)), 2, Unit.INSTANCE); -+ } -+ } -+ -+ // remove border chunks -+ -+ // remove border along x axis (including corner chunks) -+ for (int x = -radiusInBlocks; x <= radiusInBlocks; x += 16) { -+ // top -+ chunkproviderserver.removeRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, radiusInBlocks)), 1, Unit.INSTANCE); // level 32 -+ // bottom -+ chunkproviderserver.removeRegionTicket(TicketType.START, new ChunkPos(spawn.offset(x, 0, -radiusInBlocks)), 1, Unit.INSTANCE); // level 32 -+ } -+ -+ // remove border along z axis (excluding corner chunks) -+ for (int z = -radiusInBlocks + 16; z < radiusInBlocks; z += 16) { -+ // right -+ chunkproviderserver.removeRegionTicket(TicketType.START, new ChunkPos(spawn.offset(radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32 -+ // left -+ chunkproviderserver.removeRegionTicket(TicketType.START, new ChunkPos(spawn.offset(-radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32 -+ } -+ } -+ // Paper end - Configurable Keep Spawn Loaded range per world -+ - public void setDefaultSpawnPos(BlockPos pos, float angle) { -- ChunkPos chunkcoordintpair = new ChunkPos(new BlockPos(this.levelData.getXSpawn(), 0, this.levelData.getZSpawn())); -+ // Paper start - Configurable Keep Spawn Loaded range per world -+ BlockPos prevSpawn = this.getSharedSpawnPos(); -+ //ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(new BlockPosition(this.worldData.a(), 0, this.worldData.c())); - - this.levelData.setSpawn(pos, angle); -- this.getChunkSource().removeRegionTicket(TicketType.START, chunkcoordintpair, 11, Unit.INSTANCE); -- this.getChunkSource().addRegionTicket(TicketType.START, new ChunkPos(pos), 11, Unit.INSTANCE); -+ if (this.keepSpawnInMemory) { -+ // if this keepSpawnInMemory is false a plugin has already removed our tickets, do not re-add -+ this.removeTicketsForSpawn(this.paperConfig().spawn.keepSpawnLoadedRange * 16, prevSpawn); -+ this.addTicketsForSpawn(this.paperConfig().spawn.keepSpawnLoadedRange * 16, pos); -+ } - this.getServer().getPlayerList().broadcastAll(new ClientboundSetDefaultSpawnPositionPacket(pos, angle)); - } - -diff --git a/src/main/java/net/minecraft/server/level/progress/ChunkProgressListener.java b/src/main/java/net/minecraft/server/level/progress/ChunkProgressListener.java -index 1b565b2809c2d367e21971c5154f35c9763995e6..4792eaa30464f4c4ca7f2d6cf20f734beed81f23 100644 ---- a/src/main/java/net/minecraft/server/level/progress/ChunkProgressListener.java -+++ b/src/main/java/net/minecraft/server/level/progress/ChunkProgressListener.java -@@ -12,4 +12,6 @@ public interface ChunkProgressListener { - void start(); - - void stop(); -+ -+ void setChunkRadius(int radius); // Paper - Configurable Keep Spawn Loaded range per world - } -diff --git a/src/main/java/net/minecraft/server/level/progress/LoggerChunkProgressListener.java b/src/main/java/net/minecraft/server/level/progress/LoggerChunkProgressListener.java -index c9667df492e5681bf933a7f8878b0fdb324afed3..09d0c702132d4cc52ce36712aed11d30efe89f54 100644 ---- a/src/main/java/net/minecraft/server/level/progress/LoggerChunkProgressListener.java -+++ b/src/main/java/net/minecraft/server/level/progress/LoggerChunkProgressListener.java -@@ -11,12 +11,19 @@ import org.slf4j.Logger; - - public class LoggerChunkProgressListener implements ChunkProgressListener { - private static final Logger LOGGER = LogUtils.getLogger(); -- private final int maxCount; -+ private int maxCount; // Paper - remove final - private int count; - private long startTime; - private long nextTickTime = Long.MAX_VALUE; - - public LoggerChunkProgressListener(int radius) { -+ // Paper start - Configurable Keep Spawn Loaded range per world -+ this.setChunkRadius(radius); // Move to method -+ } -+ -+ @Override -+ public void setChunkRadius(int radius) { -+ // Paper end - Configurable Keep Spawn Loaded range per world - int i = radius * 2 + 1; - this.maxCount = i * i; - } -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 4001a8c13ceed6037174bb81fd06d9758fa0336c..b39721208f8b66c1478e89553a592070cf90fb97 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1411,15 +1411,21 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setKeepSpawnInMemory(boolean keepLoaded) { -+ // Paper start - Configurable spawn radius -+ if (keepLoaded == this.world.keepSpawnInMemory) { -+ // do nothing, nothing has changed -+ return; -+ } - this.world.keepSpawnInMemory = keepLoaded; - // Grab the worlds spawn chunk - BlockPos chunkcoordinates = this.world.getSharedSpawnPos(); - if (keepLoaded) { -- this.world.getChunkSource().addRegionTicket(TicketType.START, new ChunkPos(chunkcoordinates), 11, Unit.INSTANCE); -+ this.world.addTicketsForSpawn(this.world.paperConfig().spawn.keepSpawnLoadedRange * 16, chunkcoordinates); - } else { -- // TODO: doesn't work well if spawn changed.... -- this.world.getChunkSource().removeRegionTicket(TicketType.START, new ChunkPos(chunkcoordinates), 11, Unit.INSTANCE); -+ // TODO: doesn't work well if spawn changed.... // Paper - resolved -+ this.world.removeTicketsForSpawn(this.world.paperConfig().spawn.keepSpawnLoadedRange * 16, chunkcoordinates); - } -+ // Paper end - } - - @Override |