Генерация блока в большом кол-ве.

Версия Minecraft
1.12+
917
22
332
Доброго времени суток:).
Недавно я переносил код с 1.11 на 1.12 и меня ждал сюрприз.
У меня есть блок, который очень часто встречается, почти как трава, но в пещерах. Код генератора тоже идентичен траве. А вот код класса от IWorldGenerator:
Java:
public class CaveWorldGenerator implements IWorldGenerator {
  
    @Override
    public void generate(Random rand, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) {
       if(world.provider.getDimension() == 0) {
             generateCrystall(world, chunkX, chunkZ, rand);
       }
    }

    private void generateCrystall(World world, int k, int j, Random rand) {
        for(int i = 0; i < 6; i++) {
            int x = k + rand.nextInt(16);
            int y = rand.nextInt(256);
            int z = j + rand.nextInt(16);
            BlockPos pos = new BlockPos(x, y, z)
            new WorldGenCrystall().generate(world, rand, pos);
        }
    }
}

Если в цикле ставить числа больше 4, фордж при создании мира ругается в консоль о том, что мой мод загрузился в новом чанке [x,z] бла бла бла, и где-то после шестисотого чанка и надписи, мне прилетает краш.
Жалуется всегда на строчку world.getBlockState(pos), или world.isAirBlock(pos) и т. д. причём не важно какой генератор я вызову - ванильной травы, тростника, или мой.
Кстати если поставить число меньше 4, надписи всё равно прилетают, но меньше и мир генерится. Только вот блок мой там штуки 4-5 на чанк.
Заранее спасибо!
 
917
22
332
Во-вторых, найди поиском по IDE где эти строки, посмотри причину и устрани ее.
Я знаю где они:
Java:
public class WorldGenCrystall extends WorldGenerator{

    @Override
    public boolean generate(World world, Random rand, BlockPos position) {  
       
        BlockPos pos = new BlockPos(position.getX(), position.getY()-1, position.getZ());
        //Вот они
        if(world.isAirBlock(position) && world.getBlockState(pos).getMaterial() == Material.ROCK && !world.provider.hasSkyLight()) {
            world.setBlockState(position, RWBlocks.rock_block.getDefaultState());
        }
        return true;
    }

}
Но даже если я пишу вместо new WorldGenCrystall().generate(world, rand, pos); -
new WorldGenTallGrass(BlockTallGrass.EnumType.DEAD_BUSH).generate(world, rand, pos);
Жалуется уже на ванильный класс, на те же строчки.
 
917
22
332
Проблема решена с помощью замены world.seBlockState(pos state); на world.setBlockState(pos, state, 18);
Теперь код генератора выглядит так:
Java:
public class WorldGenCrystall extends WorldGenerator{

    @Override
    public boolean generate(World world, Random rand, BlockPos position) { 
      
        BlockPos pos = new BlockPos(position.getX(), position.getY()-1, position.getZ());
        //Вот они
        if(world.isAirBlock(position) && world.getBlockState(pos).getMaterial() == Material.ROCK && !world.provider.hasSkyLight()) {
            world.setBlockState(position, RWBlocks.rock_block.getDefaultState(), 18);
        }
        return true;
    }
}
 
Сверху