diff --git a/src/main/java/ninja/bytecode/iris/generator/BiomeChunkGenerator.java b/src/main/java/ninja/bytecode/iris/generator/BiomeChunkGenerator.java index 9817185e2..b7043c70b 100644 --- a/src/main/java/ninja/bytecode/iris/generator/BiomeChunkGenerator.java +++ b/src/main/java/ninja/bytecode/iris/generator/BiomeChunkGenerator.java @@ -19,7 +19,6 @@ import ninja.bytecode.iris.util.IrisInterpolation; import ninja.bytecode.iris.util.RNG; import ninja.bytecode.shuriken.collections.KList; import ninja.bytecode.shuriken.collections.KMap; -import ninja.bytecode.shuriken.logging.L; import ninja.bytecode.shuriken.math.M; @Data diff --git a/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java b/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java index 4ae994c17..da127d0a7 100644 --- a/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java +++ b/src/main/java/ninja/bytecode/iris/generator/TerrainChunkGenerator.java @@ -2,11 +2,14 @@ package ninja.bytecode.iris.generator; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.Bisected.Half; import lombok.Data; import lombok.EqualsAndHashCode; import ninja.bytecode.iris.object.IrisBiome; +import ninja.bytecode.iris.object.IrisBiomeDecorator; import ninja.bytecode.iris.object.IrisRegion; import ninja.bytecode.iris.object.atomics.AtomicSliver; import ninja.bytecode.iris.util.BiomeMap; @@ -68,7 +71,38 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator block = layers.hasIndex(depth) ? layers.get(depth) : STONE; depth++; } + 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; + } + } + } } } diff --git a/src/main/java/ninja/bytecode/iris/object/IrisBiomeDecorator.java b/src/main/java/ninja/bytecode/iris/object/IrisBiomeDecorator.java index 72c29cbcc..c13e9d1e5 100644 --- a/src/main/java/ninja/bytecode/iris/object/IrisBiomeDecorator.java +++ b/src/main/java/ninja/bytecode/iris/object/IrisBiomeDecorator.java @@ -12,9 +12,11 @@ import ninja.bytecode.shuriken.collections.KMap; @Data public class IrisBiomeDecorator { + private Dispersion variance = Dispersion.SCATTER; private Dispersion dispersion = Dispersion.SCATTER; private int iterations = 5; private double zoom = 1; + private double chance = 0.1; private KList palette = new KList().qadd("GRASS"); private transient KMap layerGenerators; @@ -33,17 +35,26 @@ public class IrisBiomeDecorator { layerGenerators.put(key, CNG.signature(rng.nextParallelRNG(iterations + getBlockData().size()))); } - + return layerGenerators.get(key); } public KList add(String b) { palette.add(b); - 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 getBlockData() { if(blockData == null) diff --git a/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java b/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java index b2c9dc184..e04d5cf49 100644 --- a/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java +++ b/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java @@ -6,7 +6,6 @@ import org.bukkit.util.BlockVector; import ninja.bytecode.iris.Iris; import ninja.bytecode.iris.object.IrisObject; -import ninja.bytecode.shuriken.logging.L; public class ObjectResourceLoader extends ResourceLoader {