package rtg.world.gen.surface; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.ChunkPrimer; import rtg.api.util.noise.OpenSimplexNoise; import rtg.api.world.RTGWorld; import rtg.api.config.BiomeConfig; import rtg.api.util.BlockUtil; public class SurfaceDuneValley extends SurfaceBase { private float valley; private boolean dirt; private boolean mix; public SurfaceDuneValley(BiomeConfig config, IBlockState top, IBlockState fill, float valleySize, boolean d, boolean m) { super(config, top, fill); valley = valleySize; dirt = d; mix = m; } @Override public void paintTerrain(ChunkPrimer primer, int i, int j, int x, int z, int depth, RTGWorld rtgWorld, float[] noise, float river, Biome[] base) { Random rand = rtgWorld.rand; OpenSimplexNoise simplex = rtgWorld.simplex; float h = (simplex.noise2(i / valley, j / valley) + 0.25f) * 65f; h = h < 1f ? 1f : h; float m = simplex.noise2(i / 12f, j / 12f); boolean sand = false; Block b; for (int k = 255; k > -1; k--) { b = primer.getBlockState(x, k, z).getBlock(); if (b == Blocks.AIR) { depth = -1; } else if (b == Blocks.STONE) { depth++; if (depth == 0) { if (k > 90f + simplex.noise2(i / 24f, j / 24f) * 10f - h || (m < -0.28f && mix)) { primer.setBlockState(x, k, z, Blocks.SAND.getDefaultState()); //base[x * 16 + z] = RealisticBiomeVanillaBase.vanillaDesert; sand = true; } else if (dirt && m < 0.22f || k < 62) { primer.setBlockState(x, k, z, BlockUtil.getStateDirt(1)); } else { primer.setBlockState(x, k, z, topBlock); } } else if (depth < 6) { if (sand) { if (depth < 4) { primer.setBlockState(x, k, z, Blocks.SAND.getDefaultState()); } else { primer.setBlockState(x, k, z, Blocks.SANDSTONE.getDefaultState()); } } else { primer.setBlockState(x, k, z, fillerBlock); } } } } } }