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; package com.volmit.iris.scaffold;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager; import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator; 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;
import org.bukkit.World.Environment; import org.bukkit.World.Environment;
import org.bukkit.WorldCreator; import org.bukkit.WorldCreator;
import org.bukkit.entity.Player;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class IrisWorldCreator public class IrisWorldCreator
{ {
private String name; private String name;
private boolean studio = false; private boolean studio = false;
private String dimensionName = null; private String dimensionName = null;
private long seed = 1337; private long seed = 1337;
private boolean asyncPrepare = false;
public IrisWorldCreator() public IrisWorldCreator()
{ {
@ -50,6 +59,12 @@ public class IrisWorldCreator
return this; return this;
} }
public IrisWorldCreator asyncPrepare()
{
this.asyncPrepare = true;
return this;
}
public IrisWorldCreator productionMode() public IrisWorldCreator productionMode()
{ {
this.studio = false; this.studio = false;
@ -58,7 +73,7 @@ public class IrisWorldCreator
public WorldCreator create() public WorldCreator create()
{ {
ChunkGenerator g = new EngineCompositeGenerator(dimensionName, !studio); EngineCompositeGenerator g = new EngineCompositeGenerator(dimensionName, !studio);
return new WorldCreator(name) return new WorldCreator(name)
.environment(findEnvironment()) .environment(findEnvironment())
@ -66,6 +81,24 @@ public class IrisWorldCreator
.generator(g).seed(seed); .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() { private World.Environment findEnvironment() {
IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName); IrisDimension dim = IrisDataManager.loadAnyDimension(dimensionName);
if(dim == null || dim.getEnvironment() == null) if(dim == null || dim.getEnvironment() == null)