mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-29 12:09:07 +00:00
ff
This commit is contained in:
@@ -60,7 +60,7 @@ public abstract class ContextualTerrainProvider implements TerrainProvider, List
|
||||
private boolean failing;
|
||||
private int task;
|
||||
private boolean dev;
|
||||
private boolean initialized;
|
||||
private volatile boolean initialized;
|
||||
private RNG masterRandom;
|
||||
private ChronoLatch perSecond;
|
||||
private ChronoLatch tickLatch;
|
||||
@@ -156,10 +156,10 @@ public abstract class ContextualTerrainProvider implements TerrainProvider, List
|
||||
return;
|
||||
}
|
||||
|
||||
setInitialized(true);
|
||||
setData(new IrisDataManager(getTarget().getFolder()));
|
||||
setMasterRandom(new RNG(getTarget().getSeed()));
|
||||
setMetrics(new IrisMetrics(128));
|
||||
setInitialized(true);
|
||||
setTask(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::tick, 0, 0));
|
||||
Bukkit.getServer().getPluginManager().registerEvents(this, Iris.instance);
|
||||
onInit(masterRandom);
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.volmit.iris.object.InferredType;
|
||||
import com.volmit.iris.object.IrisBiome;
|
||||
import com.volmit.iris.object.IrisBiomeDecorator;
|
||||
import com.volmit.iris.object.IrisBiomeGeneratorLink;
|
||||
import com.volmit.iris.object.IrisDepositGenerator;
|
||||
import com.volmit.iris.object.IrisDimension;
|
||||
import com.volmit.iris.object.IrisGenerator;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
@@ -65,8 +64,9 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
|
||||
public void onInit(RNG rng)
|
||||
{
|
||||
super.onInit(rng);
|
||||
loadGenerators();
|
||||
getData().preferFolder(getDimension().getLoadFile().getParentFile().getParentFile().getName());
|
||||
buildGenLayers(getMasterRandom());
|
||||
loadGenerators();
|
||||
}
|
||||
|
||||
private void buildGenLayers(RNG rng)
|
||||
@@ -347,30 +347,6 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
|
||||
protected void onGenerate(RNG random, int x, int z, TerrainChunk terrain)
|
||||
{
|
||||
super.onGenerate(random, x, z, terrain);
|
||||
RNG ro = random.nextParallelRNG((x * x * x) - z);
|
||||
IrisRegion region = sampleRegion((x * 16) + 7, (z * 16) + 7);
|
||||
IrisBiome biome = sampleTrueBiome((x * 16) + 7, (z * 16) + 7);
|
||||
|
||||
for(IrisDepositGenerator k : getDimension().getDeposits())
|
||||
{
|
||||
k.generate(terrain, ro, this, x, z);
|
||||
}
|
||||
|
||||
for(IrisDepositGenerator k : region.getDeposits())
|
||||
{
|
||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
||||
{
|
||||
k.generate(terrain, ro, this, x, z);
|
||||
}
|
||||
}
|
||||
|
||||
for(IrisDepositGenerator k : biome.getDeposits())
|
||||
{
|
||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
||||
{
|
||||
k.generate(terrain, ro, this, x, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void decorateLand(IrisBiome biome, AtomicSliver sliver, double wx, int k, double wz, int rx, int rz, BlockData block)
|
||||
@@ -836,6 +812,7 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
|
||||
{
|
||||
if(dim == null)
|
||||
{
|
||||
Iris.warn("Cannot load generators, Dimension is null!");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -868,6 +845,8 @@ public abstract class TopographicTerrainProvider extends ParallelTerrainProvider
|
||||
loadQueue.addAll(biome.getChildren());
|
||||
}
|
||||
}
|
||||
|
||||
Iris.info("Loaded " + generators.size() + " Generators");
|
||||
}
|
||||
|
||||
public IrisBiome sampleBiome(int x, int z)
|
||||
|
||||
@@ -6,10 +6,10 @@ import org.bukkit.block.data.BlockData;
|
||||
import com.volmit.iris.gen.DimensionalTerrainProvider;
|
||||
import com.volmit.iris.gen.IrisTerrainProvider;
|
||||
import com.volmit.iris.gen.atomics.AtomicSliver;
|
||||
import com.volmit.iris.noise.FastNoise;
|
||||
import com.volmit.iris.noise.FastNoise.CellularDistanceFunction;
|
||||
import com.volmit.iris.noise.FastNoise.CellularReturnType;
|
||||
import com.volmit.iris.noise.FastNoise.NoiseType;
|
||||
import com.volmit.iris.noise.FastNoiseDouble;
|
||||
import com.volmit.iris.noise.FastNoiseDouble.CellularDistanceFunction;
|
||||
import com.volmit.iris.noise.FastNoiseDouble.CellularReturnType;
|
||||
import com.volmit.iris.noise.FastNoiseDouble.NoiseType;
|
||||
import com.volmit.iris.object.IrisCaveLayer;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.CaveResult;
|
||||
@@ -23,13 +23,13 @@ public class GenLayerCave extends GenLayer
|
||||
public static final BlockData CAVE_AIR = B.getBlockData("CAVE_AIR");
|
||||
public static final BlockData AIR = B.getBlockData("AIR");
|
||||
private static final KList<CaveResult> EMPTY = new KList<>();
|
||||
private FastNoise gg;
|
||||
private FastNoiseDouble gg;
|
||||
|
||||
public GenLayerCave(DimensionalTerrainProvider iris, RNG rng)
|
||||
{
|
||||
//@builder
|
||||
super(iris, rng);
|
||||
gg = new FastNoise(324895 * rng.nextParallelRNG(49678).imax());
|
||||
gg = new FastNoiseDouble(324895 * rng.nextParallelRNG(49678).imax());
|
||||
//@done
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class GenLayerCave extends GenLayer
|
||||
|
||||
for(double tunnelHeight = 1; tunnelHeight <= baseWidth; tunnelHeight++)
|
||||
{
|
||||
double distance = (gg.GetCellular((float) ((wx + (10000 * seed)) / layer.getCaveZoom()), (float) ((wz - (10000 * seed)) / layer.getCaveZoom())) + 1D) / 2D;
|
||||
double distance = (gg.GetCellular(((wx + (10000 * seed)) / layer.getCaveZoom()), ((wz - (10000 * seed)) / layer.getCaveZoom())) + 1D) / 2D;
|
||||
if(distance < distanceCheck - (tunnelHeight * distanceTake))
|
||||
{
|
||||
int caveHeight = (int) Math.round(caveHeightNoise);
|
||||
|
||||
@@ -16,8 +16,10 @@ import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.gen.IrisTerrainProvider;
|
||||
import com.volmit.iris.gen.ParallaxTerrainProvider;
|
||||
import com.volmit.iris.gen.atomics.AtomicSliverMap;
|
||||
import com.volmit.iris.gen.scaffold.ChunkWrapper;
|
||||
import com.volmit.iris.object.InventorySlotType;
|
||||
import com.volmit.iris.object.IrisBiome;
|
||||
import com.volmit.iris.object.IrisDepositGenerator;
|
||||
import com.volmit.iris.object.IrisLootReference;
|
||||
import com.volmit.iris.object.IrisLootTable;
|
||||
import com.volmit.iris.object.IrisRegion;
|
||||
@@ -45,7 +47,51 @@ public class GenLayerUpdate extends BlockPopulator
|
||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||
AtomicSliverMap map = gen.getParallaxChunk(c.getX(), c.getZ());
|
||||
RNG rx = rng.nextParallelRNG(c.getX() + r.nextInt()).nextParallelRNG(c.getZ() + r.nextInt());
|
||||
generateDeposits(w, rx, c);
|
||||
updateBlocks(w, rx, c, map);
|
||||
spawnInitials(c, rx);
|
||||
p.end();
|
||||
gen.getMetrics().getUpdate().put(p.getMilliseconds());
|
||||
}
|
||||
|
||||
public void spawnInitials(Chunk c, RNG rx)
|
||||
{
|
||||
((IrisTerrainProvider) gen).spawnInitials(c, rx);
|
||||
}
|
||||
|
||||
public void generateDeposits(World w, RNG rx, Chunk c)
|
||||
{
|
||||
int x = c.getX();
|
||||
int z = c.getZ();
|
||||
RNG ro = rx.nextParallelRNG((x * x * x) - z);
|
||||
IrisRegion region = gen.sampleRegion((x * 16) + 7, (z * 16) + 7);
|
||||
IrisBiome biome = gen.sampleTrueBiome((x * 16) + 7, (z * 16) + 7);
|
||||
ChunkWrapper terrain = new ChunkWrapper(c);
|
||||
|
||||
for(IrisDepositGenerator k : gen.getDimension().getDeposits())
|
||||
{
|
||||
k.generate(terrain, ro, gen, x, z);
|
||||
}
|
||||
|
||||
for(IrisDepositGenerator k : region.getDeposits())
|
||||
{
|
||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
||||
{
|
||||
k.generate(terrain, ro, gen, x, z);
|
||||
}
|
||||
}
|
||||
|
||||
for(IrisDepositGenerator k : biome.getDeposits())
|
||||
{
|
||||
for(int l = 0; l < ro.i(k.getMinPerChunk(), k.getMaxPerChunk()); l++)
|
||||
{
|
||||
k.generate(terrain, ro, gen, x, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateBlocks(World w, RNG rx, Chunk c, AtomicSliverMap map)
|
||||
{
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
for(int j = 0; j < 16; j++)
|
||||
@@ -61,11 +107,6 @@ public class GenLayerUpdate extends BlockPopulator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
((IrisTerrainProvider) gen).spawnInitials(c, rx);
|
||||
|
||||
p.end();
|
||||
gen.getMetrics().getUpdate().put(p.getMilliseconds());
|
||||
}
|
||||
|
||||
public void update(Chunk c, int x, int y, int z, int rx, int rz, RNG rng)
|
||||
|
||||
84
src/main/java/com/volmit/iris/gen/scaffold/ChunkWrapper.java
Normal file
84
src/main/java/com/volmit/iris/gen/scaffold/ChunkWrapper.java
Normal file
@@ -0,0 +1,84 @@
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ChunkWrapper implements ChunkData
|
||||
{
|
||||
private final Chunk chunk;
|
||||
|
||||
public ChunkWrapper(Chunk chunk)
|
||||
{
|
||||
this.chunk = chunk;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxHeight()
|
||||
{
|
||||
return chunk.getWorld().getMaxHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlock(int x, int y, int z, Material material)
|
||||
{
|
||||
chunk.getBlock(x, y, z).setType(material, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlock(int x, int y, int z, MaterialData material)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlock(int x, int y, int z, BlockData blockData)
|
||||
{
|
||||
chunk.getBlock(x, y, z).setBlockData(blockData, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRegion(int xMin, int yMin, int zMin, int xMax, int yMax, int zMax, Material material)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRegion(int xMin, int yMin, int zMin, int xMax, int yMax, int zMax, MaterialData material)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRegion(int xMin, int yMin, int zMin, int xMax, int yMax, int zMax, BlockData blockData)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Material getType(int x, int y, int z)
|
||||
{
|
||||
return chunk.getBlock(x, y, z).getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialData getTypeAndData(int x, int y, int z)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockData getBlockData(int x, int y, int z)
|
||||
{
|
||||
return chunk.getBlock(x, y, z).getBlockData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte getData(int x, int y, int z)
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,12 @@ import com.volmit.iris.gen.IrisTerrainProvider;
|
||||
|
||||
public class IrisWorlds
|
||||
{
|
||||
public boolean isIrisWorld(World world)
|
||||
public static boolean isIrisWorld(World world)
|
||||
{
|
||||
return world.getGenerator() instanceof Provisioned;
|
||||
}
|
||||
|
||||
public IrisTerrainProvider getProvider(World world)
|
||||
public static IrisTerrainProvider getProvider(World world)
|
||||
{
|
||||
if(isIrisWorld(world))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user