@@ -63,18 +63,25 @@ public class UnsafeNMS_v1_21_11 implements UnsafeNMS {
6363 * @param chunks The chunks to update.
6464 */
6565 @ Override
66- public void updateChunks (@ NotNull List <Chunk > chunks ) {
66+ public void updateChunks (@ NotNull List <CompletableFuture < Chunk > > chunks ) {
6767 CompletableFuture .runAsync (() -> {
68- for (Chunk chunk : chunks ) {
69- LevelChunk levelChunk = (LevelChunk ) ((CraftChunk ) chunk ).getHandle (ChunkStatus .BIOMES );
70- LevelLightEngine levelLightEngine = levelChunk .getLevel ().getLightEngine ();
71-
72- ClientboundLevelChunkWithLightPacket packet = new ClientboundLevelChunkWithLightPacket (levelChunk , levelLightEngine , null , null , true );
73- for (Player player : getPlayersInDistance (chunk )) {
74- ((CraftPlayer ) player ).getHandle ().connection .send (packet );
75- }
68+ for (CompletableFuture <Chunk > chunkFuture : chunks ) {
69+ chunkFuture .thenAccept (chunk -> {
70+ LevelChunk levelChunk = (LevelChunk ) ((CraftChunk ) chunk ).getHandle (ChunkStatus .BIOMES );
71+ LevelLightEngine levelLightEngine = levelChunk .getLevel ().getLightEngine ();
72+
73+ ClientboundLevelChunkWithLightPacket packet = new ClientboundLevelChunkWithLightPacket (levelChunk , levelLightEngine , null , null , true );
74+ for (Player player : getPlayersInDistance (chunk )) {
75+ ((CraftPlayer ) player ).getHandle ().connection .send (packet );
76+ }
77+ }).exceptionally (ex -> {
78+ ex .printStackTrace ();
79+ return null ;
80+ });
7681 }
77-
82+ }).exceptionally (ex -> {
83+ ex .printStackTrace ();
84+ return null ;
7885 });
7986 }
8087
@@ -161,10 +168,14 @@ public void updateBiome(@NotNull Location minLoc, @NotNull Location maxLoc, @Not
161168 for (int x = minLoc .getBlockX (); x <= maxLoc .getBlockX (); x ++) {
162169 for (int y = minLoc .getBlockY (); y <= maxLoc .getBlockY (); y ++) {
163170 for (int z = minLoc .getBlockZ (); z <= maxLoc .getBlockZ (); z ++) {
164- Chunk chunk = minLoc .getWorld ().getChunkAt (x , z );
165- LevelChunk levelChunk = (LevelChunk ) ((CraftChunk ) chunk ).getHandle (ChunkStatus .BIOMES );
166-
167- levelChunk .setBiome (x , y , z , biome );
171+ final int finalX = x ;
172+ final int finalY = y ;
173+ final int finalZ = z ;
174+
175+ minLoc .getWorld ().getChunkAtAsync (x , z ).thenAccept (chunk -> {
176+ LevelChunk levelChunk = (LevelChunk ) ((CraftChunk ) chunk ).getHandle (ChunkStatus .BIOMES );
177+ levelChunk .setBiome (finalX , finalY , finalZ , biome );
178+ });
168179 }
169180 }
170181 }
0 commit comments