Entity spawns

This commit is contained in:
Daniel Mills
2020-11-14 22:27:37 -05:00
parent e0fc4b9443
commit 44d86bc350
17 changed files with 265 additions and 106 deletions

View File

@@ -1,7 +1,13 @@
package com.volmit.iris.scaffold.cache;
import org.bukkit.Chunk;
public interface Cache<V>
{
static long key(Chunk chunk) {
return key(chunk.getX(), chunk.getZ());
}
public int getId();
public V get(int x, int z);

View File

@@ -6,6 +6,7 @@ import com.volmit.iris.scaffold.cache.Cache;
import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
import com.volmit.iris.scaffold.parallel.MultiBurst;
import com.volmit.iris.util.B;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
@@ -320,4 +321,16 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
{
return getHeight() + getMinHeight();
}
public EngineCompound getCompound();
public default boolean isStudio()
{
return getCompound().isStudio();
}
public default void clean()
{
MultiBurst.burst.lazy(() -> getParallax().cleanup());
}
}

View File

@@ -2,16 +2,13 @@ package com.volmit.iris.scaffold.engine;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.IrisEngineCompound;
import com.volmit.iris.util.TerrainChunk;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.cache.Cache;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.M;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.*;
import org.bukkit.*;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@@ -33,6 +30,8 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
private final boolean production;
private final KList<BlockPopulator> populators;
private int generated = 0;
private int art;
private ReactiveFolder hotloader = null;
public EngineCompositeGenerator() {
this(null, true);
@@ -43,6 +42,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
this.production = production;
this.dimensionHint = hint;
initialized = new AtomicBoolean(false);
art = J.ar(this::tick, 20);
populators = new KList<BlockPopulator>().qadd(new BlockPopulator() {
@Override
public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) {
@@ -63,6 +63,30 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
initialized.lazySet(false);
}
public void tick()
{
if(isClosed())
{
return;
}
if(!initialized.get())
{
return;
}
try
{
hotloader.check();
getComposite().clean();
}
catch(Throwable e)
{
}
}
private synchronized IrisDimension getDimension(World world) {
String hint = dimensionHint;
IrisDimension dim = null;
@@ -124,9 +148,11 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
IrisDimension dim = getDimension(world);
IrisDataManager data = production ? new IrisDataManager(getDataFolder(world)) : dim.getLoader().copy();
compound = new IrisEngineCompound(world, dim, data, Iris.getThreadCount());
compound.setStudio(!production);
initialized.set(true);
populators.clear();
populators.addAll(compound.getPopulators());
hotloader = new ReactiveFolder(data.getDataFolder(), (a, c, d) -> hotload());
}
private File getDataFolder(World world) {
@@ -385,6 +411,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
@Override
public void close() {
J.car(art);
getComposite().close();
IrisWorlds.evacuate(getComposite().getWorld());
Bukkit.unloadWorld(getComposite().getWorld(), !isStudio());

View File

@@ -91,4 +91,16 @@ public interface EngineCompound extends Listener
public boolean isFailing();
public int getThreadCount();
public boolean isStudio();
public void setStudio(boolean std);
public default void clean()
{
for(int i = 0; i < getSize(); i++)
{
getEngine(i).clean();
}
}
}

View File

@@ -1,6 +1,5 @@
package com.volmit.iris.scaffold.hunk.io;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.scaffold.data.IOAdapter;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.util.ByteArrayTag;
@@ -21,7 +20,7 @@ public interface HunkIOAdapter<T> extends IOAdapter<T>
{
f.getParentFile().mkdirs();
FileOutputStream fos = new FileOutputStream(f);
GZIPOutputStream gzo = new CustomOutputStream(fos, IrisSettings.get().parallaxCompressionLevel);
GZIPOutputStream gzo = new CustomOutputStream(fos, 6);
write(t, gzo);
}