2017-09-18 13:04:01 +02:00
From 7be59ddc090a6a8cf93f69dfbaa026997895c5a0 Mon Sep 17 00:00:00 2001
2016-04-03 23:34:15 +02:00
From: Aikar <aikar@aikar.co>
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
2017-07-27 03:12:40 +02:00
index 74a49a5fb..3a942c763 100644
2016-04-03 23:34:15 +02:00
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
2017-03-25 04:18:58 +01:00
@@ -284,4 +284,10 @@ public class PaperWorldConfig {
2016-04-03 23:34:15 +02:00
grassUpdateRate = Math.max(0, getInt("grass-spread-tick-rate", grassUpdateRate));
log("Grass Spread Tick Rate: " + grassUpdateRate);
}
+
+ public short keepLoadedRange;
+ private void keepLoadedRange() {
2016-04-04 05:08:13 +02:00
+ keepLoadedRange = (short) (getInt("keep-spawn-loaded-range", Math.min(spigotConfig.viewDistance, 8)) * 16);
2016-04-03 23:34:15 +02:00
+ 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
2017-09-18 13:04:01 +02:00
index 4e8ce79ff..2300ee10b 100644
2016-04-03 23:34:15 +02:00
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
2017-08-03 16:36:06 +02:00
@@ -357,8 +357,11 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs
2016-11-17 03:23:38 +01:00
long j = aw();
2016-04-03 23:34:15 +02:00
i = 0;
- for (int k = -192; k <= 192 && this.isRunning(); k += 16) {
- for (int l = -192; l <= 192 && this.isRunning(); l += 16) {
2016-11-17 03:23:38 +01:00
+ // Paper start
+ short radius = worldserver.paperConfig.keepLoadedRange;
+ for (int k = -radius; k <= radius && this.isRunning(); k += 16) {
+ for (int l = -radius; l <= radius && this.isRunning(); l += 16) {
+ // Paper end
long i1 = aw();
2016-04-03 23:34:15 +02:00
if (i1 - j > 1000L) {
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
2017-09-18 13:04:01 +02:00
index f7987bb7b..641a1d7dd 100644
2016-04-03 23:34:15 +02:00
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
2017-09-18 13:04:01 +02:00
@@ -3202,8 +3202,9 @@ public abstract class World implements IBlockAccess {
2016-04-03 23:34:15 +02:00
int k = i * 16 + 8 - blockposition.getX();
int l = j * 16 + 8 - blockposition.getZ();
2016-06-09 05:57:14 +02:00
boolean flag = true;
+ short keepLoadedRange = paperConfig.keepLoadedRange; // Paper
2016-04-03 23:34:15 +02:00
2016-06-09 05:57:14 +02:00
- return k >= -128 && k <= 128 && l >= -128 && l <= 128 && this.keepSpawnInMemory; // CraftBukkit - Added 'this.keepSpawnInMemory'
+ return k >= -keepLoadedRange && k <= keepLoadedRange && l >= -keepLoadedRange && l <= keepLoadedRange && this.keepSpawnInMemory; // CraftBukkit - Added 'this.keepSpawnInMemory' // Paper - Re-add range var
2016-04-03 23:34:15 +02:00
}
2016-06-09 05:57:14 +02:00
public void a(Packet<?> packet) {
2016-04-03 23:34:15 +02:00
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
2017-09-07 04:59:08 +02:00
index d0ec4e0bf..5e37b54ae 100644
2016-04-03 23:34:15 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
2017-09-07 04:59:08 +02:00
@@ -964,7 +964,7 @@ public final class CraftServer implements Server {
2016-04-03 23:34:15 +02:00
System.out.print("Preparing start region for level " + (console.worlds.size() - 1) + " (Seed: " + internal.getSeed() + ")");
if (internal.getWorld().getKeepSpawnInMemory()) {
- short short1 = 196;
+ short short1 = internal.paperConfig.keepLoadedRange; // Paper
long i = System.currentTimeMillis();
for (int j = -short1; j <= short1; j += 16) {
for (int k = -short1; k <= short1; k += 16) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
2017-07-27 03:12:40 +02:00
index 843a3415f..24b4a7ea7 100644
2016-04-03 23:34:15 +02:00
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
2017-06-09 14:29:44 +02:00
@@ -1275,8 +1275,9 @@ public class CraftWorld implements World {
2016-04-03 23:34:15 +02:00
int chunkCoordX = chunkcoordinates.getX() >> 4;
int chunkCoordZ = chunkcoordinates.getZ() >> 4;
// Cycle through the 25x25 Chunks around it to load/unload the chunks.
- for (int x = -12; x <= 12; x++) {
- for (int z = -12; z <= 12; z++) {
+ int radius = world.paperConfig.keepLoadedRange / 16; // Paper
+ for (int x = -radius; x <= radius; x++) { // Paper
+ for (int z = -radius; z <= radius; z++) { // Paper
if (keepLoaded) {
loadChunk(chunkCoordX + x, chunkCoordZ + z);
} else {
--
2017-09-18 13:04:01 +02:00
2.14.1
2016-04-03 23:34:15 +02:00