mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-24 19:46:21 +01:00
Implemented per world setting to keep the spawn in memory or not.
This commit is contained in:
parent
6ae23e3f03
commit
4117d6b65e
@ -49,7 +49,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
|||||||
int l = j * 16 + 8 - chunkcoordinates.z;
|
int l = j * 16 + 8 - chunkcoordinates.z;
|
||||||
short short1 = 128;
|
short short1 = 128;
|
||||||
|
|
||||||
if (k < -short1 || k > short1 || l < -short1 || l > short1) {
|
if (k < -short1 || k > short1 || l < -short1 || l > short1 || !(this.world.keepSpawnInMemory)) { // CraftBukkit - added 'this.world.keepSpawnInMemory'
|
||||||
this.unloadQueue.add(i, j); // CraftBukkit
|
this.unloadQueue.add(i, j); // CraftBukkit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,8 +232,9 @@ public class MinecraftServer implements Runnable, ICommandListener {
|
|||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
for (int l = 0; l < this.worlds.size(); ++l) {
|
for (int l = 0; l < this.worlds.size(); ++l) {
|
||||||
// if (l == 0 || this.propertyManager.getBoolean("allow-nether", true)) {
|
// if (l == 0 || this.propertyManager.getBoolean("allow-nether", true)) {
|
||||||
WorldServer worldserver = this.worlds.get(l);
|
WorldServer worldserver = this.worlds.get(l);
|
||||||
log.info("Preparing start region for level " + l + " (Seed: " + worldserver.getSeed() + ")");
|
log.info("Preparing start region for level " + l + " (Seed: " + worldserver.getSeed() + ")");
|
||||||
|
if (worldserver.getWorld().getKeepSpawnInMemory()) {
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
|
ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
|
||||||
|
|
||||||
@ -260,7 +261,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// } // CraftBukkit
|
} // CraftBukkit
|
||||||
}
|
}
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
|
@ -83,6 +83,7 @@ public class World implements IBlockAccess {
|
|||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
private final CraftWorld world;
|
private final CraftWorld world;
|
||||||
public boolean pvpMode;
|
public boolean pvpMode;
|
||||||
|
public boolean keepSpawnInMemory = true;
|
||||||
public ChunkGenerator generator;
|
public ChunkGenerator generator;
|
||||||
Chunk lastChunkAccessed;
|
Chunk lastChunkAccessed;
|
||||||
int lastXAccessed = Integer.MIN_VALUE;
|
int lastXAccessed = Integer.MIN_VALUE;
|
||||||
|
@ -485,29 +485,31 @@ public final class CraftServer implements Server {
|
|||||||
pluginManager.callEvent(new WorldInitEvent(internal.getWorld()));
|
pluginManager.callEvent(new WorldInitEvent(internal.getWorld()));
|
||||||
System.out.print("Preparing start region for level " + (console.worlds.size() -1) + " (Seed: " + internal.getSeed() + ")");
|
System.out.print("Preparing start region for level " + (console.worlds.size() -1) + " (Seed: " + internal.getSeed() + ")");
|
||||||
|
|
||||||
short short1 = 196;
|
if (internal.getWorld().getKeepSpawnInMemory()) {
|
||||||
long i = System.currentTimeMillis();
|
short short1 = 196;
|
||||||
for (int j = -short1; j <= short1; j += 16) {
|
long i = System.currentTimeMillis();
|
||||||
for (int k = -short1; k <= short1; k += 16) {
|
for (int j = -short1; j <= short1; j += 16) {
|
||||||
long l = System.currentTimeMillis();
|
for (int k = -short1; k <= short1; k += 16) {
|
||||||
|
long l = System.currentTimeMillis();
|
||||||
|
|
||||||
if (l < i) {
|
if (l < i) {
|
||||||
i = l;
|
i = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l > i + 1000L) {
|
if (l > i + 1000L) {
|
||||||
int i1 = (short1 * 2 + 1) * (short1 * 2 + 1);
|
int i1 = (short1 * 2 + 1) * (short1 * 2 + 1);
|
||||||
int j1 = (j + short1) * (short1 * 2 + 1) + k + 1;
|
int j1 = (j + short1) * (short1 * 2 + 1) + k + 1;
|
||||||
|
|
||||||
System.out.println("Preparing spawn area for " + name + ", " + (j1 * 100 / i1) + "%");
|
System.out.println("Preparing spawn area for " + name + ", " + (j1 * 100 / i1) + "%");
|
||||||
i = l;
|
i = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChunkCoordinates chunkcoordinates = internal.getSpawn();
|
ChunkCoordinates chunkcoordinates = internal.getSpawn();
|
||||||
internal.chunkProviderServer.getChunkAt(chunkcoordinates.x + j >> 4, chunkcoordinates.z + k >> 4);
|
internal.chunkProviderServer.getChunkAt(chunkcoordinates.x + j >> 4, chunkcoordinates.z + k >> 4);
|
||||||
|
|
||||||
while (internal.doLighting()) {
|
while (internal.doLighting()) {
|
||||||
;
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -783,4 +783,26 @@ public class CraftWorld implements World {
|
|||||||
public int getMaxHeight() {
|
public int getMaxHeight() {
|
||||||
return 128;
|
return 128;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getKeepSpawnInMemory() {
|
||||||
|
return world.keepSpawnInMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeepSpawnInMemory(boolean keepLoaded) {
|
||||||
|
world.keepSpawnInMemory = keepLoaded;
|
||||||
|
// Grab the worlds spawn chunk
|
||||||
|
ChunkCoordinates chunkcoordinates = this.world.getSpawn();
|
||||||
|
int chunkCoordX = chunkcoordinates.x >> 4;
|
||||||
|
int chunkCoordZ = chunkcoordinates.z >> 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++) {
|
||||||
|
if (keepLoaded) {
|
||||||
|
loadChunk(chunkCoordX + x, chunkCoordZ + z);
|
||||||
|
} else {
|
||||||
|
unloadChunk(chunkCoordX + x, chunkCoordZ + z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user