Перейти к основному содержимому

Пользовательские модели

EliteMobs поддерживает пользовательские модели через Model Engine и FreeMineCraftModels.

Предисловие

С точки зрения EliteMobs система пользовательских моделей очень проста, поскольку всё, что должны сделать админы — это добавить строку в файл конфигурации NPC или пользовательского босса, указав, какую пользовательскую модель использовать. Однако необходимо предпринять правильные шаги в Model Engine и Minecraft, чтобы эта система полностью заработала, а в этом разобраться не так-то просто.

Это руководство подробно описывает работу с Model Engine и Minecraft. Оно не объясняет, как использовать Blockbench для создания пользовательских боссов и не вдаётся в подробности работы Model Engine. Существует множество других руководств по этим темам, и если вы хотите узнать больше об этих системах, лучше обратиться напрямую к их документации.

FreeMineCraft Models​

Если вы хотите узнать, как использовать FMM для работы ваших моделей, обратитесь к этой странице вики.

Именные таблички моделей

Текущий FreeMinecraftModels использует заданную автором кость tag_, например tag_head, если она есть, иначе размещает имя над хитбоксом модели. Якорь позволяет выбрать позицию, но больше не обязателен для отображения имени. FMM управляет всей табличкой, включая строки имени и роли NPC EliteMobs. Старые версии FMM могут по-прежнему требовать якорь.

Поддержка Bedrock (Geyser)​

Смогут ли игроки Bedrock (подключающиеся через Geyser/Floodgate) видеть пользовательские модели, полностью зависит от вашего плагина моделей (ModelEngine или FreeMinecraftModels) и настройки ресурс-пака, а не от EliteMobs. EliteMobs действительно определяет клиентов Bedrock, но использует эту информацию для таких вещей, как отрисовка меню и позиционирование именных табличек — он не генерирует и не предоставляет отдельную модель, совместимую с Bedrock. По поводу поддержки моделей Bedrock/Geyser обращайтесь к документации вашего плагина моделей.

Интеграция с LibsDisguises​

EliteMobs также поддерживает LibsDisguises как альтернативу пользовательским моделям. Доступная настроенная модель имеет приоритет над маскировкой; если пригодная модель не выбрана, может использоваться настроенная маскировка. Интеграция синхронизирует видимость имени.

Для LibsDisguises настройте маскировку босса/NPC без поля customModel.

Модели предметов и магическое оружие (FMM)

Используйте fmmItemModel для оформления предмета через FMM и weaponType: WANDS или weaponType: STAVES для заданного автором магического оружия. EliteMobs сохраняет имя, lore, зачарования и уровень. FMM предоставляет модель, а для магического оружия — также определение атаки.

Старая связка scriptedItem остаётся для идентификации и отображения авторских предметов. Она больше не выполняет Lua-скрипты экипированных предметов, а FMM отклоняет определения предметов с непустым списком scripts. Не сочетайте её с авторским магическим оружием.

# Example EliteMobs custom item config
material: IRON_SWORD
name: "&cFlame Blade"
enchantments:
- "FIRE_ASPECT,2"
scalability: scalable
fmmItemModel: flame_blade

Указанный предмет или модель FMM должны существовать. При отсутствии модели оформления может остаться видимым ванильный материал с предупреждением; явно заданный weaponType, не соответствующий доступному авторскому оружию, приводит к отказу создания предмета. См. магическое оружие FMM и настройку пользовательских предметов.

Минимальные требования

EliteMobs, совместимая сборка FreeMinecraftModels или интеграция ModelEngine*, Blockbench** и ресурс-пак Minecraft. Интеграция ModelEngine рассчитана на API R3: EliteMobs выбирает её, только если ModelEngine включён и его версия содержит R3. Более новая основная версия не означает автоматическую совместимость.

* У этого плагина могут быть дополнительные зависимости. Проверьте документацию на их стороне.
** Необходим для создания и редактирования пользовательских моделей. Не нужен, если вы просто хотите установить контент без его изменения.

Приоритет плагинов

Если установлены и ModelEngine, и FreeMinecraftModels, EliteMobs по умолчанию будет использовать FreeMinecraftModels. Одновременно будет активен только один плагин пользовательских моделей.

Ручная установка пользовательской модели

Примечание: это руководство предполагает, что у вас уже есть корректная пользовательская модель. Они поставляются в форматах файлов Blockbench (.bbmodel).

EliteMobs может использовать пользовательские модели для NPC и пользовательских боссов. Процесс одинаков для обоих и выглядит следующим образом:

Шаг 1. Настройка конфигурации EliteMobs​

Перейдите к конфигурационному файлу пользовательского босса или NPC, который вы хотите изменить, и добавьте следующую строку:

customModel: modelname

Замените modelname на имя вашей модели. Имя — это название файла пользовательской модели, который вы используете. Например, файл пользовательской модели Test Boss — это showcase_boss.bbmodel. Соответственно, параметр конфигурации должен быть

customModel: showcase_boss

И это всё со стороны EliteMobs! Теперь становится немного сложнее.

