Помогите Сложный генератор мира

sidey383

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
sidey383
Цель: Сделать сложный генератор мира, похожий на генератор мира из стандартного майнкрафта
Проблема: Генерация сложных ландшафтов и плавных переходов между биомов с разной высотой (к примеру, горы и равнины)
На данный момент имеется это:

60488-c6d4db5d90945f9a159831d98cc385be.jpg


Код:
public class WorldGenerator extends ChunkGenerator {
    
    @Override
    public ChunkData generateChunkData(World world, Random random, int chunkX, int chunkZ, BiomeGrid biome) {
        SimplexOctaveGenerator generator = new SimplexOctaveGenerator(new Random(world.getSeed()), 8);
        SimplexOctaveGenerator secondgenerator = new SimplexOctaveGenerator(new Random(world.getSeed()+101), 8);
        ChunkData chunk = createChunkData(world);
        generator.setScale(0.005D);
        secondgenerator.setScale(0.01D);
        for (int X = 0; X < 16; X++)
            for (int Z = 0; Z < 16; Z++) {
                double h2 = secondgenerator.noise(chunkX*16+X, chunkZ*16+Z, 0.5D, 0.5D);
                double h1 = generator.noise(chunkX*16+X, chunkZ*16+Z, 0.5D, 0.5D);
                int currentHeight = (int) (h1*h1*h2*15+90);
                
                for (int i = currentHeight-1; i > 0; i--)
                    chunk.setBlock(X, i, Z, Material.STONE);
                chunk.setBlock(X, 0, Z, Material.BEDROCK);
                int dirt = (int) (4);
                currentHeight = currentHeight + dirt;
                if(currentHeight < 80)
                {
      
                    for(int y = currentHeight-dirt; y <= currentHeight; y++)
                        chunk.setBlock(X, y, Z, Material.GRAVEL);
                    for(int y = currentHeight+1; y <= 80; y++)
                        chunk.setBlock(X, y, Z, Material.WATER);
                }else {
                    for(int y = currentHeight-dirt; y <= currentHeight; y++)
                    {
                        chunk.setBlock(X, y, Z, y == currentHeight?Material.GRASS_BLOCK: Material.DIRT);
                    }
                }
            }
        return chunk;
    }
    
    @Override
    public List<BlockPopulator> getDefaultPopulators(World world) {
        ArrayList<BlockPopulator> populators = new ArrayList<>();
        populators.add(new TreePopulator());
        return populators;
    }

}
Код:
public class TreePopulator extends BlockPopulator{
    
    @Override
    public void populate(World world, Random random, Chunk chunk) {
        int amount = random.nextInt(4)+1;
        for (int i = 1; i < amount; i++) {
            int X = random.nextInt(15);
            int Z = random.nextInt(15);
            int Y;
            for (Y = world.getMaxHeight()-1; chunk.getBlock(X, Y, Z).getType() == Material.AIR; Y--);
                world.generateTree(chunk.getBlock(X, Y, Z).getLocation(), TreeType.BIRCH);
            }
    }

}
Буду благодарен, если кто-то направит на какую-то статью, поделиться своими идеями или отправит какие-то примеры подобных генераторов.
 

Вложения

  • 2021-05-31_20.44.11 (1).png
    2021-05-31_20.44.11 (1).png
    642,8 КБ · Просмотры: 19
  • 2021-05-31_20.44.11.png
    2021-05-31_20.44.11.png
    642,8 КБ · Просмотры: 21
Ну, это сложная тема, генератор шумов карта высот и биомов, потом это все нужно сглаживать и наращивать руду.
 
Ну, это сложная тема, генератор шумов карта высот и биомов, потом это все нужно сглаживать и наращивать руду.
Есть какие-то более конструктивные комментарии? Про то, что это сложно, я и так знаю.
 
Есть какие-то более конструктивные комментарии? Про то, что это сложно, я и так знаю.
Увы, но мой скил до этого не дотягивает. Ну сам генератор шумов уже вшит в майнкрафте и карта биомов. Тебе только свой добавить и удалить существующие если нужно. Поковыряй сурсы майнкрафта, может разберешься.
 
На самом деле тебе скорей на форум по разработке игр, нежели сюда. Ну, либо методом проб и ошибок самому, и как упомянули ранее, с подглядыванием в исходники МС.
 
Проще заплатить пару рублей за EWG
И через >настройки< биома сделать то что тебе нужно
Чем пилить с нуля то что уже сделали другие за пару лет разработки
 
Попробуй взять исходники кода MultiWorld там есть много генераторов к сожалению больше нечего сказать немогу
 
Назад
Верх