Load Spawn Chunks Asynchronously and Spiral Out
Ensures absolute center is first in priority Speeds up server startup
This commit is contained in:
@@ -6,7 +6,7 @@ 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/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 572679e4d..071e5e7f7 100644
|
||||
index 572679e4d1..071e5e7f72 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
@@ -21,7 +21,7 @@ index 572679e4d..071e5e7f7 100644
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 3ede5ce2a..eaa26e1a5 100644
|
||||
index 91af256323..e9841ef58d 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -53,18 +53,6 @@ index 3ede5ce2a..eaa26e1a5 100644
|
||||
+ // Paper start - Configurable spawn radius
|
||||
+ if (worldserver.keepSpawnInMemory) {
|
||||
+ worldserver.addTicketsForSpawn(radiusBlocks, blockposition);
|
||||
+
|
||||
+ // we use a getChunk loop since we don't need to worry about what some plugin does to keepSpawnInMemory
|
||||
+ // or the spawn radius while we are loading
|
||||
+ // just keep in mind too that executeModerately will handle player network queue (i.e commands)
|
||||
+ int centerX = blockposition.getX() >> 4;
|
||||
+ int centerZ = blockposition.getZ() >> 4;
|
||||
+ radiusChunks += 2; // we need to load radius +2 to get the chunks in ticking level
|
||||
+ for (int xoff = -radiusChunks; xoff <= radiusChunks; ++xoff) {
|
||||
+ for (int zoff = -radiusChunks; zoff <= radiusChunks; ++zoff) {
|
||||
+ worldserver.getChunkAt(centerX + xoff, centerZ + zoff);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
+ // Paper end
|
||||
+ LOGGER.info("Loaded " + chunkproviderserver.b() + " spawn chunks for world " + worldserver.getWorldData().getName()); // Paper
|
||||
@@ -72,7 +60,7 @@ index 3ede5ce2a..eaa26e1a5 100644
|
||||
// CraftBukkit start
|
||||
// this.nextTick = SystemUtils.getMonotonicMillis() + 10L;
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldLoadListener.java b/src/main/java/net/minecraft/server/WorldLoadListener.java
|
||||
index d6762d385..7b6f5b2da 100644
|
||||
index d6762d3853..7b6f5b2da0 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldLoadListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldLoadListener.java
|
||||
@@ -0,0 +0,0 @@ public interface WorldLoadListener {
|
||||
@@ -83,7 +71,7 @@ index d6762d385..7b6f5b2da 100644
|
||||
+ void setChunkRadius(int radius); // Paper - allow changing chunk radius
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java b/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java
|
||||
index 3868572ae..ae77805f7 100644
|
||||
index 3868572aed..ae77805f71 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
@@ -114,7 +102,7 @@ index 3868572ae..ae77805f7 100644
|
||||
@Override
|
||||
public void a(ChunkCoordIntPair chunkcoordintpair) {
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index f9ee9afe3..f9c14b9a9 100644
|
||||
index f9ee9afe3a..389c9d03a1 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World {
|
||||
@@ -153,6 +141,10 @@ index f9ee9afe3..f9c14b9a9 100644
|
||||
+ // left
|
||||
+ chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(-radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32
|
||||
+ }
|
||||
+
|
||||
+ MCUtil.getSpiralOutChunks(spawn, radiusInBlocks >> 4).forEach(pair -> {
|
||||
+ getChunkProvider().getChunkAtMainThread(pair.x, pair.z);
|
||||
+ });
|
||||
+ }
|
||||
+ public void removeTicketsForSpawn(int radiusInBlocks, BlockPosition spawn) {
|
||||
+ // In order to respect vanilla behavior, which is ensuring everything but the spawn border can tick, we added tickets
|
||||
@@ -207,7 +199,7 @@ index f9ee9afe3..f9c14b9a9 100644
|
||||
|
||||
public LongSet getForceLoadedChunks() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 8b6d22e71..661a89c5d 100644
|
||||
index 8b6d22e710..661a89c5d6 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
|
||||
Reference in New Issue
Block a user