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

Вывод ресурс-пака FreeMinecraftModels

FreeMinecraftModels записывает сгенерированный пак в папку output.

Пути вывода по умолчанию​

Плагин пересобирает эту папку при старте и при /fmm reload:

plugins/FreeMinecraftModels/output/FreeMinecraftModels

После этого он упаковывает её в:

plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip

Именно этот путь к zip ожидает ResourcePackManager при интеграции с FreeMinecraftModels.

При генерации всё содержимое output, кроме последнего опубликованного FreeMinecraftModels.zip, удаляется и создаётся заново. Храните исходные модели и другие файлы вне него. Если FMM не может очистить папку, генерация завершается ошибкой Failed to prepare output folder, и FMM не завершает инициализацию.

Что генерируется​

Генератор копирует метаданные пака, значок и атлас из комплекта плагина, затем добавляет загруженные модели и текстуры:

  • pack.mcmeta
  • pack.png
  • assets/minecraft/atlases/blocks.json
  • assets/freeminecraftmodels/... вывод моделей и текстур

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

FreeMinecraftModels генерирует файлы определений моделей предметов в:

assets/freeminecraftmodels/items

В коде остаётся старый путь подмены модели кожаной конской брони для серверов до 1.21.4. Однако плагин объявляет api-version: 1.21.4, поэтому ни один сервер, способный его загрузить, не выполняет эту ветвь.

Вывод display-модели (1.21.4+)​

Когда рядом с моделью есть корректный .json файл display-модели (см. Заметки по созданию моделей), FMM обрабатывает его таблицу textures и записывает в:

assets/freeminecraftmodels/models/display/{modelId}.json

Также он генерирует соответствующее определение предмета в:

assets/freeminecraftmodels/items/display/{modelId}.json

Значения текстур с пространством имён остаются без изменений. Остальные разрешаются по числовому индексу текстуры; запасным вариантом служит доступная извлечённая текстура. Некорректный display JSON вызывает предупреждение и не регистрируется. Реестр времени выполнения позволяет FMM назначать обработанную display-модель для вида предмета в руке и инвентаре.

Спрайты частиц​

Для каждого эффекта частиц, используемого моделью, FMM записывает текстуру эффекта и по одной плоской модели предмета на каждый спрайт:

assets/freeminecraftmodels/textures/entity/fmm_particles/{modelId}/{effect}.png
assets/freeminecraftmodels/models/particle/{modelId}/{effect}/{index}.json
assets/freeminecraftmodels/items/particle/{modelId}/{effect}/{index}.json

Эти спрайты видят только игроки Java. Игроки Bedrock получают эффект как нативную частицу из описанного ниже комплекта Bedrock.

Служебные файлы для ResourcePackManager​

FMM записывает небольшие JSON-файлы, которые ResourcePackManager читает при конвертации пака для Bedrock. На Java-клиенты они не влияют.

ФайлКогда записываетсяНазначение
assets/freeminecraftmodels/rspm_item_bases/display/{modelId}.jsonУ модели есть display-модель, а её сопутствующий .yml задаёт известный серверу material. Суффикс окраски кожи, например LEATHER_CHESTPLATE:ff8800, отменяет запись файлаУказывает ванильный предмет, на котором основан пользовательский предмет, например minecraft:blaze_rod, чтобы Bedrock показывал модель на правильном базовом предмете, а не на угаданном по имени файла
assets/freeminecraftmodels/rspm_item_particles/display/{modelId}.jsonУ модели есть display-модель и анимация с ключевыми кадрами частицПеречисляет эффекты, локаторы и зацикленную временную шкалу частиц, которые ResourcePackManager добавляет в attachable предмета для Bedrock
assets/freeminecraftmodels/rspm_item_java_only/particle/{modelId}/{effect}.jsonМодель использует эффект частицСообщает ResourcePackManager, что предметы-спрайты этого эффекта не нужно превращать в пользовательские предметы Bedrock

Пока particleEffectsEnabled равно false, FMM пропускает файлы rspm_item_particles и файлы частиц Bedrock. Спрайты частиц для Java и их файлы rspm_item_java_only по-прежнему записываются.

Комплект кастомных сущностей Bedrock​

Наряду с ресурсами Java-пака FreeMinecraftModels пытается экспортировать комплект кастомных сущностей Bedrock для каждой загруженной модели с текстурами в:

plugins/FreeMinecraftModels/output/FreeMinecraftModels/assets/freeminecraftmodels/rspm_bedrock_pack

Каждая модель вносит свои текстуры, геометрию, render controller, анимации, animation controllers и определение сущности — всё в пространстве имён freeminecraftmodels: (freeminecraftmodels:<model_id>). Модель с эффектами частиц также вносит particles/<model_id>_<effect>.json (идентификатор fmm:<model_id>_<effect>) и, если FMM нашёл текстуру эффекта, textures/entity/fmm_particles/<model_id>/<effect>.png. См. Частицы.

Что важно при создании контента:

  • Модель без текстур пропускается, с сообщением Skipping Bedrock custom entity export for <id>: model has no textures. в консоли
  • Импортёр Java по-прежнему принимает такое определение без текстур; явно пропускается только его запись в комплекте кастомных сущностей Bedrock.
  • Геометрия Bedrock исключает кости посадочных мест (m_), созданные кости имён (fmm_nametag_bone_*) и hitbox. Авторские якоря tag_ остаются в геометрии, часто без кубов.
  • Модель без анимаций всё равно экспортирует единственный слот анимации idle
  • Геометрия модели подвешена к созданной кости freeminecraftmodels_lean, если у модели не больше 672 анимаций. Эта кость показывает игрокам Bedrock ориентацию при движении и центрирование. Каналы анимации с ключевыми кадрами MoLang записываются как написаны, поэтому клиенты Bedrock вычисляют их сами
  • Ширина/высота хитбокса Bedrock-сущности во время выполнения берутся из кости hitbox модели; без неё используется запасной вариант 1.0 x 2.0

