From 51f333471192b5915ed2a4f09c108e5abcab0dd7 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sun, 18 Jul 2021 19:49:54 -0400 Subject: [PATCH] Headless generation --- .../engine/headless/HeadlessGenerator.java | 25 +++++++++++++++++++ .../iris/engine/parallel/MultiBurst.java | 18 +++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/com/volmit/iris/engine/headless/HeadlessGenerator.java b/src/main/java/com/volmit/iris/engine/headless/HeadlessGenerator.java index b9802da7d..b2f2967a7 100644 --- a/src/main/java/com/volmit/iris/engine/headless/HeadlessGenerator.java +++ b/src/main/java/com/volmit/iris/engine/headless/HeadlessGenerator.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.headless; import com.volmit.iris.engine.data.mca.NBTWorld; import com.volmit.iris.engine.framework.EngineCompositeGenerator; +import com.volmit.iris.engine.parallel.MultiBurst; import lombok.Data; @Data @@ -27,12 +28,36 @@ public class HeadlessGenerator { private final HeadlessWorld world; private final EngineCompositeGenerator generator; private final NBTWorld writer; + private final MultiBurst burst; public HeadlessGenerator(HeadlessWorld world) { this.world = world; + burst = new MultiBurst("Iris Headless Generator", 9, Runtime.getRuntime().availableProcessors()); generator = new EngineCompositeGenerator(world.getDimension().getLoadKey(), true); generator.initialize(world.getWorld()); writer = new NBTWorld(world.getWorld().worldFolder()); } + + public void generateChunk(int x, int z) + { + generator.directWriteChunk(world.getWorld(), x, z, writer); + } + + public void generateRegion(int x, int z) + { + generator.directWriteMCA(world.getWorld(), x, z, writer, burst); + } + + public void save() + { + writer.save(); + } + + public void close() + { + burst.shutdownAndAwait(); + generator.close(); + writer.close(); + } } diff --git a/src/main/java/com/volmit/iris/engine/parallel/MultiBurst.java b/src/main/java/com/volmit/iris/engine/parallel/MultiBurst.java index da965047b..e79883bd7 100644 --- a/src/main/java/com/volmit/iris/engine/parallel/MultiBurst.java +++ b/src/main/java/com/volmit/iris/engine/parallel/MultiBurst.java @@ -95,4 +95,22 @@ public class MultiBurst { public void shutdown() { service.shutdown(); } + + public void shutdownAndAwait() { + service.shutdown(); + + try + { + while(!service.awaitTermination(10, TimeUnit.SECONDS)) + { + Iris.info("Still waiting to shutdown burster..."); + } + } + + catch(Throwable e) + { + e.printStackTrace(); + Iris.reportError(e); + } + } }