aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch
diff options
context:
space:
mode:
authorShane Freeder <[email protected]>2020-11-09 00:09:37 +0000
committerShane Freeder <[email protected]>2020-11-09 00:09:37 +0000
commit611a0ee52def85f2cbf0b5cbc6a9d19599baae7e (patch)
treee99910b56b5ff873df64e9b51d850c130e75d968 /Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch
parente38eceb42a106568e4db5830b936e550dbe509f5 (diff)
downloadPaper-611a0ee52def85f2cbf0b5cbc6a9d19599baae7e.tar.gz
Paper-611a0ee52def85f2cbf0b5cbc6a9d19599baae7e.zip
Revert "Updated Upstream (Spigot) (#4745)"
This reverts commit e38eceb42a106568e4db5830b936e550dbe509f5.
Diffstat (limited to 'Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch')
-rw-r--r--Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch229
1 files changed, 0 insertions, 229 deletions
diff --git a/Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch b/Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch
deleted file mode 100644
index 6cfe821af9..0000000000
--- a/Spigot-Server-Patches/0352-Configurable-Keep-Spawn-Loaded-range-per-world.patch
+++ /dev/null
@@ -1,229 +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/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-index 21910dfd1a533e923a8a73e92fea25685a07b445..44811683cfe47adbdce6c8bd627bdbeb13ce114c 100644
---- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
-@@ -433,4 +433,10 @@ public class PaperWorldConfig {
- break;
- }
- }
-+
-+ public short keepLoadedRange;
-+ private void keepLoadedRange() {
-+ keepLoadedRange = (short) (getInt("keep-spawn-loaded-range", Math.min(spigotConfig.viewDistance, 10)) * 16);
-+ log( "Keep Spawn Loaded Range: " + (keepLoadedRange/16));
-+ }
- }
-diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
-index 44991803a489a42842f79ce51bdd53a73ef35d71..12866eec621d9ae8801d50bdda13e757f303010e 100644
---- a/src/main/java/net/minecraft/server/MinecraftServer.java
-+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
-@@ -605,6 +605,14 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
- this.forceTicks = true;
- // CraftBukkit end
-
-+ // Paper start - configurable spawn reason
-+ int radiusBlocks = worldserver.paperConfig.keepLoadedRange;
-+ int radiusChunks = radiusBlocks / 16 + ((radiusBlocks & 15) != 0 ? 1 : 0);
-+ int totalChunks = ((radiusChunks) * 2 + 1);
-+ totalChunks *= totalChunks;
-+ worldloadlistener.setChunkRadius(radiusBlocks / 16);
-+ // Paper end
-+
- MinecraftServer.LOGGER.info("Preparing start region for dimension {}", worldserver.getDimensionKey().a());
- BlockPosition blockposition = worldserver.getSpawn();
-
-@@ -613,14 +621,12 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
-
- chunkproviderserver.getLightEngine().a(500);
- this.nextTick = SystemUtils.getMonotonicMillis();
-- chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(blockposition), 11, Unit.INSTANCE);
--
-- while (chunkproviderserver.b() != 441) {
-- // CraftBukkit start
-- // this.nextTick = SystemUtils.getMonotonicMillis() + 10L;
-- this.executeModerately();
-- // CraftBukkit end
-+ // Paper start - Configurable spawn radius
-+ if (worldserver.keepSpawnInMemory) {
-+ worldserver.addTicketsForSpawn(radiusBlocks, blockposition);
- }
-+ // Paper end
-+ LOGGER.info("Loaded " + chunkproviderserver.b() + " spawn chunks for world " + worldserver.getWorld().getName()); // Paper
-
- // 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 d6762d3853b55b639047f455351150a1cbc9399a..7b6f5b2da0a76661a0e047ee7002aa07cdd4a8b1 100644
---- a/src/main/java/net/minecraft/server/WorldLoadListener.java
-+++ b/src/main/java/net/minecraft/server/WorldLoadListener.java
-@@ -9,4 +9,6 @@ public interface WorldLoadListener {
- void a(ChunkCoordIntPair chunkcoordintpair, @Nullable ChunkStatus chunkstatus);
-
- void b();
-+
-+ 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 3868572aed50c8bffd93727a139a3fbb8dc19688..ae77805f71c6c574d92f39c51b1e48f2138e9ab6 100644
---- a/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java
-+++ b/src/main/java/net/minecraft/server/WorldLoadListenerLogger.java
-@@ -7,16 +7,24 @@ import org.apache.logging.log4j.Logger;
- public class WorldLoadListenerLogger implements WorldLoadListener {
-
- private static final Logger LOGGER = LogManager.getLogger();
-- private final int b;
-+ private int b; // Paper - remove final
- private int c;
- private long d;
- private long e = Long.MAX_VALUE;
-
- public WorldLoadListenerLogger(int i) {
-- int j = i * 2 + 1;
-+ // Paper start - Allow changing radius later for configurable spawn patch
-+ this.setChunkRadius(i); // Move to method
-+ }
-+
-+ @Override
-+ public void setChunkRadius(int radius) {
-+ // Paper - copied from above
-+ int j = radius * 2 + 1;
-
- this.b = j * j;
- }
-+ // Paper end
-
- @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 83ec3c34bc2b063fe3ae7ba48e35b83522d9866b..b2ef67642e2e0d0573f4312e88ba583352a743a6 100644
---- a/src/main/java/net/minecraft/server/WorldServer.java
-+++ b/src/main/java/net/minecraft/server/WorldServer.java
-@@ -1550,12 +1550,88 @@ public class WorldServer extends World implements GeneratorAccessSeed {
- return ((PersistentIdCounts) this.getMinecraftServer().E().getWorldPersistentData().a(PersistentIdCounts::new, "idcounts")).a();
- }
-
-+ // Paper start - helper function for configurable spawn radius
-+ public void addTicketsForSpawn(int radiusInBlocks, BlockPosition 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
-+ ChunkProviderServer chunkproviderserver = this.getChunkProvider();
-+ 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.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(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.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(x, 0, radiusInBlocks)), 1, Unit.INSTANCE); // level 32
-+ // bottom
-+ chunkproviderserver.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(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.addTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32
-+ // 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
-+ // with level 31 for the non-border spawn chunks
-+ ChunkProviderServer chunkproviderserver = this.getChunkProvider();
-+ 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.removeTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(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.removeTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(x, 0, radiusInBlocks)), 1, Unit.INSTANCE); // level 32
-+ // bottom
-+ chunkproviderserver.removeTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(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.removeTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32
-+ // left
-+ chunkproviderserver.removeTicket(TicketType.START, new ChunkCoordIntPair(spawn.add(-radiusInBlocks, 0, z)), 1, Unit.INSTANCE); // level 32
-+ }
-+ }
-+ // Paper end
-+
- public void a(BlockPosition blockposition, float f) {
-- ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(new BlockPosition(this.worldData.a(), 0, this.worldData.c()));
-+ // Paper - configurable spawn radius
-+ BlockPosition prevSpawn = this.getSpawn();
-+ //ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(new BlockPosition(this.worldData.a(), 0, this.worldData.c()));
-
- this.worldData.setSpawn(blockposition, f);
-- this.getChunkProvider().removeTicket(TicketType.START, chunkcoordintpair, 11, Unit.INSTANCE);
-- this.getChunkProvider().addTicket(TicketType.START, new ChunkCoordIntPair(blockposition), 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.keepLoadedRange, prevSpawn);
-+ this.addTicketsForSpawn(this.paperConfig.keepLoadedRange, blockposition);
-+ }
- this.getMinecraftServer().getPlayerList().sendAll(new PacketPlayOutSpawnPosition(blockposition, f));
- }
-
-diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-index eb4dd0708930b0c5388a88c193d1c17978e42f48..07657d884f45959a69998ec510bf14e940e62056 100644
---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
-@@ -1937,15 +1937,21 @@ public class CraftWorld implements World {
-
- @Override
- public void setKeepSpawnInMemory(boolean keepLoaded) {
-+ // Paper start - Configurable spawn radius
-+ if (keepLoaded == world.keepSpawnInMemory) {
-+ // do nothing, nothing has changed
-+ return;
-+ }
- world.keepSpawnInMemory = keepLoaded;
- // Grab the worlds spawn chunk
-- BlockPosition chunkcoordinates = this.world.getSpawn();
-+ BlockPosition prevSpawn = this.world.getSpawn();
- if (keepLoaded) {
-- world.getChunkProvider().addTicket(TicketType.START, new ChunkCoordIntPair(chunkcoordinates), 11, Unit.INSTANCE);
-+ world.addTicketsForSpawn(world.paperConfig.keepLoadedRange, prevSpawn);
- } else {
-- // TODO: doesn't work well if spawn changed....
-- world.getChunkProvider().removeTicket(TicketType.START, new ChunkCoordIntPair(chunkcoordinates), 11, Unit.INSTANCE);
-+ // TODO: doesn't work well if spawn changed.... // paper - resolved
-+ world.removeTicketsForSpawn(world.paperConfig.keepLoadedRange, prevSpawn);
- }
-+ // Paper end
- }
-
- @Override