Biome Generation Emulator - Эмулятор Генерации Биомов

102
3
77
Предисловие
Основное назначение данной программы - более быстрый и эффективный способ анализа и разбора различных генераторов биомов в Minecraft, включая как стандартный, так и какие-либо другие.

Эмулятор не доведен до ума, но он все равно прекрасно справляется со своими задачами: все картинки и массивы из руководств Генерация биомов (часть 1) и Генерация биомов (часть 2) были получены именно благодаря данной программе. Если вы не хотите ограничиваться парочкой биомов в своей модификации, то данный эмулятор очень поможет в разработке собственного алгоритма генерации биомов.

Оглавление

  • Левая система координат
  • Установка эмулятора
  • Классы эмулятора
  • Работа с эмулятором
1 Левая система координат
Если данные слова вам ни о чем не говорят, советую обратиться к Википедии или почитать о Векторной алгебре. Если же вам лень делать и то, и другое, то вот объяснение в двух словах: ось X - красная, ось Y - зеленая, ось Z - синяя. Направление всех осей определяется вдоль этих прямых от пересечения ко втором концу, соответственно.
1595308209834.png
Если посмотреть на этот же чанк в генераторе биомов (да-да, это ТОТ ЖЕ чанк), то нижний левый угол будет иметь наименьшие координаты по осям X и Z. Причем ось X направлена снизу вверх, а ось Z - слева направо.
35 GenLayerVoronoiZoom 16x16.png
Координаты генерируемых биомов в Minecraft совпадают с координатами пикселей на картинках в генераторе биомов (подробнее - в руководствах), поэтому создав определенный алгоритм в эмуляторе и перенеся его в Minecraft, он будет работать точно также.
2 Установка эмулятора

  1. Скачать архив с эмулятором (кликабельно).
  2. Добавить исходники в своей проект.
  3. Добавить библиотеку guava-23.0.jar, которую я также приложил в архиве.
3 Классы эмулятора

3.1 Main
Класс с основным методом, в котором и вызывается эмуляция генератора по заданным параметрам.
  • Main.EnumWorld- перечисления (по умолчанию там также указаны перечисления, которые я использовал для руководств), в которых указана основная информация по миру, то есть:
    • seed - сид мира​
    • chunkX, chunkZ - координаты начального чанка​
    • chunks - размер генерируемой области. Если установить 1, то сгенерируется 1x1 чанков, 2 - 2x2 чанков и т.д. При желании можно модифицировать код, чтобы генерировать, например, прямоугольную область.​
  • agenlayer - это рабочий слой, которому присваивается требуемый алгоритм генерации.
    • Стандартный алгоритм генерации биомов вызывается с помощью кода GenLayer.initializeAllBiomeGenerators(EWORLD.worldGenSeed);
    • Произвольный АГО вызывается аналогично, например Generators.standartIsland(EWORLD.worldGenSeed);
3.2 MapCreator
Класс, который создает картинки в папке map (если она уже существует, то сначала ее удаляет).
  • size - определяет размер самой картинки. Если установить 1, то каждая координата будет соответствовать одному 1x1 пикселям, 2 - 2x2 пикселям и т.д.
  • Работает в двух режимах:
    • Генерирует картинку на основании цветов биомов (если идентификатор в массиве равен -1, то заменяет цвет на красный)​
    • Генерирует черно-белые картинки. Используется только для слой-масок (по ним руководства я еще не делал)​
3.3 Debug
Класс, который отвечает за, собственно, вывод информации о процесс генерации.
  • PNG - определяет создание картинок в папке map
  • PNG_MASK - техническая переменная для создания картинок слой-масок
  • CHAT - очень полезно, когда что-то сломалось или работает не так. Будет выводить в консоль массивы слоев со смещениями и их длинами. Сильно тормозит скорость работу эмулятора, поэтому без сильной надобности можно отключать.
3.4 Generators
Класс, в котором я указал все собственные алгоритмы генерации биомов из руководств.

4 Работа с эмулятором
Во-первых, все классы, взятые из Minecraft, находятся по такому же пути, поэтому при переносе классов из эмулятора в свою модификацию достаточно сделать копипаст. Все импорты, все методы рабочие.

Во-вторых, в методе getInts(...) в каждом слое перед оператором return вставлен код для вывода этого слоя в виде картинки или текста. Поэтому когда будете создавать свои собственные слои, не забудьте туда добавить эту строку. И да, при переносе слоя в модификацию Minecraft эту строку надо будет удалять, т.к. в Minecraft такого вывода нет. Но если вывод слоя вам не нужен, то необходимости в этой строке также нет.
Java:
Debug.output(this, aint1, areaX, areaY, areaWidth, areaHeight);

В-третьих, как я упоминал, эмулятор не доведен до ума. Он не генерирует редкие версии биомов (исключение - слой GenLayerRareBiomes). Такие биомы имеют в названии переменной слово MUTATED_ и в эмуляторе будут отображаться черным цветом.

Пример работы программы в виде картинок и текста (это - MESA):
1595312302818.png

1595312455199.png
 
Последнее редактирование:
7,099
324
1,509
Стоит добавить расшифровку АГО в начало статьи
 
5,018
47
783
Супер!
Наконец то я смогу визуализировать метод тыка и разобраться что к чему. А то все эти цифры, слои, массивы... кошмар какой то, сидеть в этом разбираться. То ли дело изображения - сразу видно и все понятно)
 
Сверху