mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 10:43:14 +00:00
Auto stash before revert of "Flush "
This commit is contained in:
parent
d33a02f6cd
commit
e7e130460e
@ -5,7 +5,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group 'com.volmit.iris'
|
group 'com.volmit.iris'
|
||||||
version '1.4.13'
|
version '1.4.14'
|
||||||
def apiVersion = '1.17'
|
def apiVersion = '1.17'
|
||||||
def name = 'Iris'
|
def name = 'Iris'
|
||||||
def main = 'com.volmit.iris.Iris'
|
def main = 'com.volmit.iris.Iris'
|
||||||
|
@ -20,6 +20,8 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
|||||||
private final RNG rng;
|
private final RNG rng;
|
||||||
private final boolean carving;
|
private final boolean carving;
|
||||||
private final boolean hasUnder;
|
private final boolean hasUnder;
|
||||||
|
@Getter
|
||||||
|
private int lastBedrock = -1;
|
||||||
|
|
||||||
public IrisTerrainActuator(Engine engine) {
|
public IrisTerrainActuator(Engine engine) {
|
||||||
super(engine, "Terrain");
|
super(engine, "Terrain");
|
||||||
@ -64,6 +66,7 @@ public class IrisTerrainActuator extends EngineAssignedActuator<BlockData>
|
|||||||
if(getDimension().isBedrock())
|
if(getDimension().isBedrock())
|
||||||
{
|
{
|
||||||
h.set(xf, i, zf, BEDROCK);
|
h.set(xf, i, zf, BEDROCK);
|
||||||
|
lastBedrock = i;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,6 @@ public class CommandIrisStudio extends MortarCommand
|
|||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioUpdate update;
|
private CommandIrisStudioUpdate update;
|
||||||
|
|
||||||
//@Command
|
|
||||||
//private CommandIrisStudioMap map;
|
|
||||||
|
|
||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioGoto got0;
|
private CommandIrisStudioGoto got0;
|
||||||
|
|
||||||
@ -60,6 +57,9 @@ public class CommandIrisStudio extends MortarCommand
|
|||||||
@Command
|
@Command
|
||||||
private CommandIrisStudioConvert convert;
|
private CommandIrisStudioConvert convert;
|
||||||
|
|
||||||
|
@Command
|
||||||
|
private CommandIrisStudioMap map;
|
||||||
|
|
||||||
public CommandIrisStudio()
|
public CommandIrisStudio()
|
||||||
{
|
{
|
||||||
super("studio", "std", "s");
|
super("studio", "std", "s");
|
||||||
|
@ -3,6 +3,7 @@ package com.volmit.iris.manager.command.studio;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.IrisSettings;
|
import com.volmit.iris.IrisSettings;
|
||||||
import com.volmit.iris.manager.gui.IrisVision;
|
import com.volmit.iris.manager.gui.IrisVision;
|
||||||
|
import com.volmit.iris.scaffold.IrisWorlds;
|
||||||
import com.volmit.iris.scaffold.engine.IrisAccess;
|
import com.volmit.iris.scaffold.engine.IrisAccess;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
@ -38,9 +39,21 @@ public class CommandIrisStudioMap extends MortarCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
|
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
|
||||||
IrisVision.launch(g, 0);
|
IrisVision.launch(g, 0);
|
||||||
sender.sendMessage("Opening Map!");
|
sender.sendMessage("Opening Map!");
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(Throwable e)
|
||||||
|
{
|
||||||
|
IrisAccess g = IrisWorlds.access(sender.player().getWorld());
|
||||||
|
IrisVision.launch(g, 0);
|
||||||
|
sender.sendMessage("Opening Map!");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.volmit.iris.manager.command.world;
|
package com.volmit.iris.manager.command.world;
|
||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.pregen.GeneratorQueue;
|
||||||
import com.volmit.iris.pregen.Pregenerator;
|
import com.volmit.iris.pregen.Pregenerator;
|
||||||
|
import com.volmit.iris.pregen.queue.QueuedWorld;
|
||||||
import com.volmit.iris.util.KList;
|
import com.volmit.iris.util.KList;
|
||||||
import com.volmit.iris.util.MortarCommand;
|
import com.volmit.iris.util.MortarCommand;
|
||||||
import com.volmit.iris.util.MortarSender;
|
import com.volmit.iris.util.MortarSender;
|
||||||
|
@ -2,7 +2,9 @@ package com.volmit.iris.manager.gui;
|
|||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
import com.volmit.iris.scaffold.engine.Engine;
|
||||||
import com.volmit.iris.util.IrisInterpolation;
|
import com.volmit.iris.util.IrisInterpolation;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class IrisRenderer
|
public class IrisRenderer
|
||||||
{
|
{
|
||||||
@ -31,4 +33,8 @@ public class IrisRenderer
|
|||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void set(double worldX, double worldZ) {
|
||||||
|
((Engine)renderer).getWorld().getBlockAt((int)worldX, 20, (int)worldZ).setType(Material.DIAMOND_BLOCK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package com.volmit.iris.manager.gui;
|
|||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.scaffold.engine.IrisAccess;
|
import com.volmit.iris.scaffold.engine.IrisAccess;
|
||||||
import com.volmit.iris.util.*;
|
import com.volmit.iris.util.*;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@ -24,6 +26,7 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
private static final long serialVersionUID = 2094606939770332040L;
|
private static final long serialVersionUID = 2094606939770332040L;
|
||||||
private IrisRenderer renderer;
|
private IrisRenderer renderer;
|
||||||
private int posX = 0;
|
private int posX = 0;
|
||||||
|
private World world;
|
||||||
private int posZ = 0;
|
private int posZ = 0;
|
||||||
private double scale = 128;
|
private double scale = 128;
|
||||||
private double mscale = 1D;
|
private double mscale = 1D;
|
||||||
@ -176,6 +179,26 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double getWorldX(double screenX)
|
||||||
|
{
|
||||||
|
return (screenX + oxp) * mscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getWorldZ(double screenZ)
|
||||||
|
{
|
||||||
|
return (screenZ + ozp) * mscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getScreenX(double x)
|
||||||
|
{
|
||||||
|
return (oxp + x) / mscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getScreenZ(double z)
|
||||||
|
{
|
||||||
|
return (ozp + z) / mscale;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paint(Graphics gx)
|
public void paint(Graphics gx)
|
||||||
{
|
{
|
||||||
@ -204,7 +227,7 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
w = getWidth();
|
w = getWidth();
|
||||||
h = getHeight();
|
h = getHeight();
|
||||||
double vscale = scale;
|
double vscale = scale;
|
||||||
scale = w / 32D;
|
scale = w / 16D;
|
||||||
|
|
||||||
if(scale != vscale)
|
if(scale != vscale)
|
||||||
{
|
{
|
||||||
@ -257,6 +280,12 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(Player i : world.getPlayers())
|
||||||
|
{
|
||||||
|
g.setColor(Color.getHSBColor(RNG.r.f(), 1f, 1f));
|
||||||
|
g.drawRect((int)getScreenX(i.getLocation().getX()), (int)getScreenZ(i.getLocation().getZ()), 4, 4);
|
||||||
|
}
|
||||||
|
|
||||||
if(!isVisible())
|
if(!isVisible())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -279,10 +308,11 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createAndShowGUI(Renderer r, int s)
|
private static void createAndShowGUI(Renderer r, int s, World world)
|
||||||
{
|
{
|
||||||
JFrame frame = new JFrame("Vision");
|
JFrame frame = new JFrame("Vision");
|
||||||
IrisVision nv = new IrisVision();
|
IrisVision nv = new IrisVision();
|
||||||
|
nv.world = world;
|
||||||
nv.renderer = new IrisRenderer(r);
|
nv.renderer = new IrisRenderer(r);
|
||||||
frame.add(nv);
|
frame.add(nv);
|
||||||
frame.setSize(1440, 820);
|
frame.setSize(1440, 820);
|
||||||
@ -306,7 +336,7 @@ public class IrisVision extends JPanel implements MouseWheelListener
|
|||||||
public static void launch(IrisAccess g, int i) {
|
public static void launch(IrisAccess g, int i) {
|
||||||
J.a(() ->
|
J.a(() ->
|
||||||
{
|
{
|
||||||
createAndShowGUI((x, z) -> g.getEngineAccess(i).draw(x, z), i);
|
createAndShowGUI((x, z) -> g.getEngineAccess(i).draw(x, z), i, g.getCompound().getWorld());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
src/main/java/com/volmit/iris/manager/gui/TileRender.java
Normal file
14
src/main/java/com/volmit/iris/manager/gui/TileRender.java
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package com.volmit.iris.manager.gui;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
public class TileRender
|
||||||
|
{
|
||||||
|
private BufferedImage image;
|
||||||
|
private int quality;
|
||||||
|
}
|
@ -18,6 +18,7 @@ import org.bukkit.block.Biome;
|
|||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class DirectWorldWriter {
|
public class DirectWorldWriter {
|
||||||
@ -51,16 +52,6 @@ public class DirectWorldWriter {
|
|||||||
f.createNewFile();
|
f.createNewFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
writeBuffer.get(i).cleanupPalettesAndBlockStates();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch(Throwable e)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
MCAUtil.write(writeBuffer.get(i), f, true);
|
MCAUtil.write(writeBuffer.get(i), f, true);
|
||||||
writeBuffer.remove(i);
|
writeBuffer.remove(i);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
@ -202,6 +193,10 @@ public class DirectWorldWriter {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteChunk(int x, int z) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public Chunk getChunk(int x, int z)
|
public Chunk getChunk(int x, int z)
|
||||||
{
|
{
|
||||||
MCAFile mca = getMCA(x >> 5, z >> 5);
|
MCAFile mca = getMCA(x >> 5, z >> 5);
|
||||||
@ -227,7 +222,12 @@ public class DirectWorldWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
File f = getMCAFile(x, z);
|
File f = getMCAFile(x, z);
|
||||||
|
try {
|
||||||
|
mca = f.exists() ? MCAUtil.read(f) : new MCAFile(x, z);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
mca = new MCAFile(x, z);
|
mca = new MCAFile(x, z);
|
||||||
|
}
|
||||||
|
|
||||||
writeBuffer.put(key, mca);
|
writeBuffer.put(key, mca);
|
||||||
return mca;
|
return mca;
|
||||||
|
@ -11,6 +11,7 @@ import io.papermc.lib.PaperLib;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
@ -39,17 +40,22 @@ import java.util.concurrent.locks.ReentrantLock;
|
|||||||
public class Pregenerator implements Listener
|
public class Pregenerator implements Listener
|
||||||
{
|
{
|
||||||
private static Pregenerator instance;
|
private static Pregenerator instance;
|
||||||
private static final Color COLOR_MCA_PREPARE = Color.decode("#16211d");
|
private static final Color COLOR_ERROR = Color.decode("#E34113");
|
||||||
private static final Color COLOR_MCA_GENERATE = Color.decode("#34c0eb");
|
private static final Color COLOR_MCA_PREPARE = Color.decode("#3CAAB5");
|
||||||
private static final Color COLOR_MCA_GENERATE_SLOW = Color.decode("#34c0eb");
|
private static final Color COLOR_MCA_RELOAD = Color.decode("#41FF61");
|
||||||
private static final Color COLOR_MCA_GENERATE_SLOW_ASYNC = Color.decode("#34c0eb");
|
private static final Color COLOR_MCA_GENERATE = Color.decode("#33FF8F");
|
||||||
private static final Color COLOR_MCA_GENERATED = Color.decode("#34eb83");
|
private static final Color COLOR_MCA_GENERATE_SLOW = Color.decode("#13BAE3");
|
||||||
private static final Color COLOR_MCA_SEALED = Color.decode("#34eb83");
|
private static final Color COLOR_MCA_GENERATE_SLOW_ASYNC = Color.decode("#13BAE3");
|
||||||
private static final Color COLOR_MCA_DEFERRED = Color.decode("#211617");
|
private static final Color COLOR_MCA_GENERATED = Color.decode("#33FF8F");
|
||||||
|
private static final Color COLOR_MCA_GENERATED_MCA = Color.decode("#13E3C9");
|
||||||
|
private static final Color COLOR_MCA_SEALED = Color.decode("#33FF8F");
|
||||||
|
private static final Color COLOR_MCA_DEFERRED = Color.decode("#3CB57A");
|
||||||
private final World world;
|
private final World world;
|
||||||
|
private int lowestBedrock;
|
||||||
private final DirectWorldWriter directWriter;
|
private final DirectWorldWriter directWriter;
|
||||||
private final AtomicBoolean active;
|
private final AtomicBoolean active;
|
||||||
private final AtomicBoolean running;
|
private final AtomicBoolean running;
|
||||||
|
private final KList<ChunkPosition> errors;
|
||||||
private final KList<Runnable> onComplete;
|
private final KList<Runnable> onComplete;
|
||||||
private final ChunkPosition max;
|
private final ChunkPosition max;
|
||||||
private final ChunkPosition min;
|
private final ChunkPosition min;
|
||||||
@ -68,6 +74,8 @@ public class Pregenerator implements Listener
|
|||||||
private final AtomicInteger vcaz;
|
private final AtomicInteger vcaz;
|
||||||
private final long elapsed;
|
private final long elapsed;
|
||||||
private final ChronoLatch latch;
|
private final ChronoLatch latch;
|
||||||
|
private IrisAccess access;
|
||||||
|
private final KList<ChunkPosition> regionReload;
|
||||||
|
|
||||||
public Pregenerator(World world, int blockSize, Runnable onComplete)
|
public Pregenerator(World world, int blockSize, Runnable onComplete)
|
||||||
{
|
{
|
||||||
@ -83,11 +91,13 @@ public class Pregenerator implements Listener
|
|||||||
public Pregenerator(World world, int blockSize, boolean dogui) throws HeadlessException
|
public Pregenerator(World world, int blockSize, boolean dogui) throws HeadlessException
|
||||||
{
|
{
|
||||||
instance();
|
instance();
|
||||||
|
regionReload = new KList<>();
|
||||||
latch = new ChronoLatch(5000);
|
latch = new ChronoLatch(5000);
|
||||||
memoryMetric = new AtomicReference<>("...");
|
memoryMetric = new AtomicReference<>("...");
|
||||||
method = new AtomicReference<>("STARTUP");
|
method = new AtomicReference<>("STARTUP");
|
||||||
memory = new AtomicLong(0);
|
memory = new AtomicLong(0);
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
errors = new KList<>();
|
||||||
vmcax = new AtomicInteger();
|
vmcax = new AtomicInteger();
|
||||||
vmcaz = new AtomicInteger();
|
vmcaz = new AtomicInteger();
|
||||||
vcax = new AtomicInteger();
|
vcax = new AtomicInteger();
|
||||||
@ -97,7 +107,7 @@ public class Pregenerator implements Listener
|
|||||||
totalChunks = new AtomicInteger(0);
|
totalChunks = new AtomicInteger(0);
|
||||||
generated = new AtomicInteger(0);
|
generated = new AtomicInteger(0);
|
||||||
mcaDefer = new KList<>();
|
mcaDefer = new KList<>();
|
||||||
IrisAccess access = IrisWorlds.access(world);
|
access = IrisWorlds.access(world);
|
||||||
this.directWriter = new DirectWorldWriter(world.getWorldFolder());
|
this.directWriter = new DirectWorldWriter(world.getWorldFolder());
|
||||||
this.running = new AtomicBoolean(true);
|
this.running = new AtomicBoolean(true);
|
||||||
this.active = new AtomicBoolean(true);
|
this.active = new AtomicBoolean(true);
|
||||||
@ -115,6 +125,10 @@ public class Pregenerator implements Listener
|
|||||||
totalChunks.getAndAdd(1024);
|
totalChunks.getAndAdd(1024);
|
||||||
draw.add(() -> drawMCA(xx, zz, COLOR_MCA_PREPARE));
|
draw.add(() -> drawMCA(xx, zz, COLOR_MCA_PREPARE));
|
||||||
}).drain();
|
}).drain();
|
||||||
|
if(access != null)
|
||||||
|
{
|
||||||
|
lowestBedrock = access.getCompound().getLowestBedrock();
|
||||||
|
}
|
||||||
gui = dogui ?(IrisSettings.get().getGui().isLocalPregenGui() && IrisSettings.get().getGui().isUseServerLaunchedGuis() ? MCAPregenGui.createAndShowGUI(this) : null) : null;
|
gui = dogui ?(IrisSettings.get().getGui().isLocalPregenGui() && IrisSettings.get().getGui().isUseServerLaunchedGuis() ? MCAPregenGui.createAndShowGUI(this) : null) : null;
|
||||||
flushWorld();
|
flushWorld();
|
||||||
KList<ChunkPosition> order = computeChunkOrder();
|
KList<ChunkPosition> order = computeChunkOrder();
|
||||||
@ -135,7 +149,6 @@ public class Pregenerator implements Listener
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
drawMCA(xx, zz, COLOR_MCA_DEFERRED);
|
drawMCA(xx, zz, COLOR_MCA_DEFERRED);
|
||||||
mcaDefer.add(new ChunkPosition(xx, zz));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -163,7 +176,6 @@ public class Pregenerator implements Listener
|
|||||||
vmcaz.set(p.getZ());
|
vmcaz.set(p.getZ());
|
||||||
generateDeferedMCARegion(p.getX(), p.getZ(), burst, mcaIteration);
|
generateDeferedMCARegion(p.getX(), p.getZ(), burst, mcaIteration);
|
||||||
flushWorld();
|
flushWorld();
|
||||||
drawMCA(p.getX(), p.getZ(), COLOR_MCA_SEALED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
burst.shutdownNow();
|
burst.shutdownNow();
|
||||||
@ -225,7 +237,7 @@ public class Pregenerator implements Listener
|
|||||||
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> e.queue(() -> {
|
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> e.queue(() -> {
|
||||||
draw(ii, jj, COLOR_MCA_GENERATE);
|
draw(ii, jj, COLOR_MCA_GENERATE);
|
||||||
access.directWriteChunk(world, ii, jj, directWriter);
|
access.directWriteChunk(world, ii, jj, directWriter);
|
||||||
draw(ii, jj, COLOR_MCA_GENERATED);
|
draw(ii, jj, COLOR_MCA_GENERATED_MCA);
|
||||||
generated.getAndIncrement();
|
generated.getAndIncrement();
|
||||||
vcax.set(ii);
|
vcax.set(ii);
|
||||||
vcaz.set(jj);
|
vcaz.set(jj);
|
||||||
@ -236,12 +248,14 @@ public class Pregenerator implements Listener
|
|||||||
{
|
{
|
||||||
drawMCA(x, z, COLOR_MCA_DEFERRED);
|
drawMCA(x, z, COLOR_MCA_DEFERRED);
|
||||||
generated.set(generated.get() - 1024);
|
generated.set(generated.get() - 1024);
|
||||||
mcaDefer.add(new ChunkPosition(x, z));
|
|
||||||
}
|
}
|
||||||
|
totalChunks.getAndAdd(1024);
|
||||||
|
mcaDefer.add(new ChunkPosition(x, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
totalChunks.getAndAdd(1024);
|
||||||
mcaDefer.add(new ChunkPosition(x, z));
|
mcaDefer.add(new ChunkPosition(x, z));
|
||||||
e.complete();
|
e.complete();
|
||||||
return false;
|
return false;
|
||||||
@ -293,6 +307,8 @@ public class Pregenerator implements Listener
|
|||||||
method.set("PaperAsync (Slow)");
|
method.set("PaperAsync (Slow)");
|
||||||
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> {
|
mcaIteration.accept(mcaox, mcaoz, (ii, jj) -> {
|
||||||
e.queue(() -> {
|
e.queue(() -> {
|
||||||
|
try
|
||||||
|
{
|
||||||
CompletableFuture<Chunk> cc = PaperLib.getChunkAtAsync(world, ii, jj);
|
CompletableFuture<Chunk> cc = PaperLib.getChunkAtAsync(world, ii, jj);
|
||||||
draw(ii, jj, COLOR_MCA_GENERATE_SLOW_ASYNC);
|
draw(ii, jj, COLOR_MCA_GENERATE_SLOW_ASYNC);
|
||||||
cc.join();
|
cc.join();
|
||||||
@ -300,6 +316,17 @@ public class Pregenerator implements Listener
|
|||||||
generated.getAndIncrement();
|
generated.getAndIncrement();
|
||||||
vcax.set(ii);
|
vcax.set(ii);
|
||||||
vcaz.set(jj);
|
vcaz.set(jj);
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(Throwable ex)
|
||||||
|
{
|
||||||
|
draw(ii, jj, COLOR_ERROR);
|
||||||
|
ChunkPosition pos = new ChunkPosition(ii, jj);
|
||||||
|
errors.add(pos);
|
||||||
|
totalChunks.addAndGet(1024);
|
||||||
|
mcaDefer.add(new ChunkPosition(pos.getX() >> 5, pos.getZ() >> 5));
|
||||||
|
Iris.warn("Hole Detected in Chunk: " + pos.getX() + ", " + pos.getZ() + " (at block " + (pos.getX() << 4) + ", " + lowestBedrock + ", " + (pos.getZ() << 4) + ")");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
e.complete();
|
e.complete();
|
||||||
@ -314,7 +341,9 @@ public class Pregenerator implements Listener
|
|||||||
q.add(() -> {
|
q.add(() -> {
|
||||||
draw(ii, jj, COLOR_MCA_GENERATE_SLOW);
|
draw(ii, jj, COLOR_MCA_GENERATE_SLOW);
|
||||||
world.getChunkAt(ii, jj).load(true);
|
world.getChunkAt(ii, jj).load(true);
|
||||||
|
Chunk c = world.getChunkAt(ii, jj);
|
||||||
draw(ii, jj, COLOR_MCA_GENERATED);
|
draw(ii, jj, COLOR_MCA_GENERATED);
|
||||||
|
checkForError(c);
|
||||||
m.getAndIncrement();
|
m.getAndIncrement();
|
||||||
generated.getAndIncrement();
|
generated.getAndIncrement();
|
||||||
vcax.set(ii);
|
vcax.set(ii);
|
||||||
@ -355,6 +384,21 @@ public class Pregenerator implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkForError(Chunk c) {
|
||||||
|
if(lowestBedrock >= 0 && lowestBedrock < 256)
|
||||||
|
{
|
||||||
|
if(!c.getBlock(14, lowestBedrock, 14).getType().equals(Material.BEDROCK))
|
||||||
|
{
|
||||||
|
ChunkPosition pos = new ChunkPosition(c.getX(), c.getZ());
|
||||||
|
errors.add(pos);
|
||||||
|
totalChunks.addAndGet(1024);
|
||||||
|
mcaDefer.add(new ChunkPosition(pos.getX() >> 5, pos.getZ() >> 5));
|
||||||
|
draw(pos.getX(), pos.getZ(), COLOR_ERROR);
|
||||||
|
Iris.warn("Hole Detected in Chunk: " + pos.getX() + ", " + pos.getZ() + " (at block " + (pos.getX() << 4) + ", " + lowestBedrock + ", " + (pos.getZ() << 4) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private KList<ChunkPosition> computeChunkOrder() {
|
private KList<ChunkPosition> computeChunkOrder() {
|
||||||
ChunkPosition center = new ChunkPosition(15, 15);
|
ChunkPosition center = new ChunkPosition(15, 15);
|
||||||
KList<ChunkPosition> p = new KList<>();
|
KList<ChunkPosition> p = new KList<>();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.volmit.iris.scaffold.engine;
|
package com.volmit.iris.scaffold.engine;
|
||||||
|
|
||||||
|
import com.volmit.iris.generator.actuator.IrisTerrainActuator;
|
||||||
import com.volmit.iris.manager.IrisDataManager;
|
import com.volmit.iris.manager.IrisDataManager;
|
||||||
import com.volmit.iris.object.IrisBiome;
|
import com.volmit.iris.object.IrisBiome;
|
||||||
import com.volmit.iris.object.IrisDimension;
|
import com.volmit.iris.object.IrisDimension;
|
||||||
@ -151,4 +152,26 @@ public interface EngineCompound extends Listener, Hotloadable, DataProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateWorld(World world);
|
void updateWorld(World world);
|
||||||
|
|
||||||
|
default int getLowestBedrock()
|
||||||
|
{
|
||||||
|
int f = Integer.MAX_VALUE;
|
||||||
|
|
||||||
|
for(int i = 0; i < getSize(); i++)
|
||||||
|
{
|
||||||
|
Engine e = getEngine(i);
|
||||||
|
|
||||||
|
if(e.getDimension().isBedrock())
|
||||||
|
{
|
||||||
|
int m = ((IrisTerrainActuator)e.getFramework().getTerrainActuator()).getLastBedrock();
|
||||||
|
|
||||||
|
if(f > m)
|
||||||
|
{
|
||||||
|
f = m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user