diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java index c23cb3b..20d2c93 100644 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -13,6 +13,7 @@ import javax.annotation.Nullable; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.concurrent.CompletableFuture; import java.util.logging.Level; @@ -65,13 +66,22 @@ nms.getWorldUtils().saveWorldNow(world_end); nms.getWorldUtils().saveWorldNow(world_nether); } else { + ArrayList> allTasks = new ArrayList<>(); for (World world : Bukkit.getWorlds()) { for (Chunk chunk : world.getLoadedChunks()) { + CompletableFuture future = new CompletableFuture<>(); + allTasks.add(future); Bukkit.getServer().getRegionScheduler().run(plugin, world, chunk.getX(), chunk.getZ(), scheduledTask -> { - nms.getWorldUtils().saveChunkNow(chunk); + try { + nms.getWorldUtils().saveChunkNow(chunk); + } finally { + future.complete(null); + } }); } } + CompletableFuture waitForAll = CompletableFuture.allOf(allTasks.toArray(new CompletableFuture[allTasks.size()])); + waitForAll.get(); } } File dir = new File(saveID);