Пустая группа hitbox имеет нулевые размеры и не использует этот запасной вариант. Префикс b_ скрывает отрисовку в Java, но не исключает кости из геометрии Bedrock. Экспорт анимаций Bedrock не запекает решение IK, которое FMM вычисляет во время работы; см. Анимации. Ошибки экспорта записываются в журнал и могут оставить неполный комплект файлов.

Бэкенду Bedrock нужен включённый плагин с именем floodgate, Geyser-Spigot или Geyser; эта проверка не учитывает регистр. Определение отдельных игроков отдельно проверяет Floodgate или Geyser-Spigot. Включение бэкенда само по себе не подтверждает обнаружение игроков или доставку пака. На сервере только с Java FMM экспортирует файлы, однако не создаёт и не обновляет этот бэкенд.

Условный вывод предметов для луков и арбалетов​

Когда FMM обнаруживает полный набор загруженных моделей состояний лука или арбалета с зарегистрированными display JSON (см. Заметки по созданию моделей), он генерирует одно определение предмета под базовым ID модели. Оно переключает состояния на клиенте. Настроенный предмет должен использовать соответствующий материал BOW или CROSSBOW.

Вывод для лука​

Для луков сгенерированное определение предмета использует minecraft:condition на using_item с minecraft:range_dispatch по use_duration (масштаб 0.05):

УсловиеИспользуемая модель
Предмет не используется_idle
Используется, fallback (только начали)_draw_start
Используется, порог 0.65_draw_half
Используется, порог 0.9_draw_full

Вывод для арбалета​

Для арбалетов сгенерированное определение предмета использует minecraft:select на charge_type. Когда заряжен (стрелой или ракетой), показывается модель _charged. Незаряженный fallback использует minecraft:range_dispatch на crossbow/pull:

УсловиеИспользуемая модель
Не используется, не заряжен_idle
Используется, fallback (только начали)_draw_start
Используется, порог 0.58_draw_half
Используется, порог 1.0_draw_full
Заряжен (стрелой или ракетой)_charged

Расположение вывода​

Сгенерированное условное определение предмета пишется рядом с другими определениями предметов в:

assets/freeminecraftmodels/items/display/{baseModelId}.json

Базовый ID становится общедоступным display-предметом. Определения предметов отдельных состояний удаляются из вывода и реестра времени выполнения. Их display-геометрия остаётся, поскольку на неё ссылается условное определение.

Совместимость с Minecraft 26.1+​

Генератор пака применяет эти исправления на всех поддерживаемых версиях, включая Minecraft 26.1 и новее:

  • Ограничение UV: UV граней ограничиваются UV-границами текстуры (0–textureWidth / 0–textureHeight) перед масштабированием в UV-пространство Minecraft 16x16. Границы берутся из UV-метаданных текстуры, если они есть; иначе используются размеры изображения или запасное разрешение модели. Ограничение отрицательных или слишком больших координат может привести к потере деталей текстуры на соответствующей грани.
  • Пустые и якорные кости пропускаются: кость без кубов не записывает JSON геометрии, поэтому запись определения модели предмета для неё оставила бы висящую ссылку. 1.21.x молча это терпел; 26.1+ логирует каждую такую как Missing block model: freeminecraftmodels:.... Теперь генератор пропускает и файл геометрии, и определение предмета для таких костей. Это также покрывает кости hitbox (только для коллизий), позиционные якоря tag_name, автогенерируемые FMM варианты fmm_nametag_bone_* и чисто обёрточные/якорные кости.
примечание

Якорю тега имени tag_ не нужны кубы. Якоря без кубов не создают геометрию, но один лишь префикс не скрывает все авторские кости с кубами. Кость с точным именем tag_name обрабатывается особым образом. См. Якоря тегов имён.

Эти исправления применяются автоматически, конфигурации не требуется.

Детерминированный вывод​

FMM сокращает ненужные изменения вывода, используя таблицы с порядком вставки для определений предметов по костям и блоков display моделей. Код записи ZIP также фиксирует временные метки записей.

Идентичные байты ZIP не гарантируются: код записи ZIP обходит каталоги в порядке файловой системы без сортировки записей. Изменения моделей, текстур, display JSON, конфигурации или версий генератора и сервера также могут закономерно менять пак.

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

Поведение при перезагрузке​

При /fmm reload FMM сначала импортирует контент и подготавливает новые каталоги предметов, зачарований и рецептов, сохраняя текущую среду выполнения активной. Если подготовка не удаётся, перезагрузка отклоняется, а текущий каталог сохраняется. После успешной подготовки FMM:

  • удаляет активные модели, декоративные объекты, маскировки, среды выполнения скриптов, состояние слушателей и записи перезарядок скриптов перед их повторным созданием
  • заново загружает конфигурацию и рецепты
  • пересобирает папку output/FreeMinecraftModels
  • пересоздаёт output/FreeMinecraftModels.zip
  • вызывает resourcepackmanager reload, если ResourcePackManager включён
  • планирует FmmReloadedEvent в основном потоке через 40 тиков, чтобы зависимые плагины могли восстановить привязки моделей

FMM сначала записывает архив в output/FreeMinecraftModels.zip.pending, а затем перемещает его поверх FreeMinecraftModels.zip. Если запись или перемещение не удаётся, генерация завершается ошибкой, а предыдущий ZIP остаётся на месте. Полный ZIP не доказывает доставку, поэтому проверьте также доставку через ResourcePackManager и принятие пака клиентом. Различие между полной перезагрузкой и обновлением импортированного контента описано в разделе Конфигурация.