mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-01 20:50:41 +01:00
SPIGOT-4137: Fix World.regenerateChunk
This commit is contained in:
parent
3599dbe3c2
commit
1ef1ffd664
3 changed files with 35 additions and 9 deletions
|
@ -57,16 +57,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -150,7 +162,7 @@
|
||||
@@ -147,10 +159,21 @@
|
||||
return this.g.c();
|
||||
}
|
||||
|
||||
+ // CraftBukkit start
|
||||
public CompletableFuture<Chunk> generateChunk(int i, int j) {
|
||||
+ return this.generateChunk(i, j, false);
|
||||
+ }
|
||||
+
|
||||
+ public CompletableFuture<Chunk> generateChunk(int i, int j, boolean force) {
|
||||
this.g.b();
|
||||
this.g.a(new ChunkCoordIntPair(i, j));
|
||||
- this.g.a(new ChunkCoordIntPair(i, j));
|
||||
- CompletableFuture completablefuture = this.g.c();
|
||||
+
|
||||
+ ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j);
|
||||
+ if (force) {
|
||||
+ this.f.forcePolluteCache(chunkcoordintpair);
|
||||
+ }
|
||||
+ this.g.a(chunkcoordintpair);
|
||||
+ // CraftBukkit end
|
||||
+ CompletableFuture<ProtoChunk> completablefuture = this.g.c(); // CraftBukkit - decompile error
|
||||
|
||||
return completablefuture.thenApply(this::a);
|
||||
}
|
||||
@@ -268,10 +280,12 @@
|
||||
@@ -268,10 +291,12 @@
|
||||
Chunk chunk = (Chunk) this.chunks.get(olong);
|
||||
|
||||
if (chunk != null && chunk.d) {
|
||||
|
@ -83,7 +98,7 @@
|
|||
++i;
|
||||
}
|
||||
}
|
||||
@@ -284,6 +298,40 @@
|
||||
@@ -284,6 +309,40 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
15
nms-patches/ChunkTaskScheduler.patch
Normal file
15
nms-patches/ChunkTaskScheduler.patch
Normal file
|
@ -0,0 +1,15 @@
|
|||
--- a/net/minecraft/server/ChunkTaskScheduler.java
|
||||
+++ b/net/minecraft/server/ChunkTaskScheduler.java
|
||||
@@ -39,6 +39,12 @@
|
||||
this.f = iasynctaskhandler;
|
||||
}
|
||||
|
||||
+ // CraftBukkit start
|
||||
+ public void forcePolluteCache(ChunkCoordIntPair chunkcoordintpair) {
|
||||
+ this.g.put(chunkcoordintpair.a(), new Scheduler.a(chunkcoordintpair, new ProtoChunk(chunkcoordintpair, ChunkConverter.a), ChunkStatus.EMPTY));
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
+
|
||||
protected Scheduler.a a(ChunkCoordIntPair chunkcoordintpair) {
|
||||
return (Scheduler.a) this.g.computeIfAbsent(Long.valueOf(chunkcoordintpair.a()), (olong) -> {
|
||||
ProtoChunk protochunk = this.a(chunkcoordintpair.x, chunkcoordintpair.z);
|
|
@ -218,17 +218,13 @@ public class CraftWorld implements World {
|
|||
|
||||
net.minecraft.server.Chunk chunk = null;
|
||||
|
||||
chunk = Futures.getUnchecked(world.getChunkProviderServer().generateChunk(x, z));
|
||||
chunk = Futures.getUnchecked(world.getChunkProviderServer().generateChunk(x, z, true));
|
||||
PlayerChunk playerChunk = world.getPlayerChunkMap().getChunk(x, z);
|
||||
if (playerChunk != null) {
|
||||
playerChunk.chunk = chunk;
|
||||
}
|
||||
|
||||
if (chunk != null) {
|
||||
world.getChunkProviderServer().chunks.put(chunkKey, chunk);
|
||||
|
||||
chunk.addEntities();
|
||||
|
||||
refreshChunk(x, z);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue