Урок двенадцатый. Новые ступени

Привет! Если вы следили за последними обновлениями игры, то могли заметить, что ступени появились для большинства блоков. И я уверен, что это не конец. Мы сделали блок, так давайте сделаем и ступени для этого блока.

Список уроков
Урок одиннадцатый. Дроп для блока и рецепт его создания

Регистрируем блок

Регистрация ступеней немного отличается от уже знакомой нам. Обычный блок мы обзывали Block (что логично) и писали так:

Но для создания поворачиваемого, переворачиваемого (и делающего все, что делают другие ступени) блока, будем создавать объект другого класса — StairsBlock (ступени-блок, все еще логично). И код будет выглядеть так:

Разница в передаваемых в конструктор параметрах. У простого блока он один — Block.Properties.

Block.Properties по сути дела определяет свойства блока: материал, инструменты для добычи, свет, который он выдаёт и т.д. Конечно же там есть не все, что может быть нам нужно, а потому иногда классом Block обойтись не выйдет. Тогда будем создавать свой класс, наследующий Block.

Помимо заданных свойств, для создания ступеней нужно передать BlockState основного блока. Так как мы уже встречали подобное название, а именно в папках ресурсов создавали blockstate для блока, то и тут он будет играть роль правильного сохранения и отображения положения блока. Как я понял. Может понял и не так. В любом случае в моём примере это сделано вот так:

Такую конструкцию мы уже видели. Это Supplier.

Если простым языком, то мы передаём функцию, которая может быть вызвана позже в любое время, но не сейчас. Делаем так потому, что при загрузке игры наши блоки сначала не определены, а потому получить из них BlockState не выйдет.

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

Ресурсы

К сожалению, самая сложная часть ступеней — ресурсы. Как по мне, реализация не самая удобная у них. Лучше того, что было когда-то, проще, но и сейчас куча лишних телодвижений и файлов для одинаковых результатов (ступеней куча, имею одну текстуру, так зачем это все?). Думаю, что эту систему когда-то тоже заменят. Ну, а сейчас делаем как делаем.

В папку моделей блоков нам нужно добавить целых три(!!!) новых файла. sun_bricks_stairs.json, sun_bricks_stairs_inner.json и sun_bricks_stairs_outer.json. Код у них будет аналогичен (о чем я и говорил), и лишь родитель будет отличаться.

models\block\sun_bricks_stairs.json

models\block\sun_bricks_stairs_inner.json

models\block\sun_bricks_stairs_outer.json

Ссылаюсь я на текстуру от блока, так как нет смысла создавать такую же текстуру для ступеней.

Не забываем добавить и модель предмета, чтобы она правильно отображалась в руках и сумке.

models\item\sun_bricks_stairs.json

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

Результат кода выше
Другая модель (она, кстати, даже не предназначена для инвентаря, видимо)

Хорошо. Последний пункт в списке — blockstates. У обычного блока он один. Есть и есть, скажем так. У той же древесины, двери и всего, что как-то может менять своё положение в игре — их несколько. Ступени имеют целую кучу вариантов положений, а потому и blockstate ступеней будет внушительным.

blockstates\sun_bricks_stairs.json

Если честно, то в данном случае даже не пытался особо вникать. Просто спёр blockstate берёзовых ступенек :D. В зависимости от положения игрока, и клика (верх низ) будут разные модели в разных направлениях. Как я и говорил, еще будет более адекватный разбор blockstate. А тут мы делали ступени. И мы сделали ступени. Запускайте и балдейте!

Запуск!

Понятное дело, что перед началом урока я все это дело сделал сам и только потом перешел к статье. И я ОЧЕНЬ надеюсь, что не забыл чего-то важного.

И если я все же не забыл, то в вашей вкладке должна быть симпатичная ступенечка.

Ух!

И работает она в точности как нужно, я уже проверил.

Трон стал лучше! Это же трон?..

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

Баг или фича?

Окей, на этом у меня все. До скорого!

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