Minecraft — игра, где мир состоит из блоков, а значит одними предметами далеко не уйдешь. В этот раз мы наконец-то создадим свой блок, а так же добавим все необходимые для блока ресурсы.
Список уроков
Урок восемь. Делаем из сосиски еду
Бонусный урок. Эффекты и блестяшка
Фактически в этом уроке мы частично повторим шаги из четвертого и пятого уроков, но цель немного иная, а шаги чуть сложнее.
Сначала открываем в файл ModEventSubscriber. Для регистрации предметов мы использовали onRegisterItem, аналогичная функция нужна нам и для блоков:
1 2 3 4 5 |
@SubscribeEvent public static void onRegisterBlocks(RegistryEvent.Register<Block> event) { } |
Регистрация блока будет так же в чём-то похожа.
1 2 3 |
event.getRegistry().registerAll( setup(new Block(Block.Properties.create(Material.ROCK).hardnessAndResistance(3.0F, 3.0F)), "sun_bricks") ); |
Разберем что я тут написал. Используем снова функцию setup, она общая и для блоков, и для предметов. Первый параметр, это наш блок. Мы создаём объект типа Block, с такими характеристиками: материал Material.ROCK, т.е. материал каменный, прочность 3 и устойчивость 3. Данные параметры сделают наш блок схожим по свойствам с блоком железной руды. От прочности зависит скорость добычи блока игроком, а устойчивость влияет на его сопротивление взрыву и т.д. Вторым параметром, как и для предмета, будет имя в реестре. Я делаю sun_bricks блок, что в переводе значит солнечные кирпичи.
Как и с предметом в уроках ранее — можно запускать. В инвентаре вы ничего не увидите, ведь у блока нет предмета. Поясню так, у КАЖДОГО блока, который можно увидеть в инвентаре — есть свой предмет. Т.е. когда вы держите в руке верстак — это предмет. Но когда вы ставите его куда-либо, то предмет из ваших рук пропадает, а в мире появляется блок. И так как блок у нас уже есть — при помощи команды /setblock его можно призвать в мир. Посмотрим.
Жму энтер…ииии!
Текстура и модель блока
Да. Блок появился, но выглядит он откровенно не очень. Давайте добавим ему модель и текстуру.
Как и для уже созданной папки для предметов (item) по пути assets\tutorial_mod_gs\models добавляем папку block. Туда добавляем .json файл, имя которого должно совпадать с регистрационным именем вашего блока.
Его содержимое должно быть приблизительно таким:
1 2 3 4 5 6 |
{ "parent": "block/cube_all", "textures": { "all": "tutorial_mod_gs:block/sun_bricks" } } |
Где мы указываем родительскую модель cube_all, т.е. куб с одинаковыми сторонами. И у этой модели есть одна текстура, имя которой all. Её мы и указали. По сути все так же, как и для предмета, только имена другие.
Теперь нам нужно добавить текстуру. Путь к папке текстур у нас такой: assets\tutorial_mod_gs\textures и там сейчас только одна папка — item. Добавляем block и сюда, и перемещаем туда текстуру sun_bricks.png.
Мой блок будет выглядеть так:
Окей. Но если для предмета этого было бы достаточно, то блоку нужен еще файл состояний. Знаете, это такой файл, который определяет вид блока в зависимости от состояния. Что-то вроде включенной и выключенной лампы или нажимной плиты. С ним мы еще столкнемся, обязательно. Ну, а пока наш блок будет иметь только одно состояние — нашу модель.
Папку blockstates нужно добавить в assets\tutorial_mod_gs, туда, где наши lang, models и textures. В неё добавляем еще один .json файл с именем нашего блока. У меня это еще один sun_bricks.json, а его содержание должно быть приблизительно таким:
1 2 3 4 5 |
{ "variants": { "": { "model": "tutorial_mod_gs:block/sun_bricks" } } } |
Фактически мы указали единственный вариант для нашего блока, так как других пока не предусмотрено.
Запускаем. И если все сделано верно — блок должен получить вашу текстуру.
Теперь бы схватить свой блок и построить свою любимую коробку, но уже своими блоками. Но в инвентаре блоков нет, а командами их ставить это…можно сильно устать, если мягко. В следующий раз добавим предмет для нашего блока, который облегчит его использование и даст возможность хранить наш блок в инвентаре.
На этом все. Спасибо за внимание!