geforkt von Mirrors/Paper
3496f2d7e4
Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: b850a822 SPIGOT-4526: Add conversion time API for Zombie & subclasses CraftBukkit Changes:38cf676e
SPIGOT-4534: CreatureSpawnEvent not being called for CHUNK_GENb446cb5d
SPIGOT-4527: Fix sponges with waterlogged blocks6ec8ea5c
SPIGOT-4526: Add conversion time API for Zombie & subclassesc64fe508
Mappings Updatea3c2ec03
Fix missing ServerListPingEvent call for legacy pings Spigot Changes: 1dc156ce Rebuild patches 140f654d Mappings Update
112 Zeilen
6.1 KiB
Diff
112 Zeilen
6.1 KiB
Diff
From 7b96e2cf79f6c8f5fd688ae20700b1398670593b Mon Sep 17 00:00:00 2001
|
|
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
|
|
index 058cd8cc8..276dd98fd 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -249,4 +249,10 @@ public class PaperWorldConfig {
|
|
grassUpdateRate = Math.max(0, getInt("grass-spread-tick-rate", grassUpdateRate));
|
|
log("Grass Spread Tick Rate: " + grassUpdateRate);
|
|
}
|
|
+
|
|
+ public short keepLoadedRange;
|
|
+ private void keepLoadedRange() {
|
|
+ keepLoadedRange = (short) (getInt("keep-spawn-loaded-range", Math.min(spigotConfig.viewDistance, 8)) * 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 eef8d2b5a..cc98b745b 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -490,13 +490,21 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
ArrayList arraylist = Lists.newArrayList();
|
|
Set set = Sets.newConcurrentHashSet();
|
|
|
|
- for (int i = -192; i <= 192 && this.isRunning(); i += 16) {
|
|
- for (int j = -192; j <= 192 && this.isRunning(); j += 16) {
|
|
+ // Paper start
|
|
+ short radius = worldserver.paperConfig.keepLoadedRange;
|
|
+ for (int i = -radius; i <= radius && this.isRunning(); i += 16) {
|
|
+ for (int j = -radius; j <= radius && this.isRunning(); j += 16) {
|
|
+ // Paper end
|
|
arraylist.add(new ChunkCoordIntPair(blockposition.getX() + i >> 4, blockposition.getZ() + j >> 4));
|
|
}
|
|
+ } // Paper
|
|
+ if (this.isRunning()) { // Paper
|
|
+ int expected = arraylist.size(); // Paper
|
|
+
|
|
|
|
CompletableFuture completablefuture = worldserver.getChunkProvider().a((Iterable) arraylist, (chunk) -> {
|
|
set.add(chunk.getPos());
|
|
+ if (set.size() < expected && set.size() % 25 == 0) this.a(new ChatMessage("menu.preparingSpawn", new Object[0]), set.size() * 100 / expected); // Paper
|
|
});
|
|
|
|
while (!completablefuture.isDone()) {
|
|
@@ -511,11 +519,11 @@ public abstract class MinecraftServer implements IAsyncTaskHandler, IMojangStati
|
|
|
|
throw new RuntimeException(executionexception.getCause());
|
|
} catch (TimeoutException timeoutexception) {
|
|
- this.a(new ChatMessage("menu.preparingSpawn", new Object[0]), set.size() * 100 / 625);
|
|
+ this.a(new ChatMessage("menu.preparingSpawn", new Object[0]), set.size() * 100 / expected); // Paper
|
|
}
|
|
}
|
|
|
|
- this.a(new ChatMessage("menu.preparingSpawn", new Object[0]), set.size() * 100 / 625);
|
|
+ this.a(new ChatMessage("menu.preparingSpawn", new Object[0]), set.size() * 100 / expected); // Paper
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index ceb4102af..02a62d6d7 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -2852,8 +2852,9 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
|
|
int k = i * 16 + 8 - blockposition.getX();
|
|
int l = j * 16 + 8 - blockposition.getZ();
|
|
boolean flag = true;
|
|
+ short keepLoadedRange = paperConfig.keepLoadedRange; // Paper
|
|
|
|
- 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
|
|
}
|
|
|
|
public LongSet ag() {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index acd54067e..c655d51ac 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -1004,7 +1004,7 @@ public final class CraftServer implements Server {
|
|
System.out.println("Preparing start region for level " + (console.worldServer.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
|
|
index 1676fcc85..b19eef1b1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -1404,8 +1404,9 @@ public class CraftWorld implements World {
|
|
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 {
|
|
--
|
|
2.20.0
|
|
|