← Все статьи

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

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

Хочешь перейти от статьи к рабочему предмету?

Собери визуальную часть в генераторе ресурспаков, а командную и логическую — в конструкторе кастомных предметов. Так легче проверить и внешний вид, и серверную логику без ручной каши.

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

Что такое CustomModelData?

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

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

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

Если хочется работать с CustomModelData без ручной возни во всех файлах сразу, удобная связка на сайте такая: генератор ресурс-паков отвечает за визуальную часть, а конструктор кастомных предметов помогает собрать командную.

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

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

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

Почему CustomModelData остаётся важным даже после перехода на компоненты

Иногда после новостей про Data Components кажется, будто CustomModelData — это уже что-то из старой эпохи Minecraft. На практике всё наоборот. Проблема визуальной идентичности никуда не делась: один и тот же ванильный предмет по-прежнему должен превращаться в пропуск, реликт, валюту, квестовую улику, магазинный товар или особое оружие. CustomModelData всё ещё остаётся одним из самых чистых мостов между этой игровой задачей и визуальным слоем ресурспака.

Изменилось не само назначение, а окружение вокруг него. Раньше один номер часто пытались заставить делать всё сразу: быть и визуальным хуком, и внутренним смыслом предмета, и системой документации. В новых workflow лучше работает разделение ролей. Ресурспак отвечает за то, что увидит игрок. Команда и скрытые данные отвечают за то, чему доверяет сервер. Как только это разделение становится привычным, CustomModelData перестаёт казаться случайной магией и начинает ощущаться как полезный контракт между артом и логикой.

Практический путь: от модели до рабочего предмета

1. Сначала продумайте визуальную сторону

Нужно понять, как предмет должен выглядеть в руке игрока или в инвентаре. Если объект требует собственной иконки, текстуры или 3D-модели, это сначала живёт в ресурспаке. Генератор паков полезен тем, что собирает папки и JSON-слой без ручной прокладки каждого файла.

2. Потом дайте предмету стабильную скрытую идентичность

Одного визуального хука для живого сервера почти всегда мало. Пропуск, жетон, контракт или реликт обычно ещё хотят скрытый ID, который смогут читать квесты, торговцы и админские проверки. Здесь уже полезен Custom Item Builder: он даёт командной части остаться читаемой, а не схлопнуться в загадочное число.

3. Подберите синтаксис под правильную версию Minecraft

До 1.20.5 данные предметов жили в старом NBT-синтаксисе. После перехода они переехали в компоненты, а в 1.21.4+ визуальная сторона стала ещё богаче за счёт новых путей моделей и расширенных слотов custom_model_data. Если версия выбрана не та, идея предмета может быть правильной, а команда всё равно упадёт.

4. Протестируйте сам предмет до того, как вшивать его в большие системы

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

Частые ошибки вокруг CustomModelData

Один номер пытается быть всей системой сразу

Классическая ошибка — заставить одно значение CustomModelData быть и визуальным маршрутом, и скрытой логикой, и способом помнить, что это вообще за предмет. Такая схема плохо масштабируется. Как только библиотека предметов растёт, люди перестают помнить, что значило старое число и что из этого ещё безопасно переиспользовать.

Команда собирается раньше, чем существует визуальный путь

Предмет намного проще отлаживать, если уже понятно, какой у него model path, какая задумана текстура и какой fallback должен показываться. Иначе команда может технически работать, а игрок всё равно будет видеть не тот значок — и будет казаться, будто “сломался CustomModelData”, хотя проблема живёт в паке.

Примеры копируются между разными эпохами синтаксиса

Очень много форумных примеров по-прежнему относятся к старым версиям команд. Если legacy NBT-врезку вставить в компонентную среду или наоборот, команда рушится, хотя сама идея остаётся нормальной. Поэтому визуальный builder полезен не только генерацией, но и тем, что держит эпоху синтаксиса на виду.

Кажется, что одного CustomModelData достаточно для серверной логики

По своей природе CustomModelData в первую очередь отвечает за отображение. Реальному RP-серверу часто ещё нужны скрытые ID, понятные названия и отдельные данные для скриптов. Самые надёжные сетапы дают ресурспаку заниматься внешним видом, а серверной логике — валидацией.

Быстрый FAQ

Нужен ли CustomModelData в новых версиях Minecraft?

Да, если один ванильный предмет должен ветвиться в несколько разных визуальных состояний. Вокруг него поменялся синтаксис, но сама задача визуального разведения никуда не делась.

Какая практическая связка на сайте лучше всего работает с ним?

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

Это вообще только для оружия?

Нет. CustomModelData не менее полезен для пропусков, значков, валюты, писем, реликтов, квестовых предметов, декоративной еды, жетонов и магазинного stock. Оружие просто легче всего узнаётся на скриншотах.

Что проверять первым делом, если предмет выглядит не так?

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