[1.12.2] Генерация

Версия Minecraft
1.12.2
2,932
44
598
Доброго времени суток Земляне и Чужие!
Сегодня у меня появился такой вопрос: Я вот сделал руду, и хочу к ней прикрутить генерацию. Перепробовал уже два генератора ( World Generation: Ore и Всё о рудах )
Не один из них не хочет генерировать руду в обычном мире.
Сейчас я вот остановился на таком варианте:
Java:
public class MistyThaumcraftWorldGenerator 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(RegisterBlocks.ore_amber.getDefaultState(), world, random, chunkX * 16, chunkZ * 16, 15, 180, 4 + random.nextInt(4), 6);

    }
    
    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);
        }
    }

}
Вот так вот зарегистрировал генератор:
Java:
public class RegisterGenerators {

    public static void register() {
        
        GameRegistry.registerWorldGenerator(new MistyThaumcraftWorldGenerator(), 3);
        
    }

}
Common proxy:
Java:
public class CommonProxy {
    
    public void preInit(FMLPreInitializationEvent event)
    {
        
        RegisterGenerators.register();
        
    }

    public void init(FMLInitializationEvent event)
    {
        
    }
    
}
Я думал проблема в том что к руде прикручен ОрДикшенари и в генераторе Таумкрафта тоже юзаеться ОрДикшенари и он спавнит мой руды, но проблема оказалось не в этом.
 
5,018
47
783
Если подозреваешь что что то не регистрируется - пробуй регистрировать в главном классе в методе инициализации сразу, чтобы отмести вариант неверной регистрации.
Вот генератор из реализма:
не помню, работает он или нет, но вроде как должен...

Java:
public class WorldGenOre implements IWorldGenerator {
    private final WorldGenMinable oreGenNether;


    public WorldGenOre() {
        oreGenNether = new WorldGenMinable(RegBlocks.kaolinit.getDefaultState(), 20, BlockMatcher.forBlock(Blocks.STONE));
    }

    @Override
    public void generate(final Random random, final int chunkX, final int chunkZ, final World world, final IChunkGenerator chunkGenerator, final IChunkProvider chunkProvider) {
        final BlockPos chunkPos = new BlockPos(chunkX * 16, 0, chunkZ * 16);

        switch (world.provider.getDimensionType()) {
            case OVERWORLD:
                for (int i = 0; i < 16; i++) {
                    oreGenNether.generate(world, random, chunkPos.add(random.nextInt(16), random.nextInt(108) + 10, random.nextInt(16)));
                }
                break;
        default:
            break;
    
            
        }
    }
}
 
2,932
44
598
Если подозреваешь что что то не регистрируется - пробуй регистрировать в главном классе в методе инициализации сразу, чтобы отмести вариант неверной регистрации.
С регистрацией всё в порядке.
~~~
Юху! Получилось!
cd2f189c4932d6e3eed35d88c1973547.png

Java:
public class MistyThaumcraftWorldGenerator implements IWorldGenerator
{
    private WorldGenerator ore_amber;
    
    public MistyThaumcraftWorldGenerator()
    {
        ore_amber = new WorldGenMinable(RegisterBlocks.ore_amber.getDefaultState(), 9);
    }

    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
    {
        switch(world.provider.getDimension())
        {
        case 0:
            
            runGenerator(ore_amber, world, random, chunkX, chunkZ, 80, 5, 180);
            
            break;
            
        case 1:
            
            break;
            
        case -1:
        
            break;
        }
    }
    
    private void runGenerator(WorldGenerator gen, World world, Random rand, int chunkX, int chunkZ, int chance, int minHeight, int maxHeight)
    {
        if(minHeight > maxHeight || minHeight < 0 || maxHeight > 256) throw new IllegalArgumentException("Ore generated out of bounds");
        int heightDiff = maxHeight - minHeight + 1;
        
        for(int i = 0; i < chance; i++)
        {
            int x = chunkX * 16 + rand.nextInt(16);
            int y = minHeight + rand.nextInt(heightDiff);
            int z = chunkZ * 16 + rand.nextInt(16);
            
            gen.generate(world, rand, new BlockPos(x, y, z));
        }
    }

}
 
Сверху