Le Pregenerator with headless mode

This commit is contained in:
Daniel Mills 2021-07-19 10:46:03 -04:00
parent c3e2d34372
commit cfe91a8722
26 changed files with 98 additions and 30 deletions

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.util.board.BoardManager;

View File

@ -23,7 +23,7 @@ import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.core.report.Report;
import com.volmit.iris.core.report.ReportType;
import com.volmit.iris.engine.IrisWorldCreator;
import com.volmit.iris.core.tools.IrisWorldCreator;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.*;

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core.command;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.plugin.MortarCommand;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisRegion;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.plugin.MortarCommand;
import com.volmit.iris.util.plugin.VolmitSender;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.InventorySlotType;
import com.volmit.iris.engine.object.IrisLootTable;

View File

@ -21,7 +21,7 @@ package com.volmit.iris.core.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.gui.VisionGUI;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.util.collection.KList;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.command.studio;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisEntity;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.command.what;
import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.util.collection.KList;

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core.command.what;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisObject;

View File

@ -24,7 +24,7 @@ import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.core.gui.components.Pregenerator;
import com.volmit.iris.core.link.MultiverseCoreLink;
import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.engine.IrisWorldCreator;
import com.volmit.iris.core.tools.IrisWorldCreator;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.util.collection.KList;

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core.command.world;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.format.Form;

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core.command.world;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.plugin.MortarCommand;
import com.volmit.iris.util.plugin.VolmitSender;

View File

@ -19,7 +19,7 @@
package com.volmit.iris.core.edit;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.parallax.ParallaxAccess;
import com.volmit.iris.util.collection.KList;

View File