Шаг 2. Генерация данных Model Engine​

Пути ниже взяты из архивного руководства по импорту ModelEngine. Используйте инструкции для установленной сборки ModelEngine.

  1. Поместите файл вашей пользовательской модели Blockbench (.bbmodel) в каталог (yourServer)/plugins/ModelEngine/blueprints.
  2. Выполните команду перезагрузки моделей для своей версии ModelEngine; архивное руководство использует /meg reload models. Убедитесь, что модель присутствует в загруженном реестре, и проверьте ошибки в консоли.

Шаг 3. Распространение ресурс-пака​

Это, возможно, самая хитрая часть, если вы хотите, чтобы ваш сервер управлял загрузками. Сначала проверьте, работает ли система, когда ресурс-пак уже установлен на вашем клиенте, прежде чем разбираться с его автоматическим распространением!

  1. Перейдите в каталог (yourServer)/plugins/ModelEngine/resource pack и создайте ресурс-пак на основе этих данных или добавьте находящуюся там папку assets в папку assets вашего ресурс-пака
    1. Для нового пака поместите assets и корректный pack.mcmeta в корень ZIP. Используйте метаданные для версии клиента, не копируйте старые номера форматов из архивных примеров. Подробнее.
    2. Если у вас уже есть ресурс-пак, убедитесь, что вы случайно не перезаписываете существующие модели. Подробнее.
  2. Распространите свой ресурс-пак среди игроков. Только игроки, у которых есть ресурс-пак, смогут видеть пользовательские модели, а для всех остальных это будет выглядеть очень странно и сломанно. Если вы намерены активно их использовать, возможно, стоит сделать использование ресурс-пака обязательным.
    1. (Необязательно) Чтобы позволить игрокам загружать ресурс-пак при входе, вам нужно разместить файл где-нибудь онлайн и изменить поле resource-pack= в server.properties, чтобы оно указывало на этот адрес.*
    2. Для автоматической загрузки укажите в resource-pack-sha1= SHA-1 готового ZIP. Вычислите его локально в PowerShell командой (Get-FileHash -LiteralPath "pack.zip" -Algorithm SHA1).Hash.ToLowerInvariant() или в Linux командой sha1sum pack.zip. Скопируйте только хеш из 40 символов и обновляйте его при каждом изменении ZIP.
    3. (Необязательно) Чтобы заставить игроков использовать ресурс-паки, используйте параметр require-resource-pack=true в server.properties.*

Если вы изменили server.properties, вам нужно будет перезапустить сервер!

* Примечание: в интернете есть множество руководств, которые могут помочь вам с настройкой, если эти инструкции вам не помогают.

Объединение ресурс-паков​

Можно объединить паки вручную или использовать ResourcePackManager для работы с паками Nightbreak. Внешний инструмент вроде merge.elmakers может объединить ZIP, но конфликты ID моделей всё равно нужно устранить, а итоговый пак проверить в целевом клиенте.

Шаг 4. Проверка модели​

После загрузки реестра моделей и применения соответствующего пака в клиенте проверьте модель на реальном боссе или NPC. Эти команды должен выполнять игрок с соответствующим разрешением:

  • Пользовательский босс: /em spawn boss filename.yml — elitemobs.place.admin, создаёт босса в точке, на которую вы смотрите.
  • NPC: /em place npc filename.yml — elitemobs.place.npc, сохраняет постоянное размещение там, где вы стоите.

/em remove переключает режим удаления. Ударьте цель, чтобы удалить её, затем повторите команду для выхода из режима. Удаление размещённого NPC этим способом также удаляет сохранённое размещение.

Создание и адаптация пользовательских моделей для EliteMobs

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

Однако, когда речь идёт об анимациях, требуется использование определённых имён для анимаций, чтобы гарантировать, что боссы смогут использовать эти анимации.

Эти имена анимаций — те, что заданы в Blockbench на вкладке animations. Вы можете переименовать их в любое время, а значит, вы можете адаптировать любые существующие модели для работы с EliteMobs.

Анимации​

Для автоматических хуков EliteMobs используйте следующие имена анимаций.

idle​

idle — общепринятое имя анимации покоя. EliteMobs запускает модель ModelEngine в её стандартном состоянии покоя; дальнейшим выбором анимаций покоя и движения занимается провайдер моделей.

walk​

walk — общепринятое имя анимации движения. EliteMobs не запускает её явно при прикреплении модели; выбор анимации движения принадлежит ModelEngine/FMM.

attack​

Существует три типа анимаций атаки:

attack​

attack — это правильное универсальное имя анимации для случая, когда босс атакует.

attack_melee​

attack_melee заменяет attack, когда пользовательский босс выступает прямым источником урона в событии Bukkit между сущностями. Анимация запрашивается во время обработки события, а не как замах, задерживающий удар. Уже отменённые события игнорируются, но последующий listener ещё может отменить урон. Используйте короткую анимацию и не полагайтесь на неё для задания момента урона.

attack_ranged​

