From 6903f67f0f1cd127196bfa7c98b564b437e28812 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 17 Jul 2021 07:36:15 -0400 Subject: [PATCH] Attempt to patch mca holes --- .../volmit/iris/core/gui/Pregenerator.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/com/volmit/iris/core/gui/Pregenerator.java b/src/main/java/com/volmit/iris/core/gui/Pregenerator.java index d8f9242ad..97857d696 100644 --- a/src/main/java/com/volmit/iris/core/gui/Pregenerator.java +++ b/src/main/java/com/volmit/iris/core/gui/Pregenerator.java @@ -22,6 +22,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.engine.IrisWorlds; import com.volmit.iris.engine.data.DirectWorldWriter; +import com.volmit.iris.engine.data.mca.MCAFile; import com.volmit.iris.engine.framework.IrisAccess; import com.volmit.iris.engine.parallel.BurstExecutor; import com.volmit.iris.engine.parallel.MultiBurst; @@ -254,6 +255,7 @@ public class Pregenerator implements Listener { vcaz.set(jj); })); e.complete(); + verifyMCA(x, z, burst); directWriter.flush(); install(mcg, mca); } else { @@ -266,6 +268,37 @@ public class Pregenerator implements Listener { return true; } + private void verifyMCA(int x, int z, MultiBurst burst) { + MCAFile rg = directWriter.getMCA(x, z); + KList requeue = new KList<>(); + + for (int i = 0; i < 32; i++) + { + for(int j = 0; j < 32; j++) + { + com.volmit.iris.engine.data.mca.Chunk c = rg.getChunk(i, j); + + if(c == null) + { + draw(((x << 5) + i), ((z << 5) + j), COLOR_ERROR); + Iris.warn("Caught Ungenerated Chunk @ " + ((x << 5) + i) + ", " + ((z << 5) + j) + " Regenerating before flush, CHECK THIS CHUNK IN THE OVERWORLD TO MAKE SURE WE FIXED IT!"); + int finalI = i; + int finalJ = j; + requeue.add(() -> { + access.directWriteChunk(world, ((x << 5) + finalI), ((z << 5) + finalJ), directWriter); + draw(((x << 5) + finalI), ((z << 5) + finalJ), COLOR_MCA_GENERATED); + }); + } + } + } + + if(requeue.isNotEmpty()) + { + burst.burst(requeue); + verifyMCA(x, z, burst); + } + } + private boolean install(File from, File to) { try { Files.move(from.toPath(), to.toPath());