mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-09 17:26:22 +00:00
Entity spawns
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user