I am currently running
Issue Description
On desert biomes (I didn't check beaches) sandstone is not generated naturally. I've tried Sponge versions mentioned above and vanilla Minecraft 1.12.2. On vanilla Minecraft sandstone is generated correctly.
Seed I've checked: -4474001698482465191
Location I've been at: -775 65 -1373
Refer: https://minecraft.gamepedia.com/Sandstone section "Natural generation"
It looks like MixinBiome.buildPopulators() will need to be updated to add an extra GroundCoverLayer when the block is sand or red sand. However, I don't know how to set that up properly to match the vanilla behavior - in vanilla, the depth of sandstone also depends on the height of the ground, which GroundCoverLayer doesn't currently support. The actual code vanilla uses to determine the height (see Biome.generateBiomeTerrain()) is:
if (blocksRemaining == 0 && blockToPlace.getBlock() == Blocks.SAND && layerNum > 1) {
blocksRemaining = rand.nextInt(4) + Math.max(0, currentY - 63); // currentY is the lowest position that regular sand will be placed
blockToPlace = blockToPlace.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? RED_SANDSTONE : SANDSTONE;
}
Isn't it possible to actually provide the Y coordinate to the blockState function inside GroundCoverLayer? It seems doable in org.spongepowered.common.world.gen.SpongeChunkGenerator with slight modification to blockState function signature. I could try to do that myself and provide a PR to fix this issue but I'm not absolutely certain that this is a good approach (I'm not sure if there's a way to avoid api compatibility break).
I have a fix ready, pending review of the related SpongeAPI changes. See https://github.com/SpongePowered/SpongeCommon/pull/2270 and https://github.com/SpongePowered/SpongeAPI/pull/2009.
This right here is the reason why we are tossing our gen API in 8 and layering directly on Vanilla...