diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java index 80b0a3dfd..495454f22 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/AsyncPregenMethod.java @@ -82,11 +82,8 @@ public class AsyncPregenMethod implements PregeneratorMethod { private void completeChunk(int x, int z, PregenListener listener) { try { future.add(PaperLib.getChunkAtAsync(world, x, z, true).thenApply((i) -> { - if (i == null) { - - } - Chunk c = Bukkit.getWorld(world.getUID()).getChunkAt(x, z); - lastUse.put(c, M.ms()); + if (i == null) return 0; + lastUse.put(i, M.ms()); listener.onChunkGenerated(x, z); listener.onChunkCleaned(x, z); return 0; diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/HeadlessPregenMethod.java b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/HeadlessPregenMethod.java index e1298da23..446a6c939 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/HeadlessPregenMethod.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/HeadlessPregenMethod.java @@ -6,25 +6,23 @@ import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.pregenerator.PregenListener; import com.volmit.iris.core.pregenerator.PregeneratorMethod; import com.volmit.iris.engine.framework.Engine; -import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.parallel.MultiBurst; import java.io.IOException; -import java.util.Objects; -import java.util.concurrent.Future; +import java.util.concurrent.Semaphore; public class HeadlessPregenMethod implements PregeneratorMethod { private final Engine engine; private final IHeadless headless; private final MultiBurst burst; - private final KList> futures; + private final Semaphore semaphore; public HeadlessPregenMethod(Engine engine) { this.engine = engine; this.headless = INMS.get().createHeadless(engine); this.burst = new MultiBurst("Iris Headless", Thread.MAX_PRIORITY); - this.futures = new KList<>(); + this.semaphore = new Semaphore(1024); } @Override @@ -32,7 +30,9 @@ public class HeadlessPregenMethod implements PregeneratorMethod { @Override public void close() { - waitForChunksPartial(0); + try { + semaphore.acquire(1024); + } catch (InterruptedException ignored) {} burst.close(); headless.saveAll(); try { @@ -63,34 +63,25 @@ public class HeadlessPregenMethod implements PregeneratorMethod { @Override public void generateChunk(int x, int z, PregenListener listener) { - futures.removeIf(Future::isDone); - waitForChunksPartial(512); - futures.add(burst.complete(() -> { - listener.onChunkGenerating(x, z); - headless.generateChunk(x, z); - listener.onChunkGenerated(x, z); - })); + try { + semaphore.acquire(); + } catch (InterruptedException ignored) { + semaphore.release(); + return; + } + burst.complete(() -> { + try { + listener.onChunkGenerating(x, z); + headless.generateChunk(x, z); + listener.onChunkGenerated(x, z); + } finally { + semaphore.release(); + } + }); } @Override public Mantle getMantle() { return engine.getMantle().getMantle(); } - - private void waitForChunksPartial(int maxWaiting) { - futures.removeWhere(Objects::isNull); - while (futures.size() > maxWaiting) { - try { - Future i = futures.remove(0); - - if (i == null) { - continue; - } - - i.get(); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } } diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java index 2ebfb64b2..cdecf2bcc 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/methods/MedievalPregenMethod.java @@ -119,8 +119,7 @@ public class MedievalPregenMethod implements PregeneratorMethod { listener.onChunkGenerating(x, z); futures.add(J.sfut(() -> { - world.getChunkAt(x, z); - Chunk c = Bukkit.getWorld(world.getUID()).getChunkAt(x, z); + Chunk c = world.getChunkAt(x, z); lastUse.put(c, M.ms()); listener.onChunkGenerated(x, z); listener.onChunkCleaned(x, z); diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java index 54f7b3c4f..6d438283a 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisPackBenchmarking.java @@ -153,7 +153,7 @@ public class IrisPackBenchmarking { return new IrisEngine(new EngineTarget(world, dim, data), false); } return IrisToolbelt.access(IrisToolbelt.createWorld() - .dimension(IrisDimension.getName()) + .dimension(IrisDimension.getLoadKey()) .name("benchmark") .seed(1337) .studio(false) diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/Headless.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/Headless.java index 4ec5f926f..981f5fb2e 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/Headless.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/Headless.java @@ -184,7 +184,7 @@ public class Headless implements IHeadless, LevelHeightAccessor { IrisContext.getOr(engine).setChunkContext(ctx); for (EngineStage i : engine.getMode().getStages()) { - i.generate(x, z, blocks, vbiomes, true, ctx); + i.generate(x, z, blocks, vbiomes, false, ctx); } }