SPIGOT-4137: Fix World.regenerateChunk

This commit is contained in:
md_5 2018-07-25 19:32:06 +10:00
parent 3599dbe3c2
commit 1ef1ffd664
3 changed files with 35 additions and 9 deletions

View file

@ -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;
}

View 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);

View file

@ -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);
}