int z = zStart + rand.nextInt(zVar) - rand.nextInt(zVar);
if ((!seeSky || world.canBlockSeeTheSky(x, y, z)) &&
canGenerateInBlock(world, x, y - 1, z, onBlock) && canGenerateInBlock(world, x, y, z, genBlock)) {
WeightedRandomBlock block = selectBlock(world, cluster);
int stack = stackHeight > 1 ? rand.nextInt(stackHeight) : 0;
do {
if (!checkStay || block.block.canBlockStay(world, x, y, z))
r |= world.setBlock(x, y, z, block.block, block.metadata, 2);
++y;