From 59ecf5c6c1f9de1d55df19013fdcf0100695bbc7 Mon Sep 17 00:00:00 2001 From: Sen Date: Fri, 11 Jul 2025 13:13:17 +0200 Subject: [PATCH] fix world reset chunk repop (just noticed world gerneration is not actually seed-accurate) --- .../main/java/server/world/WorldServer.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/server/world/WorldServer.java b/server/src/main/java/server/world/WorldServer.java index c42bb3c0..166eecbb 100755 --- a/server/src/main/java/server/world/WorldServer.java +++ b/server/src/main/java/server/world/WorldServer.java @@ -1256,7 +1256,7 @@ public final class WorldServer extends AWorldServer { this.chunks.add(id, chunk); this.loaded.add(chunk); chunk.onChunkLoad(); - this.popChunk(x, z, false); + this.popChunk(x, z); } return chunk; @@ -1386,7 +1386,7 @@ public final class WorldServer extends AWorldServer { // } // } - private void popChunk(int x, int z, boolean force) { + private void popChunk(int x, int z) { boolean n = this.chunkExists(x, z - 1); boolean e = this.chunkExists(x + 1, z); boolean s = this.chunkExists(x, z + 1); @@ -1398,15 +1398,6 @@ public final class WorldServer extends AWorldServer { if(e && s && se) { this.populate(x, z); } - else if(force) { - if(!e) - this.loadChunk(x + 1, z); - if(!s) - this.loadChunk(x, z + 1); - if(!se) - this.loadChunk(x + 1, z + 1); - this.populate(x, z); - } if(w && s && sw) { this.populate(x - 1, z); } @@ -1572,6 +1563,14 @@ public final class WorldServer extends AWorldServer { this.initGenerator(exterminated); this.reloadChunks(); } + + private void insertChunk(int x, int z) { + ChunkServer chunk = this.generate(x, z); + this.chunks.add(LongHashMap.packInt(x, z), chunk); + this.loaded.add(chunk); + chunk.onChunkLoad(); + this.popChunk(x, z); + } private void reloadChunks() { for(Long v : this.dropped) { @@ -1599,7 +1598,25 @@ public final class WorldServer extends AWorldServer { loaded.clear(); loaded.addAll(this.loaded); for(ChunkServer chunk : loaded) { - this.popChunk(chunk.xPos, chunk.zPos, true); + int x = chunk.xPos; + int z = chunk.zPos; + if(!this.chunkExists(x, z - 1)) + this.insertChunk(x, z - 1); + if(!this.chunkExists(x + 1, z)) + this.insertChunk(x + 1, z); + if(!this.chunkExists(x, z + 1)) + this.insertChunk(x, z + 1); + if(!this.chunkExists(x - 1, z)) + this.insertChunk(x - 1, z); + if(!this.chunkExists(x - 1, z - 1)) + this.insertChunk(x - 1, z - 1); + if(!this.chunkExists(x + 1, z + 1)) + this.insertChunk(x + 1, z + 1); + if(!this.chunkExists(x - 1, z + 1)) + this.insertChunk(x - 1, z + 1); + if(!this.chunkExists(x + 1, z - 1)) + this.insertChunk(x + 1, z - 1); + this.popChunk(x, z); chunk.update(false); } this.entities.removeAll(this.unloaded);