Новая руда. Часть 2. Генерация в мире

Добавляем новый блок и дроп для него

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

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

Погнали!

Java часть

И вообще-то единственная часть этого урока, так как для генерации чего-либо в мире нам json не нужен (пока так, кто знает, что будет потом).

Для начала создадим файл для прослушивания игровых событий. Тут мы пропишем свои особенности для генерации биомов. Особенности биома — всё, что в нём есть. Пещеры, озёра, трава, цветы, деревья, пещеры, руды, другие виды камня и т.д. Тут мы сможем добавить свои деревья, структуры и многое другое. И сейчас мы о рудах, так что не отвлекаемся.

Я назову файл ModEventGenSubscriber.java, вы можете выбрать другое имя. И пишем в теле класса такую функцию:

Выглядит… страшновато…

Заранее хочу предупредить, что имена вроде func_227228_a_ у меня оказались, так как при декомпиляции игры не были заданы имена для деобфускации. Если простым языком, то скомпилированный код игры не сохраняет изначальные имена функций и классов, поэтому есть специальная таблица, по которой тяжело читаемый код преобразовывается в более понятный. Но в ней иногда нет некоторых новых функций, со временем их добавят, ну, а пока пишем так.

Если вы читаете этот урок немного или намного позже, то скорее всего эта функция может иметь другое имя. Так что смотрите по параметрам функции.

Подробнее о коде

Мы регистрируем событие, которое будет выполнено при загрузке мода и дополнит все биомы нашей рудой. Все они потом, что в цикле foreach мы перебираем все биомы, которые зарегистрированы в игре (в том числе биомы из модов). Беря каждый отдельный биом мы добавляем туда особенность (фичу addFeature), и указываем её параметры. Первый, это тип особенности, а именно подземная руда. Второй параметр это сама особенность (ORE — руда) с заданными параметрами (withConfiguration) и конфигурацией расположения.

Конфигурация руды включает заменяемый блок (OreFeatureConfig.FillerBlockType.NATURAL_STONE — любой камень), сам блок (вернее его BlockState: ModBlocks.SUN_ORE.getDefaultState()) и veinSize — целое число, определяющее размер жилы. Для примера: у угля это значение равно 17, у алмаза 8, а у лазурита 7.

Конфигурация расположения принимает четыре значения: veinCount — количество жил руды в одном чанке, heightMin — нижнее смещение (минимальная высота), heightTop — верхнее смещение, heightMax — максимальная высота. Пример из игры: алмаз — 1, 0, 0, 16; уголь — 20, 0, 0, 128. Для своей руды подбирайте сами. Чем круче руда — тем она ниже и реже. Как-то так…

Пояснил из серии он понимает, просто сказать не может 😀

Ладно. И еще один момент. Нужно указать игре, что у нас есть такой слушатель событий. Для этого в конструктор файла мода дописываем такую строку:

Точно такую же мы вызывали для добавления прозрачной текстуры стеклу.

И это всё! Теперь скорее бежим тестировать!!

Результаты

Я указал параметры для дофига и везде, так что заходим в любую пещеру и ищем 😀
И еще одна жила. Круть. И нет, это не золото, просто я ленивая жопа.

На этом вроде всё, надеюсь ничего не забыл. Спасибо за внимание! Удачи в моддинге!

One thought on “Новая руда. Часть 2. Генерация в мире

Добавить комментарий