Весь этот фокус держится на одной гениальной функции Minecraft, которая называется CustomModelData, или сокращенно CMD.
Что такое CustomModelData?
Появившись в версии 1.14, параметр CustomModelData позволил создателям ресурс-паков привязывать к одному ванильному предмету бесконечное множество разных текстур и 3D-моделей, используя числовые идентификаторы.
Представьте, что у вас есть обычный железный меч (iron_sword).
- Меч без тегов, ванильный, выглядит как обычный меч.
- Меч с
CustomModelData: 1игра подменяет на катану. - Меч с
CustomModelData: 2игра рендерит как 3D-модель бензопилы.
Технически, для сервера и механик игры, это все еще обычный железный меч. Он наносит тот же урон и так же ломается. Меняется только визуальная обертка на стороне клиента.
Как это работает под капотом?
Чтобы магия сработала, ресурс-пак использует систему overrides, то есть переопределений. В папке с моделями предметов assets/minecraft/models/item лежит базовый файл, например iron_sword.json.
Вместо того чтобы просто указывать текстуру, этот файл говорит игре: если у предмета есть тег CustomModelData равный 1, иди и читай другой файл.
{
"parent": "item/handheld",
"textures": {
"layer0": "item/iron_sword"
},
"overrides": [
{ "predicate": { "custom_model_data": 1 }, "model": "item/custom_katana" },
{ "predicate": { "custom_model_data": 2 }, "model": "item/custom_chainsaw" }
]
}
Именно эту рутинную работу по прописыванию сотен таких JSON-файлов и выполняет Генератор ресурс-паков Minecraft в автоматическом режиме.
Важно: разница версий NBT против Components
С выходом Minecraft 1.20.5 разработчики Mojang полностью переписали внутреннюю систему предметов. Старые NBT-теги ушли в прошлое, а на их место пришли Data Components, то есть компоненты данных.
Для обычных игроков визуально ничего не изменилось, но для администраторов это означало, что старые команды выдачи предметов /give сломались.
Версии до 1.20.5: синтаксис NBT
В старых версиях CustomModelData записывался внутри фигурных скобок {} как часть NBT-тегов.
/give @p minecraft:iron_sword{CustomModelData:1} 1
Версии 1.20.5 и выше: синтаксис Components
Теперь свойства предмета прописываются в квадратных скобках [] сразу после названия, а сам параметр пишется с маленькой буквы через нижнее подчеркивание.
/give @p minecraft:iron_sword[minecraft:custom_model_data=1] 1
Генератор автоматически учитывает этот переход. При создании ресурс-пака просто выберите версию вашего сервера, и инструмент сгенерирует правильные команды.