- 103
- 2
- 2
Хочу сделать генерацию "кустиков". Пытался переделать генерацию руды чтобы блок который мне надо спавнить был на траве.
Спавн руды работает, а спавн кустика нет.
Код:
public class ModWorldGen implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
if (world.provider.getDimension()==0){
generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
}
}
private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
{
generateOre(BlocksRegister.EVILEMERALDORE.getDefaultState(), world, random, chunkX * 16, chunkZ *16, 16,64,random.nextInt(1)+4, 1);
generateBlockOnTop(BlocksRegister.BUSH.getDefaultState(), world, random,chunkX * 16, chunkZ *16, 1, 10);
}
private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY,int size, int chances)
{
int deltaY = maxY - minY;
for (int i=0; i < chances; i++)
{
BlockPos pos = new BlockPos(x + random.nextInt(16), minY + random.nextInt(deltaY), z + random.nextInt(16));
WorldGenMinable generator = new WorldGenMinable(ore,size);
generator.generate(world, random, pos);
}
}
private void generateBlockOnTop(IBlockState ore, World world, Random random, int x, int z,int size, int chances)
{
int deltaY = calculateGenerationHeight(world, x, z, Blocks.GRASS);
for (int i=0; i < chances; i++)
{
BlockPos pos = new BlockPos(x + random.nextInt(16), deltaY, z + random.nextInt(16) );
WorldGenMinable generator = new WorldGenMinable(ore,size);
generator.generate(world, random, pos);
}
}
private static int calculateGenerationHeight(World world, int x, int z, Block topBlock)
{
int y = world.getHeight();
boolean foundGround = false;
while(!foundGround && y-- >= 0)
{
Block block = world.getBlockState(new BlockPos(x,y,z)).getBlock();
foundGround = block == topBlock;
}
return y;
}
}