Добавляем новую структуру

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

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

С последнего поста прошло жутких две недели! Это прям вау, время, ты куда? 😀 К счастью, я таки нашел пару свободных вечеров и разобрался (ну +-) с новой для меня темой, а именно генерация структур с использованием NBT моделей. И, конечно же, создание этих моделей при помощи структурного блока. Раньше подобные вещи делались немного иначе… Но! Сейчас это не так важно, ведь от нового подхода я просто в восторге! Скажу сразу, что при написании многое опущено. И откровенно, некоторые вещи для меня так и остались на уровне «так надо». Так что этот гайд больше ознакомительного плана, а дальше уже будем вместе ковырять исходный код майна для расширения кругозора!

В прошлом уроке для алтаря нужно было самому прописывать каждый блок, это достаточно просто, легко и понятно, но вы представьте себе каково таким образом создавать более сложные объекты! Так что за всякими деревьями и колодцами мы оставляем определение особенности (feature), а сами переходим к созданию полноценных структур (structure).

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

В чем вся прелесть такого подхода?

Как я и сказал выше – не нужно прописывать все блоки самому. У нас будет генерироваться построенная и сохраненная в nbt файл структура, которую мы добавим в соответствующую папку ресурсов мода.

Так что сейчас самое интересное! Стройкаааа!!

Вы можете использовать уже готовые постройки из любых своим миров, а также создать плоский мир для новых (можно и не плоский, но на ровном строить удобнее ).  В первую очередь нам нужно получить тот самый структурный блок. Сделать это можно очень легко: при помощи команды give. 

/give YOUR_NICK minecraft:structure_block

С подсказками получить нужный блок дело секунды

Вот и он!

Красивый?

Ставим его и видим различные режимы работы (кнопка над кнопкой DONE — их переключатель). Этот блок может быть блоком данных, загрузки или сохранения структуры. Сейчас нам нужно будет структуру сохранить.

Структурный блок

Это интерфейс для сохранения структур. Первый набор чисел – положение в пространстве. Y =  1 значит, что наша структура будет сразу же над блоком. Второй – размеры самой структуры. Для примера я создал рамку структуры 10х10х10, но во время постройки размеры пришлось немного изменить.

И вот он результат. Снаружи:

Баннеры? Я просто хотел использовать баннеры

И внутри:

Уютно 😀
Очень…

Конечно же там есть и пара тайных мест) Но раскрывать не буду. Ещё я добавил сундук, но лута там пока не будет. Закинуть туда что-либо совсем не сложно, но я хочу сделать отдельный урок про свои таблицы лута и именно там мы пропишем новую таблицу конкретно этому сундуку. А пока оставим как есть.

Теперь эту модель можно смело брать из папки мира, а именно из папки generated. Перемещаем её в папку structures, которая находится в папке MODID нашего мода в data ресурсах (та, что рецепты), Полный путь должен быть приблизительно таким: data/tutorial_mod_gs/structures/file.nbt.

JAVA часть

Отличные новости! В результате этого урока у вас в моде будет пара новых файлов и папок!

В первую очередь добавим сам файл структуры: KillerHouseStructure.java. Полный путь к файлу у меня такой: mod.astler.tutorial_mod_gs.world.gen.fecture.structure. Но, конечно же, вы можете хоть всё в одну папу сбросить). Просто я стараюсь использовать названия аналогично игре. Так будет проще в случае увеличения количества файлов мода. И вам советую.

Рассмотрим по порядку. Сперва идёт конструктор, но мы всего-лишь наследуем родителя ничего не меняя. Далее идут имя и размер структуры. getStartFactory сообщает с чего начинать строить структуру, func_225558_a_ отвечает за шанс генерации структуры в чанке. Статический класс Start как раз и определяет место для генерации, а также собирает цельную структуру из частей. По такому принципу стоят деревни, аванпосты, иглу и т.д.  Т.е. структуры, в которых может быть сразу несколько отдельных частей.  Как вы можете увидеть, там же я прописал ещё не созданную KillerHousePieces.Piece. Это единственная часть нашей простой структуры, а значит нам и нужен только один кусочек (piece).

Теперь там же создаём файл KillerHousePieces.Piece и пишем туда такое содержимое:

KillerHousePieces содержит все кусочки структуры. Как я и говорил выше – структура эта состоит из одного элемента, так что Piece один. В нём есть два конструктора, один мы вызываем при создании, а второй при загрузке. Родительскому классу передаём переменную, которая ссылается на эту же часть. Её мы проинициализируем сразу после разбора этого фрагмента.

loadTemplate  — загружает шаблон (тот самый файл-модель) структуры, а func_225577_a_ генерирует структуру на указанной высоте .

handleDataMarker пока оставим пустым, но именно тут мы будем указывать лут для сундука при помощи функционального блока.

Регистрация структур

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

Новая версия, тут активно используются Supplier, в прошлых уроках мы уже с ними встречались, так что не останавливаемся.

Фактически мы тут объявляем регистр для особенностей FEATURES для нашего мода (передаём MODID). А уже при помощи этого регистра производим регистрацию самих особенностей.

Тут нет дополнительных аннотаций для методов или классов, но сам регистр нужно инициализировать в конструкторе мода:

И последнее. Регистрируем и сам кусок структуры. Для них регистрация происходит куда проще, но при этом так же нужно будет добавить вызов класса в конструктор TutorialGSMod. Так что вот код:

А вот финальная версия нового в конструкторе:

Для генерации в желаемых (или всех биомах) нужно зарегистрировать структуру дважды. Один раз как структуру, а второй раз как особенность. Не знаю зачем разработчикам такая странная особенность, но так сделали они, и так вынуждены делать мы.

Добавляем структуру аналогично генерации руды или особенности:

Вроде… можно запускать!

Домик появился!

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

1 комментарий к “Добавляем новую структуру”

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

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