attack_ranged заменяет attack, когда событие появления снаряда определяет пользовательского босса как живого стрелка. Оно реагирует на появление снаряда, а не задерживает выстрел до окончания анимации. Снаряды без такой привязки к стрелку не вызывают этот автоматический хук.

Система запасных анимаций (Fallback)​

EliteMobs использует систему запасных вариантов для анимаций атаки:

  • Если attack_melee не определена, используется attack
  • Если attack_ranged не определена, используется attack
  • FMM проверяет наличие attack перед воспроизведением; адаптер ModelEngine передаёт это запасное имя своему обработчику анимаций

Это позволяет вам создать единую анимацию атаки, которая работает для всех типов атак, или создать специализированные анимации для ближнего и дальнего боя.

damaged​

внимание

EliteMobs не регистрирует автоматический хук анимации damaged. Подсветка урона и другая реакция провайдера на попадание не равнозначны воспроизведению этой именованной анимации.

death​

При EliteMobDeathEvent EliteMobs запрашивает death на модели пользовательского босса, если эта анимация существует. Удаление и смена фазы не равны событию смерти. Воспроизведение и очистка модели по-прежнему зависят от жизненного цикла провайдера.

powers​

внимание

Автоматического соответствия между именами способностей и анимаций модели нет.

Анимацию уже можно запустить из способности

Автоматического сопоставления имён нет, но обе системы скриптов могут явно запустить анимацию по имени:

  • EliteScript: действие PLAY_ANIMATION, где значение — имя анимации. Каждая цель разрешается в пользовательского босса, и анимация проигрывается на его модели.
  • Lua: context.boss:play_model_animation("animation_name").

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

Импорт пользовательских моделей из подземелий

Шаг 1. Обычный импорт​

При импорте zip-архива пакета подземелья, содержащего пользовательские модели, модели перемещаются в тот плагин моделей, который установлен:

  • Установлен FreeMinecraftModels — модели попадают в (yourServer)/plugins/FreeMinecraftModels/models (или в устаревшую папку Models, если она уже существует), а файлы .bbmodel по пути конвертируются в .fmmodel. Затем EliteMobs генерирует событие установки моделей, чтобы FMM пересобрал свой реестр моделей.
  • Установлен только ModelEngine — модели попадают в (yourServer)/plugins/ModelEngine/blueprints. Текущий общий импортёр не перезагружает ModelEngine автоматически; пересоберите модели и ресурс-пак командой для этой версии.
Первая загрузка после установки DLC

После запуска пересборки моделей FMM импортом EliteMobs ожидает перехода FMM в инициализированное состояние до 300 секунд (пяти минут). Ошибка или отключение FMM, истечение срока либо прерывание ожидания останавливают инициализацию EliteMobs до загрузки неполных моделей и предметов. Проверьте ошибки обоих плагинов, устраните проблему пересборки и перезапустите сервер. Это не успешный запуск с пропуском нескольких сущностей с моделями.

Шаг 2. Ресурс-пак​

При запуске EliteMobs экспортирует встроенный пак в (yourServer)/plugins/EliteMobs/resource_pack/em_rsp_defaults и сохраняет .rsp_checksum в родительской папке. Копирование пропускается, если встроенная и сохранённая суммы совпадают и em_rsp_defaults существует. Смена версии плагина не принуждает к экспорту; совпадение сумм не проверяет каждый экспортированный файл на локальные изменения или удаление. Замена выполняется подготовленным обменом каталогов. Храните собственные изменения пака отдельно от этой генерируемой папки.

Вам нужно будет объединить эти файлы ресурс-пака с любыми файлами ресурс-пака Model Engine и распространить объединённый ресурс-пак среди игроков. Только игроки, у которых есть ресурс-пак, смогут видеть пользовательские модели.

Устранение неполадок

Распространённые проблемы:

  1. Модель не видна:

    • Проверьте наличие модели в реестре выбранного провайдера; используйте команду перезагрузки для этого провайдера и версии
    • Проверьте, что ресурс-пак установлен на клиенте
    • Убедитесь, что customModel совпадает с зарегистрированным ID модели, обычно именем файла без расширения
  2. Анимации не воспроизводятся:

    • Убедитесь, что имена анимаций в Blockbench точно совпадают с документированными именами
    • Проверьте, что анимации не настроены на цикл, если они должны воспроизводиться один раз
    • Проверьте отдельные анимации командами выбранного провайдера
  3. Установлены оба плагина:

    • EliteMobs будет использовать FreeMinecraftModels, если присутствуют оба
    • Выбора провайдера для отдельной модели нет. Чтобы использовать ModelEngine, отключите FreeMinecraftModels и запустите сборку ModelEngine R3
  4. У босса или NPC не видно имени (FMM):

    • Сначала проверьте name, настройку босса alwaysShowName и загрузку модели.
    • Текущий FMM размещает имя над хитбоксом без якоря tag_. Если позиция неверна, проверьте высоту хитбокса или добавьте авторский якорь.
    • Модели NPC прикрепляются заново при событии завершения перезагрузки FMM. Если модель исчезает после перезагрузки, проверьте предупреждения в консоли.