mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Surface decorators (including bisected blocks)
This commit is contained in:
parent
58dcb72adc
commit
27ce6ad5ba
@ -19,7 +19,6 @@ import ninja.bytecode.iris.util.IrisInterpolation;
|
|||||||
import ninja.bytecode.iris.util.RNG;
|
import ninja.bytecode.iris.util.RNG;
|
||||||
import ninja.bytecode.shuriken.collections.KList;
|
import ninja.bytecode.shuriken.collections.KList;
|
||||||
import ninja.bytecode.shuriken.collections.KMap;
|
import ninja.bytecode.shuriken.collections.KMap;
|
||||||
import ninja.bytecode.shuriken.logging.L;
|
|
||||||
import ninja.bytecode.shuriken.math.M;
|
import ninja.bytecode.shuriken.math.M;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -2,11 +2,14 @@ package ninja.bytecode.iris.generator;
|
|||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.data.Bisected;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.block.data.Bisected.Half;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import ninja.bytecode.iris.object.IrisBiome;
|
import ninja.bytecode.iris.object.IrisBiome;
|
||||||
|
import ninja.bytecode.iris.object.IrisBiomeDecorator;
|
||||||
import ninja.bytecode.iris.object.IrisRegion;
|
import ninja.bytecode.iris.object.IrisRegion;
|
||||||
import ninja.bytecode.iris.object.atomics.AtomicSliver;
|
import ninja.bytecode.iris.object.atomics.AtomicSliver;
|
||||||
import ninja.bytecode.iris.util.BiomeMap;
|
import ninja.bytecode.iris.util.BiomeMap;
|
||||||
@ -68,7 +71,38 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
|
|||||||
block = layers.hasIndex(depth) ? layers.get(depth) : STONE;
|
block = layers.hasIndex(depth) ? layers.get(depth) : STONE;
|
||||||
depth++;
|
depth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
sliver.set(k, block);
|
sliver.set(k, block);
|
||||||
|
|
||||||
|
if(k == Math.max(height, fluidHeight) && block.getMaterial().isSolid() && k < 255)
|
||||||
|
{
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
|
for(IrisBiomeDecorator i : biome.getDecorators())
|
||||||
|
{
|
||||||
|
BlockData d = i.getBlockData(getMasterRandom().nextParallelRNG(biome.hashCode() + j++), wx, wz);
|
||||||
|
|
||||||
|
if(d != null)
|
||||||
|
{
|
||||||
|
if(d instanceof Bisected && k < 254)
|
||||||
|
{
|
||||||
|
Bisected t = ((Bisected) d.clone());
|
||||||
|
t.setHalf(Half.TOP);
|
||||||
|
Bisected b = ((Bisected) d.clone());
|
||||||
|
b.setHalf(Half.BOTTOM);
|
||||||
|
sliver.set(k + 1, b);
|
||||||
|
sliver.set(k + 2, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sliver.set(k + 1, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,9 +12,11 @@ import ninja.bytecode.shuriken.collections.KMap;
|
|||||||
@Data
|
@Data
|
||||||
public class IrisBiomeDecorator
|
public class IrisBiomeDecorator
|
||||||
{
|
{
|
||||||
|
private Dispersion variance = Dispersion.SCATTER;
|
||||||
private Dispersion dispersion = Dispersion.SCATTER;
|
private Dispersion dispersion = Dispersion.SCATTER;
|
||||||
private int iterations = 5;
|
private int iterations = 5;
|
||||||
private double zoom = 1;
|
private double zoom = 1;
|
||||||
|
private double chance = 0.1;
|
||||||
private KList<String> palette = new KList<String>().qadd("GRASS");
|
private KList<String> palette = new KList<String>().qadd("GRASS");
|
||||||
|
|
||||||
private transient KMap<Long, CNG> layerGenerators;
|
private transient KMap<Long, CNG> layerGenerators;
|
||||||
@ -33,17 +35,26 @@ public class IrisBiomeDecorator
|
|||||||
{
|
{
|
||||||
layerGenerators.put(key, CNG.signature(rng.nextParallelRNG(iterations + getBlockData().size())));
|
layerGenerators.put(key, CNG.signature(rng.nextParallelRNG(iterations + getBlockData().size())));
|
||||||
}
|
}
|
||||||
|
|
||||||
return layerGenerators.get(key);
|
return layerGenerators.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public KList<String> add(String b)
|
public KList<String> add(String b)
|
||||||
{
|
{
|
||||||
palette.add(b);
|
palette.add(b);
|
||||||
|
|
||||||
return palette;
|
return palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BlockData getBlockData(RNG rng, double x, double z)
|
||||||
|
{
|
||||||
|
if(getGenerator(rng).fitDoubleD(0D, 1D, x * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D), z * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D)) <= chance)
|
||||||
|
{
|
||||||
|
return getBlockData().get(getGenerator(rng.nextParallelRNG(53)).fit(0, getBlockData().size() - 1, x * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D), z * (dispersion.equals(Dispersion.SCATTER) ? 1000D : 1D)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public KList<BlockData> getBlockData()
|
public KList<BlockData> getBlockData()
|
||||||
{
|
{
|
||||||
if(blockData == null)
|
if(blockData == null)
|
||||||
|
@ -6,7 +6,6 @@ import org.bukkit.util.BlockVector;
|
|||||||
|
|
||||||
import ninja.bytecode.iris.Iris;
|
import ninja.bytecode.iris.Iris;
|
||||||
import ninja.bytecode.iris.object.IrisObject;
|
import ninja.bytecode.iris.object.IrisObject;
|
||||||
import ninja.bytecode.shuriken.logging.L;
|
|
||||||
|
|
||||||
public class ObjectResourceLoader extends ResourceLoader<IrisObject>
|
public class ObjectResourceLoader extends ResourceLoader<IrisObject>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user