package ninja.bytecode.iris.object; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import lombok.Data; import ninja.bytecode.iris.util.CNG; import ninja.bytecode.iris.util.KList; import ninja.bytecode.iris.util.KMap; import ninja.bytecode.iris.util.RNG; @Data public class IrisBiomePaletteLayer { private Dispersion dispersion = Dispersion.WISPY; private int minHeight = 1; private int maxHeight = 1; private double terrainZoom = 5; private KList palette = new KList().qadd("GRASS_BLOCK"); private transient KMap layerGenerators; private transient KList blockData; public CNG getGenerator(RNG rng) { long key = rng.nextParallelRNG(1).nextLong(); if(layerGenerators == null) { layerGenerators = new KMap<>(); } if(!layerGenerators.containsKey(key)) { layerGenerators.put(key, CNG.signature(rng.nextParallelRNG(minHeight + maxHeight + getBlockData().size()))); } return layerGenerators.get(key); } public KList add(String b) { palette.add(b); return palette; } public KList getBlockData() { if(blockData == null) { blockData = new KList<>(); for(String i : palette) { try { Material m = Material.valueOf(i); if(m != null) { blockData.add(m.createBlockData()); } } catch(Throwable e) { } } } return blockData; } }