Support async creation

This commit is contained in:
Daniel Mills 2021-06-11 16:52:30 -04:00
parent 6e74761977
commit 73bd7991bb

View File

@ -1,19 +1,28 @@
package com.volmit.iris.scaffold;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.J;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldCreator;
import org.bukkit.entity.Player;
import org.bukkit.generator.ChunkGenerator;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class IrisWorldCreator
{
private String name;
private boolean studio = false;
private String dimensionName = null;
private long seed = 1337;
private boolean asyncPrepare = false;
public IrisWorldCreator()
{
@ -50,6 +59,12 @@ public class IrisWorldCreator
return this;
}
public IrisWorldCreator asyncPrepare()
{
this.asyncPrepare = true;
return this;
}
public IrisWorldCreator productionMode()
{
this.studio = false;
@ -58,7 +73,7 @@ public class IrisWorldCreator
public WorldCreator create()
{
ChunkGenerator g = new EngineCompositeGenerator(dimensionName, !studio);
EngineCompositeGenerator g = new EngineCompositeGenerator(dimensionName, !studio);
return new WorldCreator(name)
.environment(findEnvironment())
@ -66,6 +81,24 @@ public class IrisWorldCreator
.generator(g).seed(seed);
}
public void createAsync(Consumer<WorldCreator> result)
{
EngineCompositeGenerator g = new EngineCompositeGenerator(dimensionName, !studio);
Environment env = findEnvironment();
g.prepareSpawnAsync(seed, name, env, 16, (progresss) -> {
for(Player i : Bukkit.getOnlinePlayers())
{
i.sendMessage("Async Prepare 32x32: " + Form.pc(progresss, 2));
}
}, () -> {
J.s(() -> result.accept(new WorldCreator(name)
.environment(env)
.generateStructures(true)
.generator(g).seed(seed)));
});
}
private World.Environment findEnvironment() {
IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName);
if(dim == null || dim.getEnvironment() == null)