1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем sidey383, 31 май 2021.

  1. Автор темы
    sidey383

    sidey383 Активный участник Пользователь

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

    [​IMG]

    Код:
    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);
                }
        }
    
    }
    Буду благодарен, если кто-то направит на какую-то статью, поделиться своими идеями или отправит какие-то примеры подобных генераторов.
     

    Вложения:

  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну, это сложная тема, генератор шумов карта высот и биомов, потом это все нужно сглаживать и наращивать руду.
     
  3. Автор темы
    sidey383

    sidey383 Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    sidey383
    Есть какие-то более конструктивные комментарии? Про то, что это сложно, я и так знаю.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Увы, но мой скил до этого не дотягивает. Ну сам генератор шумов уже вшит в майнкрафте и карта биомов. Тебе только свой добавить и удалить существующие если нужно. Поковыряй сурсы майнкрафта, может разберешься.
     
  5. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    На самом деле тебе скорей на форум по разработке игр, нежели сюда. Ну, либо методом проб и ошибок самому, и как упомянули ранее, с подглядыванием в исходники МС.
     
  6. d00hh

    d00hh Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    d00h
    Проще заплатить пару рублей за EWG
    И через >настройки< биома сделать то что тебе нужно
    Чем пилить с нуля то что уже сделали другие за пару лет разработки
     
  7. Автор темы
    sidey383

    sidey383 Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    sidey383
    Нет, я такой вариант не рассматриваю. Само написание генератора является конечной целью. Мне не нужно готовое решение.
     
  8. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Боже упаси.
     
  9. Christmas

    Christmas Активный участник Пользователь

    Баллы:
    76
    Не дай боже это говно еще и покупать))
     
  10. d00hh

    d00hh Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    d00h
    да кста :D только щас посмотрел что он уже дохлый. Года 3-4 назад был нормальный
     
  11. SashaBrine

    SashaBrine Активный участник Пользователь

    Баллы:
    76
    Попробуй взять исходники кода MultiWorld там есть много генераторов к сожалению больше нечего сказать немогу
     

Поделиться этой страницей