Привет! Я получил пару приятных отзывов по моему туториалу, где я показывал как можно добавить свою модель для ванильного моба в Minecraft. Это круто, так что давайте ещё посмотрим, что можно получить используя только ресурс паки. А потом я и Forge серию обязательно обновлю.
Итак. Сегодня мы будем добавлять модель существующему блоку, например… дерева! Тот, что дуб. Это будет всё ещё блок, просто добавим какие-то свои текстуры.
Идею для этого гайда я взял из прикольного текстур пака с новыми лицами для тыкв. Механизм реализации аналогичен, кстати.
Но в рамках тутора мы добавим только одну альтернативную версию блока, так как процесс добавления новых будет аналогичен показанному. Погнали!
Так что делаем?
Смотрите, у нас есть ствол дерева, дуб. Как известно, этот блок может иметь разные варианты размещения, но его текстуры при этом всегда одинаковые. Давайте добавим вариант блока, где с одной из сторон будет дупло? При этом этот блок с дуплом будет возможен только в том случае, если стоит вертикально.
Подготовка к созданию ресурс пака для Minecraft
Структуру ресурс пака и необходимые файлы я уже описал в статье Свои модели для мобов в Minecraft Optifine в разделе «Что нужно знать до». Так что в этот раз переходим сразу к делу.
Теперь нам нужно заполучить ресурсы из игры. Достать их очень просто. Найдите папку .minecraft. Обычно путь к ней приблизительно такой: C:\Users\User\AppData\Roaming\.minecraft.
Внутри находим папку versions, а в ней ещё одну, со своей версией игры. У меня их, кстати, накопилось немало:
В ней видим .jar архив с аналогичным именем, и в нём папку assets:
Так как никаких моделей для OptiFine тут не будет, то и assets в ресурс паке пока не создаём. Должны быть сейчас лого, мета-файл пака и распакованные ресурсы игры (где-то отдельно):
Начнём с текстуры
Теперь создаём папку assets, а в ней ещё одну, с именем minecraft. Ресурс паки чаще всего заменяют своими ресурсами аналогичные из игры. И чтобы наши изменения дали эффект — имена должны совпадать в точности. Начнём с текстур. Внутри minecraft добавляем новую папку textures, а в ней ещё одну block. Теперь у вас есть такой вот путь: assets\minecraft\textures\block. Сюда из assets ресурсов игры копируем oak_log.png. Сменим его имя на oak_log_hollow.png (hollow с английского это пустота, дупло) и отредактируем текстуру на свой вкус. Понятное дело, что дорисовать нужно что-то вроде дупла. Для примера я накинул в центр черноты.
Создаём модель блока
Теперь создадим модель, где будет использована с одной из сторон наша новая текстура. Для этого в папке assets\minecraft создаём папку models, в ней снова block, а там файл oak_log_hollow.json, где и пропишем модель. Для стандартного блока она такая:
1 2 3 4 5 6 7 |
{ "parent": "minecraft:block/cube_column", "textures": { "end": "minecraft:block/oak_log_top", "side": "minecraft:block/oak_log" } } |
Parent это модель родитель, а блок textures определяет, какие текстуры будут отвечать за какую сторону. Всё очень просто.
В этой модели можно указать разные текстуры для разных сторон блока. Чтобы сделать шанс генерации дупла на какой-то случайной стороне, то можно создать пару моделей, где указать разные стороны с дуплом. Логика случайного выбора будет прописана дальше. Мы, для примера, сделаем возможным дупло только на северной стороне блока:
1 2 3 4 5 6 7 8 |
{ "parent": "minecraft:block/cube_column", "textures": { "end": "minecraft:block/oak_log_top", "side": "minecraft:block/oak_log", "north": "minecraft:block/oak_log_hollow" } } |
Прописываем новую модель существующему блоку
Но теперь нужно ещё и добавить новую модель блоку. В этом нам поможет файл, который можно найти в папке blockstates. Как вы догадались, создаём такую папку и в нашей assets\minecraft, больше папок не нужно, так как эти файлы существуют только для блоков. Прямо сюда копируем oak_log.json из ресурсов игры. Его содержимое должно быть приблизительно таким:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "variants": { "axis=x": { "model": "minecraft:block/oak_log_horizontal", "x": 90, "y": 90 }, "axis=y": { "model": "minecraft:block/oak_log" }, "axis=z": { "model": "minecraft:block/oak_log_horizontal", "x": 90 } } } |
И тут определены все возможные варианты блока в игре. Добавим к горизонтальному положению свой вариант:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "variants": { "axis=x": { "model": "minecraft:block/oak_log_horizontal", "x": 90, "y": 90 }, "axis=y": [{"model": "minecraft:block/oak_log", "weight":1}, {"model": "minecraft:block/oak_log_hollow", "weight":1} ], "axis=z": { "model": "minecraft:block/oak_log_horizontal", "x": 90 } } } |
Неплохо, если вы понимаете JSON. Тут я, для вертикальной позиции, добавил альтернативный вариант модели, с дуплом. Шанс появления блоков 1/2, т.е. 50%. За это отвечает поле weight. Стандартное значение для блоков равно единице. Тогда игра суммирует общее количество weight среди всех моделей для этого условия и делит значение конкретной на общее количество.
Если у нас три возможные модели с weight 1, 1 и 2. То для первых двух шанс будет 1/4, т.е. 25%, а для последней 50%, т.е. 2/4.
Потом можно поправить значения, чтобы блок с дуплом встречался куда реже.
Если всё сделано без ошибок, то можно тестировать. Пакуем pack.mcmeta, pack.png и папку assets в zip архив и добавляем к ресурсам игры.
Запуск ресурс пака в Minecraft
Запускаем игру, активируем пак и тестируем для начала в плоском мире:
Теперь проверяем в обычном:
Да, изменение чисто косметическое. И его нужно отрегулировать, а то как-то слишком много их. Но используя этот подход можно очень сильно разнообразить мир, не меняя при этом стандартные текстуры. Например, добавить вариант немного согнутого тростника, или мятой паутины. Всё уж зависит от уровня фантазии 😀