Добавляем постройку (особенность, feature) для биомов

Всем привет! Пришло время применить все созданные блоки на практике. Структуры это одна из самых интересных частей любых песочниц. Все мы с радостью заваливаем в пустынный замок, для четырёх сундуков и девяти блоков динамита, и бегаем по шахтам, аванпостам, деревням и т.д. О структурах той же террарии я и вовсе промолчу, уж слишком они круты.

Список уроков

Блоков у нас уже прилично, но сперва немного теории. Структуры по своей реализации в чем-то похожи на руду. Нам нужно зарегистрировать структуру в игре, а потом добавить её как особенность для определённых (или всех) биомов. Но, конечно же, всё будет несколько сложнее, чем с простыми блоками. На то она и структура.

Но всё же стоит уточнить, что несмотря на схожесть в реализации, игра разделяет генерируемые элементы биомов на особенности и структуры (они тоже особенности, но сложнее устроены). Для примера: хижина ведьмы – структура, а пустынный колодец – особенность. Т.е. особенность – единый элемент, это дерево, кактус, колодец, а структуры состоят из частей (храмы, деревни). Некоторые из одной, как всё та же хижина ведьмы, а некоторые имеют множество частей и вариантов (затонувшие корабли, иглу). Но про это позже. Сейчас мы займёмся именно особенностью, по аналогии с колодцем.

Советую сперва пройти урок про генерацию руды. Некоторые моменты будут максимально сокращены, так как в том уроке они уже были описаны.

Важная инфа
WARNING! С этого урока я перехожу на последнюю стабильную версию forge. В планах этого не было, но сбой данных на диске буквально убил старый проект, а создавать заново на менее актуальной я не видел смысла. Еще раз акцентирую внимание на имена функций. Если какой-то функции у вас нет, то проверьте тарабарщину (всякие func_225566_b_) по параметрам или по контексту, и чаще всего определить нужные функции не особо сложно.

Создаём класс особенности

По аналогии с оригинальными структурам, создадим отдельные папки для генерации, и для самих структур: родительская_папка_исходного_кода/world/. Новой особенностью станет Солнечный алтарь, а потому его класс получает имя: SunAltarFeature.java.

Пишем туда такой вот код:

Окей. Разберём этот код. Конструктор принимает один параметр. Это функция для дополнения генерации структуры. Подобные функции указаны для цветов, деревьев, озёр, но так как у нас устойчивая структура, то никаких дополнительных параметров не нужно. Поэтому немного позже, при регистрации структуры, мы укажем пустой конфиг. Так же я уже объявил несколько глобальных переменных, которые содержат BlockState используемых блоков.

Функция place и отвечает за генерацию всего и вся. Сперва мы проверяем выбранный блок, чтобы структура не оказалась полностью в воздухе. А после этого генерируем что-то похожее на кубик при помощи трёх циклов (т.к. у нас три плоскости).

Регистрируем особенность

Если вы уже создавали блоки или предметы, то у вас уже должен быть файлик для регистрации всего этого добра. В уроках я использовал файл ModEventSubscriber.java. В этот раз мы снова к нему вернемся и добавим новую функцию:

Она работает по той же логике, что и регистрация блоков и предметов. Так что ничего нового тут нет. Параметр принимаемый классом SunAltarFeature – тот самый конфиг, которого у нас нет, что мы и указали.

И всё, вы добавили новую особенность и игру, правда, найти её пока не выйдет, ведь генерацию для неё мы пока не указали.

Генерация особенности

Вот тут идёт прямая отсылка к уроку о генерации руды. Там мы создавали отдельный класс для обработки событий генерации, а также прописали руду для всех биомов. Он назывался ModEventGenSubscriber. Может прозвучит немного странно сейчас, но руда так же была особенностью. Я тогда об этом сказал, но не останавливался для пояснения. Суть в том, что любые декораторы биомов, это особенности. Так что и руды, и особые виды камня, и даже пещеры – все одного рода. Просто имеют разные параметры генерации, и свойства. К примеру руды – подземные особенности, а есть еще наземные и подводные. Короче, подробнее нужно брать частные случаи, а пока просто запомним – всё, что мы видим в биоме – его особенности.

Поэтому в функцию onInitBiomesGen пишем для всех (или для определённых) биомов такую вот строку:

(она одна, просто длинная)

Так вот. Тут мы добавляем особенность для поверхности (SURFACE_STRUCTURES), указываем ссылку на объект нашей структуры (опять же по аналогии с блоками):

И особого внимания заслуживает конфиг расположения, а именно класс ChanceConfig. Он принимает целое число, в зависимости от которого будет зависеть генерация нашей особенности в мире. У пустынного колодца это 1000, а я указал 10. Это значит, что наших блоков сейчас будет очень и очень много. Запускаем и тестируем.

Еее!

Класс! Как можно увидеть, кубики есть и их много. Теперь запаримся и создадим вместо нелепой коробки что-то более органичное. Мы все же алтарь делали!

Так что я немного переписал код генерации большого куба в код генерации такой вот беседки со столиком и лампой.

Вышло вполне симпатично, так что на этом пока и остановимся. По поводу размещения блоков ничего сложного нет. Берём блок для генерации структуры центром, который будет своего рода нулевой координатой для всех остальных блоков, а потом посредством добавления к этой координате различных чисел – строим что-то классное!

Итак, на этом у меня всё! Спасибо за внимание! Их слишком много, зато ночью красиво 😀

Я доволен!

1 комментарий к “Добавляем постройку (особенность, feature) для биомов”

  1. Пингбэк: Создание модов для Minecraft 1.15 – GeekStand

Оставьте комментарий

Прокрутить наверх