@ -29,7 +29,6 @@ import com.volmit.iris.util.format.Form;
import com.volmit.iris.util.function.Consumer2;
import com.volmit.iris.util.math.M;
import com.volmit.iris.util.math.Position2;
import com.volmit.iris.util.math.Spiraler;
import com.volmit.iris.util.scheduling.J;
import javax.swing.*;
@ -38,6 +37,7 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
public class PregeneratorJob implements PregenListener {
public static PregeneratorJob instance;
@ -46,6 +46,8 @@ public class PregeneratorJob implements PregenListener {
private JFrame frame;
private final PregenTask task;
private boolean saving;
private KList<Consumer<Double>> onProgress = new KList<>();
private KList<Runnable> whenDone = new KList<>();
private final IrisPregenerator pregenerator;
private PregenRenderer renderer;
private String[] info;
@ -72,6 +74,18 @@ public class PregeneratorJob implements PregenListener {
open();
}
public PregeneratorJob onProgress(Consumer<Double> c)
{
onProgress.add(c);
return this;
}
public PregeneratorJob whenDone(Runnable r)
{
whenDone.add(r);
return this;
}
public static boolean shutdownInstance() {
if(instance == null)
{
@ -190,6 +204,11 @@ public class PregeneratorJob implements PregenListener {
Form.duration(eta, 2) + " Remaining " + " (" + Form.duration(elapsed, 2) + " Elapsed)",
"Generation Method: " + method,
};
for(Consumer<Double> i : onProgress)
{
i.accept(percent);
}
}
@Override
@ -221,6 +240,7 @@ public class PregeneratorJob implements PregenListener {
public void onClose() {
close();
instance = null;
whenDone.forEach(Runnable::run);
}
@Override

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.gui.components;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisSettings;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.data.mca.MCAFile;
import com.volmit.iris.engine.data.mca.NBTWorld;
import com.volmit.iris.engine.framework.IrisAccess;

View File

@ -28,9 +28,14 @@ public class HeadlessPregenMethod implements PregeneratorMethod {
private final HeadlessGenerator generator;
public HeadlessPregenMethod(HeadlessWorld world)
{
this(world, world.generate());
}
public HeadlessPregenMethod(HeadlessWorld world, HeadlessGenerator generator)
{
this.world = world;
this.generator = world.generate();
this.generator = generator;
}
@Override

View File

@ -20,7 +20,7 @@ package com.volmit.iris.core.pregenerator.methods;
import com.volmit.iris.core.pregenerator.PregenListener;
import com.volmit.iris.core.pregenerator.PregeneratorMethod;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.headless.HeadlessWorld;
import org.bukkit.World;

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine;
package com.volmit.iris.core.tools;
import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.framework.EngineCompositeGenerator;
@ -100,4 +100,9 @@ public class IrisWorldCreator {
return dim.getEnvironment();
}
}
public IrisWorldCreator studio(boolean studio) {
this.studio = studio;
return this;
}
}

View File

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.volmit.iris.engine;
package com.volmit.iris.core.tools;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.framework.IrisAccess;

View File

@ -26,11 +26,10 @@ import com.volmit.iris.core.nms.INMS;
import com.volmit.iris.core.pregenerator.PregenListener;
import com.volmit.iris.core.pregenerator.PregenTask;
import com.volmit.iris.engine.IrisEngineCompound;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.engine.cache.Cache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.chunk.TerrainChunk;
import com.volmit.iris.engine.data.mca.NBTWorld;
import com.volmit.iris.engine.headless.HeadlessGenerator;
import com.volmit.iris.engine.hunk.Hunk;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisDimension;
@ -78,6 +77,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
private final boolean production;
private final KList<BlockPopulator> populators;
private long mst = 0;
private HeadlessGenerator headlessGenerator;
private NBTWorld nbtWorld;
private int generated = 0;
private int lgenerated = 0;
private final ChronoLatch hotloadcd;
@ -460,6 +461,26 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return tc.getRaw();
}
public void assignHeadlessGenerator(HeadlessGenerator headlessGenerator)
{
this.headlessGenerator = headlessGenerator;
}
@Override
public HeadlessGenerator getHeadlessGenerator() {
return headlessGenerator;
}
public void assignHeadlessNBTWriter(NBTWorld writer)
{
this.nbtWorld = writer;
}
@Override
public NBTWorld getHeadlessNBTWriter() {
return nbtWorld;
}
@Override
public void directWriteMCA(IrisWorld w, int x, int z, NBTWorld writer, MultiBurst burst) {
directWriteMCA(w, x, z, writer, burst, null);

View File

@ -24,6 +24,7 @@ import com.volmit.iris.core.pregenerator.PregenListener;
import com.volmit.iris.engine.IrisComplex;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.data.mca.NBTWorld;
import com.volmit.iris.engine.headless.HeadlessGenerator;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.engine.object.IrisRegion;
import com.volmit.iris.engine.object.common.IrisWorld;
@ -46,6 +47,14 @@ import java.util.function.Consumer;
@SuppressWarnings("EmptyMethod")
public interface IrisAccess extends Hotloadable, DataProvider {
HeadlessGenerator getHeadlessGenerator();
default boolean isHeadless(){
return getHeadlessGenerator() != null;
}
NBTWorld getHeadlessNBTWriter();
void directWriteMCA(IrisWorld w, int x, int z, NBTWorld writer, MultiBurst burst);
void directWriteMCA(IrisWorld w, int x, int z, NBTWorld writer, MultiBurst burst, PregenListener listener);

View File

@ -37,9 +37,11 @@ public class HeadlessGenerator {
{
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());
generator = new EngineCompositeGenerator(world.getDimension().getLoadKey(), !world.isStudio());
generator.assignHeadlessGenerator(this);
generator.assignHeadlessNBTWriter(writer);
generator.initialize(world.getWorld());
}
public void generateChunk(int x, int z)

View File

@ -20,9 +20,8 @@ package com.volmit.iris.engine.headless;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.EngineCompositeGenerator;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.common.IrisWorld;
import com.volmit.iris.util.plugin.VolmitSender;
@ -39,11 +38,18 @@ public class HeadlessWorld {
private final IrisDimension dimension;
private final String worldName;
private final IrisWorld world;
private boolean studio = false;
public HeadlessWorld(String worldName, IrisDimension dimension, long seed)
{
this(worldName, dimension, seed, false);
}
public HeadlessWorld(String worldName, IrisDimension dimension, long seed, boolean studio)
{
this.worldName = worldName;
this.dimension = dimension;
this.studio = studio;
world = IrisWorld.builder()
.environment(dimension.getEnvironment())
.worldFolder(new File(worldName))
@ -55,7 +61,7 @@ public class HeadlessWorld {
world.worldFolder().mkdirs();
new File(world.worldFolder(), "region").mkdirs();
if(!new File(world.worldFolder(), "iris").exists())
if(!studio && !new File(world.worldFolder(), "iris").exists())
{
Iris.proj.installIntoWorld(new VolmitSender(Bukkit.getConsoleSender(), Iris.instance.getTag("Headless")), dimension.getLoadKey(), world.worldFolder());
}
@ -71,7 +77,7 @@ public class HeadlessWorld {
return new WorldCreator(worldName)
.environment(dimension.getEnvironment())
.seed(world.seed())
.generator(new EngineCompositeGenerator(dimension.getLoadKey(), true))
.generator(new EngineCompositeGenerator(dimension.getLoadKey(), !studio))
.createWorld();
}

View File

@ -19,7 +19,7 @@
package com.volmit.iris.engine.jigsaw;
import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.object.*;

View File

@ -20,7 +20,7 @@ package com.volmit.iris.engine.jigsaw;
import com.volmit.iris.Iris;
import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.IrisWorlds;
import com.volmit.iris.core.tools.IrisWorlds;
import com.volmit.iris.engine.framework.EngineParallaxManager;
import com.volmit.iris.engine.framework.IrisAccess;
import com.volmit.iris.engine.interpolation.InterpolationMethod;