← Все статьи

Гайд по CustomModelData в Minecraft: что это и как работает

Если вы когда-нибудь играли на кастомных RPG-серверах, то наверняка видели магию: игроки бегают с огнестрельным оружием, пьют из резных кружек и носят уникальные шляпы, при этом игра работает абсолютно без модов.

Весь этот фокус держится на одной гениальной функции Minecraft, которая называется CustomModelData, или сокращенно CMD.

Что такое CustomModelData?

Появившись в версии 1.14, параметр CustomModelData позволил создателям ресурс-паков привязывать к одному ванильному предмету бесконечное множество разных текстур и 3D-моделей, используя числовые идентификаторы.

Представьте, что у вас есть обычный железный меч (iron_sword).

Технически, для сервера и механик игры, это все еще обычный железный меч. Он наносит тот же урон и так же ломается. Меняется только визуальная обертка на стороне клиента.

Как это работает под капотом?

Чтобы магия сработала, ресурс-пак использует систему 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

Генератор автоматически учитывает этот переход. При создании ресурс-пака просто выберите версию вашего сервера, и инструмент сгенерирует правильные команды.