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

Конфигурация FreeMinecraftModels

Настройки YAML моделей подготавливаются вместе при перезагрузке контента. После изменения YAML пропа дождитесь успешной перезагрузки и только затем создавайте новый проп. Дайте каждому YAML-файлу модели уникальное имя во всех папках моделей. Если у двух файлов одинаковое имя (без учёта регистра), даже в разных подпапках, FMM загружает тот, чей абсолютный путь идёт первым при сортировке, а остальные пропускает с предупреждением Duplicate content filename. Пропущенная копия, все значения которой совпадают с загруженным файлом, пропускается без предупреждения.

На этой странице описаны текущие настройки config.yml и shop_config.yml, существенно влияющие на настройку, отрисовку, взаимодействие с игроком и опциональный магазин мебели. Настройки питомцев в pets.yml описаны на странице Питомцы.

Расположение файлов​

plugins/FreeMinecraftModels/config.yml
plugins/FreeMinecraftModels/shop_config.yml
plugins/FreeMinecraftModels/pets.yml

shop_config.yml создаётся при первом запуске; сам магазин остаётся отключённым, пока вы его не включите. pets.yml создаётся при первом запуске в режиме COSMETIC, где дикие питомцы появляются только во время ночных миграций. Lua-модули, которые выполняют питомцы, находятся в plugins/FreeMinecraftModels/pet_behaviors/; см. Модули поведения питомцев.

Минимальная версия сервера

В plugin.yml объявлено api-version: 1.21.4, поэтому Minecraft 1.21.4 — минимальная поддерживаемая версия сервера. Поддержка более старых линеек прекращена; устаревшие ветки отрисовки/вывода всё ещё есть в коде, но на сервере, способном загрузить плагин, они больше недостижимы.

Настройки config.yml​

setupDone​

  • По умолчанию: false
  • Управляет тем, считается ли подсказка по первичной настройке завершённой
  • Пока значение равно false, игроки с freeminecraftmodels.* получают напоминание примерно через 10 секунд после каждого входа, если ещё находятся на сервере
  • Открытие /fmm setup сохраняет true для всего сервера и прекращает дальнейшие напоминания. Выбор варианта завершения в /fmm initialize тоже сохраняет это значение; оно не доказывает установку пака или его получение клиентами

nightbreak.autoDownloadPluginUpdates​

  • По умолчанию: false
  • Общая настройка MagmaCore (находится в секции nightbreak: файла config.yml)
  • Когда true, FreeMinecraftModels автоматически скачивает при запуске доступные обновления jar плагина и файлы обновлений контента
  • Скачанные обновления плагина и контента применяются после перезапуска сервера, если только nightbreak.applyPluginUpdatesWithoutRestart не применит обновление плагина раньше
  • Автоматическое скачивание плагина требует действительного токена аккаунта Nightbreak и активной подписки сторонника на Patreon. Если чего-либо не хватает, оставьте false и используйте кнопку обновления в игре
  • Автоматическое обновление контента затрагивает установленные пакеты и откладывает их перезагрузку. Это не массовая установка всех доступных пакетов через /fmm downloadall. Меняйте настройку через /fmm setup или вручную

nightbreak.applyPluginUpdatesWithoutRestart​

  • По умолчанию: never
  • Общая настройка MagmaCore (находится в секции nightbreak: файла config.yml). Определяет, когда скачанное обновление плагина применяется без перезапуска
  • never: обновление ждёт следующего перезапуска. Его всё равно можно применить вручную командой /fmm applypluginupdate
  • when-empty: обновление применяется, как только на сервере не останется игроков. FMM проверяет это каждые 30 секунд
  • immediately: обновление применяется сразу после завершения скачивания
  • Любое другое значение считается как never
  • Применение обновления отключает FreeMinecraftModels и все зависящие от него плагины MagmaGuy, заменяет jar, затем снова загружает и включает их. Идущие бои с боссами, арены и экземпляры подземелий завершаются при перезагрузке этих плагинов
  • Плагин другого автора, зависящий от FreeMinecraftModels, блокирует замену; тогда обновление ждёт перезапуска. Если новый jar не включается, снова загружается предыдущий jar, а обновление остаётся подготовленным до следующего перезапуска. См. Команды

useDisplayEntitiesWhenPossible​

  • По умолчанию: true
  • Указывает FreeMinecraftModels предпочитать рендеринг через display-сущности, когда это поддерживают сервер и клиент
  • Значение false выбирает отрисовку костей через стойки для брони для Java-клиентов. Старая ветка для версий до 1.19.4 не означает поддержку старых серверов
  • Если модели Bedrock включены и доступен нативный мост пользовательских сущностей, игроки Bedrock получают такое представление. Иначе отрисовка костей для Bedrock использует стойки для брони. Настройка не навязывает один способ отображения всем игрокам

maxModelViewDistance​

  • По умолчанию: 60
  • Задаёт обычное ограничение расстояния для наблюдателей. В мирах с небольшим числом моделей исключение для расстояния менее 10 блоков обходит и этот предел, и проверку перекрытия; значения ниже 10 там не задают строгую границу
  • Более низкие значения снижают нагрузку на пакеты и клиентскую отрисовку в плотно заставленных моделями зонах
  • Отдельные сущности могут переопределить это значение во время выполнения через ModeledEntity.setViewDistanceOverride(int) — см. руководство по API

maxInteractionAndAttackDistance​

  • По умолчанию: 3
  • Применяется к статическим и динамическим моделированным сущностям
  • Используется проверками взаимодействия и попадания во время выполнения

maxInteractionAndAttackDistanceForProps​

  • По умолчанию: 6
  • Применяется к сущностям-реквизитам
  • Это значение отделено от дистанции взаимодействия для статических/динамических сущностей

sendCustomModelsToBedrockClientsV2​

  • По умолчанию: true
  • Управляет тем, пытается ли FreeMinecraftModels отправлять пользовательские модели Bedrock-клиентам
  • Этот ключ заменяет более старый sendCustomModelsToBedrockClients (у которого по умолчанию было false). Переименование в V2 переворачивает значение по умолчанию, так что Bedrock-игроки видят модели по умолчанию; если вы ранее явно задавали старый ключ, можете удалить его — новый ключ V2 возьмёт верх
  • Если отключено, Bedrock-игроки видят базовую ванильную сущность, если она есть (и маскировки для них не отображаются)
  • Если вы это включаете, убедитесь, что ваш путь ресурс-пака для Bedrock/Geyser/Floodgate действительно готов для таких клиентов
  • Диагностическое логирование Bedrock не является ключом конфига. Переключайте его через /fmm debug bedrock on|off и явно выключайте после сбора данных. /fmm reload не сбрасывает флаг; новый запуск сервера сбрасывает. См. Команды

skipUnchangedBoneUpdates​

  • По умолчанию: true
  • При true обновления движения и метаданных костей пропускаются, если отслеживаемые преобразования не изменились сверх допуска сравнения. Кости display-сущностей отслеживают позицию, поворот и масштаб; кости на стойках для брони — позицию и поворот
  • Неподвижные кости обычно пропускают эти обновления, но явно отмеченные изменения, например оттенка, вызывают повторную отправку
  • Периодическая полная синхронизация продолжает исправлять отклонения клиента; эта настройка не подавляет все виды пакетов модели
  • Ставьте false, только чтобы вернуть старое поведение «всегда пересылать каждую кость каждый тик» для отладки

useDeltaMetadataPackets​

  • По умолчанию: true
  • Когда true, потиковый пакет метаданных для костей модели на display-сущностях отправляет только изменившиеся значения (трансформацию кости), а не сериализует заново весь блоб item-display (модель предмета + custom model data) каждый тик
  • Полное состояние по-прежнему отправляется, когда игрок впервые видит модель, и при периодической ресинхронизации
  • Ставьте false, чтобы вернуть старое поведение с полным снимком каждый тик для отладки или сравнения

displayBonesRideTheirEntity​

  • По умолчанию: true
  • При true display-кости динамической модели едут на её сущности как пассажиры на клиентах Java. Клиент размещает каждую кость из той же сглаженной позиции, которую использует для сущности и её всадников, поэтому маунты, всадники и движущиеся модели остаются вместе и не отстают, а кости не отправляют пакеты позиции
  • Это относится к маунтам, например /fmm mount, и к моделям, чья скрытая сущность отслеживается через modelViewersTrackHiddenBodies. Кости едут на сущности, только пока её отслеживает клиент каждого зрителя на Java. Зритель может видеть модель дальше, чем сервер отслеживает её сущность (модели показываются на расстоянии до maxModelViewDistance, по умолчанию 60 блоков, тогда как Spigot по умолчанию отслеживает монстров до 48 блоков), а плагины могут скрывать сущность от зрителя. В этих случаях, а также пока модель умирает, кости снова телепортируются по отдельности
  • Игроков Bedrock это не затрагивает
  • Ставьте false, чтобы, как раньше, все модели телепортировали каждую кость по отдельности

riddenBoneInterpolationTicks​

  • По умолчанию: 1
  • За сколько тиков клиент Java плавно переводит едущую кость в следующую позу анимации. 0 — мгновенная смена позы каждый тик. 1 — плавный переход за один тик, который также сглаживает повороты
  • Используется только костями, которые едут на своей сущности; см. displayBonesRideTheirEntity
  • /fmm boneglide <ticks> меняет его до перезагрузки FMM, не правя этот файл. См. Команды

modelViewersTrackHiddenBodies​

  • По умолчанию: true
  • При true каждый игрок на Java, который видит динамическую модель со скрытой сущностью, дополнительно получает эту сущность как невидимое тело без экипировки. Тогда кости модели могут ехать на нём, как описано в displayBonesRideTheirEntity
  • Остальные игроки и игроки Bedrock по-прежнему видят сущность скрытой
  • Ставьте false, чтобы скрытые сущности не отслеживались, а их кости телепортировались по отдельности

idleWalkBlendTicks​

  • По умолчанию: 5
  • Экспериментально. За сколько тиков модель плавно переходит между анимациями idle и walk. Обе анимации продолжают проигрываться во время перехода
  • 0 переключает мгновенно, как в старых версиях
  • Игроки Bedrock получают то же время перехода. Оно записывается в генерируемые контроллеры анимаций Bedrock, поэтому изменение они увидят после повторной генерации ресурс-пака
  • См. Смешивание анимаций

deathBlendTicks​

  • По умолчанию: 4
  • Экспериментально. За сколько тиков модель плавно переходит из удерживаемой позы в анимацию death. 0 переключает мгновенно, как в старых версиях
  • Игроки Bedrock получают то же время перехода после повторной генерации ресурс-пака

weightedTurning​

  • По умолчанию: true
  • Экспериментально. При true динамическая модель поворачивается к направлению своего моба с инерцией: разгоняется, поворачивается с ограниченной скоростью, затем замедляется и останавливается на новом направлении без перелёта. Большие модели поворачиваются медленнее
  • Так поворачивается только модель. Сам моб поворачивается и ходит точно так же, как раньше
  • Модель поворачивается мгновенно, пока игрок едет верхом прямо на её мобе или сидит на одном из её мест m_
  • Ставьте false, чтобы модели поворачивались мгновенно вместе с мобом, как в старых версиях
  • О том, как размер меняет пределы, см. в разделе Инерция поворота

turnSpeedCap​

  • По умолчанию: 30
  • Экспериментально. Предельная скорость поворота, в градусах за тик, для модели размером в один блок
  • Предел делится на квадратный корень из размера модели и никогда не превышает 90 градусов за тик

turnAcceleration​

  • По умолчанию: 6
  • Экспериментально. На сколько градусов за тик модель размером в один блок набирает или теряет скорость поворота каждый тик
  • Значение делится на размер модели, поэтому большие модели разгоняются и замедляются медленнее
  • Значение 0 или меньше, как и turnSpeedCap 0 или меньше, заставляет модели поворачиваться мгновенно

maxModelsForProximityOverride​

  • По умолчанию: 25
  • Псевдо-балансировщик нагрузки для переопределения видимости на ближней дистанции
  • Обычно модель на расстоянии менее 10 блоков от игрока обходит проверки расстояния и перекрытия, используемые для выбора наблюдателей; остальные правила видимости продолжают действовать
  • В плотной зоне (например, многоэтажный хаб NPC) это переопределение превращает десятки моделей, которых игрок на самом деле не видит — на других этажах, за стенами, — в зрителей, отправляющих пакеты каждый тик
  • Когда в мире загружено не меньше этого числа моделей, исключение для ближней дистанции в нём отключается. Наблюдатели должны пройти заданные проверки расстояния и видимости даже вблизи. Проверка видимости использует центр модели и углы хитбокса; отсутствие хитбокса считается успешной проверкой. Миры с небольшим числом моделей сохраняют исключение
  • Решение принимается для каждого мира, а не глобально, поэтому переполненный мир-хаб не наказывает тихие
  • Поднимите значение очень высоко, чтобы фактически вернуть поведение с постоянным переопределением; задайте 0, чтобы всегда требовать линию видимости
  • /fmm packetdebug — предназначенный для этого инструмент измерения эффекта — см. Команды

filmicMode​

внимание

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

  • По умолчанию: false
  • Для записи трейлеров и видео через ReplayMod или похожий мод записи
  • Обычно игрок получает модель, только пока она находится в пределах maxModelViewDistance и проходит проверку линии видимости. Скрытые модели удаляются с этого клиента и перестают анимироваться. Повтор содержит только то, что получил записывающий клиент, поэтому, когда камера повтора смотрит на такие модели, они отсутствуют или застыли
  • При true каждый игрок получает все загруженные модели в чанках, загруженных у этого игрока, и эти модели продолжают анимироваться — даже за стенами или дальше maxModelViewDistance. Область загруженных чанков равна дальности обзора мира, ограниченной дальностью прорисовки клиента, плюс один чанк. Модели в незагруженных чанках по-прежнему не отображаются
  • Чтобы включить режим только на время записи, используйте /fmm filmic on|off вместо редактирования этого файла. См. Команды

particleEffectsEnabled​

  • По умолчанию: true
  • При false никакие эффекты частиц Blockbench не воспроизводятся на моделях, реквизите и предметах в руке. Модели загружаются и анимируются как обычно
  • Изменение применяется после /fmm reload или перезапуска. Игроки Java видят его после перезагрузки FMM. Игроки Bedrock видят его после получения пересобранного ресурс-пака, потому что их эффекты поставляются внутри пака
  • См. Частицы

maxParticlesPerEmitter​

  • По умолчанию: 100
  • Верхний предел живых частиц для одного эффекта частиц на одной модели. Если собственный max_particles файла частиц меньше, применяется он
  • Каждая частица, которую видит игрок Java, — это пакетная сущность, поэтому высокие значения нагружают канал

maxParticlesPerViewer​

  • По умолчанию: 400
  • Верхний предел живых частиц, показываемых одному игроку Java для всех моделей вместе
  • После его достижения новые частицы для этого игрока пропускаются, пока не исчезнут старые. Игроки Bedrock отрисовывают частицы на своём клиенте и не учитываются

preventPropPlacementInProtectedRegions​

  • По умолчанию: true
  • Когда true, FreeMinecraftModels спрашивает у зарегистрированных в MagmaCore провайдеров защиты, может ли именно этот игрок строить в ячейке, которую займёт реквизит, и отклоняет размещение, если ответ отрицательный
  • Игроки с правом freeminecraftmodels.bypassregionprotection (по умолчанию: op) пропускают эту проверку защиты FMM. Проверки свободного места и ограничения других плагинов сохраняются
  • Встроенные провайдеры с учётом игрока поддерживают WorldGuard и GriefPrevention. Другие плагины могут регистрировать провайдеров. Отказ или ошибка провайдера запрещают размещение; MagmaCore также запрещает его в местах, охваченных владельцем защищённой локации. Если нет ни отказавшего провайдера, ни защищённого владения, проверка не добавляет ограничений
  • Сообщение об отказе: You don't have permission to place a model here!

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

Каждое размещение получает проверку одной ячейки; воксельные реквизиты получают вторую, по всему объёму:

Тип реквизитаПроверяемые ячейки
Обычный (свободной формы) реквизитОдна ячейка, примыкающая к грани блока, по которой кликнули, — та ячейка, которую займёт реквизит
Реквизит с voxelize: trueСначала та же примыкающая ячейка, затем каждая ячейка в повёрнутом footprint реквизита (ширина x высота x глубина) вокруг точки размещения, выровненной по сетке. Если любая ячейка в этом объёме недоступна, отклоняется всё размещение

Проверка по объёму существует потому, что воксельный реквизит может быть шириной в несколько блоков, и проверка только кликнутой ячейки позволила бы игроку встать на границе привата и уронить большой реквизит в чужую постройку. Она выполняется после проверки свободного места, поэтому Not enough space to place this model! по-прежнему имеет приоритет, когда footprint физически перекрыт.

Проверяемый объём округляет каждое измерение хитбокса через Math.round, минимум до одного блока. Объём пакетных барьеров использует ceil(size - 0.4) и может отличаться; проверка размещения не гарантирует одинаковый охват всех ячеек клиентской коллизии.

примечание

Право проверяется до запроса к провайдеру. Выдайте freeminecraftmodels.bypassregionprotection, чтобы освободить персонал от проверок защиты FMM, сохранив настройку для остальных игроков. Это не отменяет проверку свободного места или отмену событий другими плагинами.

registerCraftingRecipes​

  • По умолчанию: true
  • Для экономики только с покупками установите false и перезапустите сервер. Корректные включённые записи рецептов останутся в каталоге магазина, но их рецепты крафта Bukkit будут удалены
  • Меню доступных для крафта предметов /fmm и сведения о рецептах требуют фактически зарегистрированного рецепта, поэтому записи с отключённым крафтом там отсутствуют
  • isEnabled: false в отдельном рецепте удаляет его из загруженного каталога, включая магазин. shopEnabled: false скрывает только возможность покупки

shop_config.yml​

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

Ключи верхнего уровня​

КлючПо умолчаниюОписание
enabledfalseГлавный переключатель /fmm shop. Команда регистрируется только когда значение true, а также присутствуют Vault и экономический провайдер
defaultPrice100.0Цена для рецептов без shopPrice; неположительное значение заменяется на 100.0. Изменение этого значения не меняет уже сохранённые цены рецептов
menuTitle&8FMM - Furniture ShopЗаголовок, отображаемый в верхней части инвентаря магазина (поддерживает цветовые коды &)
priceLoreFormat&7Price: &e{price}Строка lore, добавляемая к каждому товару в магазине с указанием цены. Плейсхолдер: {price}
clickToBuyLoreFormat&aClick to purchaseСтрока lore, добавляемая к каждому товару в магазине с предложением о покупке

Ключи сообщений (messages.*)​

Все строки сообщений поддерживают цветовые коды &.

КлючПо умолчаниюПлейсхолдеры
messages.purchaseSuccess&aPurchased &f{item} &afor &e{price}&a. Balance: &e{balance}&a.{item}, {price}, {balance}
messages.insufficientFunds&cYou need &e{price} &cto buy &f{item}&c. Balance: &e{balance}&c.{item}, {price}, {balance}
messages.shopDisabled&cThe furniture shop is currently unavailable.нет
messages.itemNotForSale&cThat item is not currently for sale.{item}
messages.inventoryFull&eYour inventory was full; &f{item} &ehas been dropped at your feet.{item}

Поля магазина в рецептах​

Каждый файл рецепта в plugins/FreeMinecraftModels/recipes/<model_id>.yml получает два дополнительных поля:

ПолеПо умолчаниюОписание
shopEnabledtrueПоказывается ли рецепт в /fmm shop. Само значение false не отключает крафт; состояние рецепта и registerCraftingRecipes продолжают действовать
shopPricedefaultPrice из shop_config.ymlСтоимость в валюте Vault для этого конкретного предмета

Конструктор рецептов (/fmm craftify) записывает оба поля при сохранении, поэтому настройка цены — это просто правка в тексте.

Права доступа​

Зарегистрированы в plugin.yml​

ПравоПо умолчаниюОписание
freeminecraftmodels.*opWildcard, дающий права admin, deleteall, маскировку себя/других, обход защиты регионов и права администрирования питомцев
freeminecraftmodels.adminopДоступ к /fmm admin (админский браузер контента) и /fmm giveitem. Остальные админ/отладочные команды (/fmm location, /fmm spawn, /fmm mount, /fmm itemify, /fmm craftify, /fmm reload, /fmm stats, /fmm hitbox visualize, /fmm debug, /fmm packetdebug, /fmm filmic, /fmm boneglide, /fmm setup, /fmm initialize, /fmm recommendedplugins, /fmm downloadall, /fmm downloadallcontent, /fmm updatecontent, /fmm downloadpluginupdate, /fmm applypluginupdate, /fmm forcereinstallcontent) вместо этого проверяют wildcard freeminecraftmodels.*
freeminecraftmodels.deleteallopПотомок wildcard; доступ к /fmm deleteall
freeminecraftmodels.disguise.selfopРазрешает /fmm disguise / /fmm undisguise для отправителя
freeminecraftmodels.disguise.othersopРазрешает целевую маскировку/снятие маскировки, а также /fmm disguiselist
freeminecraftmodels.bypassregionprotectionopОбходит проверки защиты размещения и взаимодействия FMM, в том числе при включённом preventPropPlacementInProtectedRegions; не отменяет ограничения пространства или отмену событий другими плагинами
freeminecraftmodels.menutrueДоступ к меню крафтящихся предметов /fmm
freeminecraftmodels.shoptrueДоступ к /fmm shop
freeminecraftmodels.petstrueДоступ к /fmm pets
freeminecraftmodels.pets.adminopПотомок wildcard; доступ к /fmm petadmin и /fmm petmigrate
nightbreak.loginopРегистрируется MagmaCore, а не через plugin.yml. Требуется для общих команд /nightbreaklogin и /nightbreaklogout
nightbreak.pluginsopРегистрируется MagmaCore, а не через plugin.yml. Требуется для общей команды /nightbreak plugins

Команды питомцев описаны на странице Питомцы.

Конфигурация YML модели​

Сопутствующий файл .yml модели имеет то же базовое имя и каталог, что и .bbmodel. Реквизиты и предметы для руки используют разные части этой конфигурации.

Реквизиты​

isEnabled: true
name: "&6Oak Table"
lore:
- "&7Seats four"
voxelize: true
solidify: true
scripts:
- my_prop.lua
ПолеОписание
isEnabledВключено ли определение; по умолчанию true
nameОтображаемое имя предмета для размещения реквизита. Поддерживает цветовые коды. Без него предмет назван по модели, например ✦ Oak Table ✦
loreОписание предмета для размещения. Поддерживает цветовые коды. Любой ключ lore заменяет описание по умолчанию (подсказки по размещению и подбору плюс ID модели), а пустой список (lore: []) убирает его
scriptsНезависимые Lua-скрипты реквизитов из plugins/FreeMinecraftModels/scripts/
voxelizeПривязывает размещение к сетке блоков и поворотам по 90 градусов; проверяет свободное место во всём повёрнутом объёме
solidifyВместе с вокселизацией отправляет барьерные блоки только в пакетах для клиентской коллизии; это не блоки мира, и они удаляются вместе с реквизитом

name и lore предмета для размещения действуют везде, где FMM создаёт этот предмет: /fmm itemify, результат крафта по рецепту, покупки в магазине и предметы, взятые из меню администратора. Записи меню, например списки магазина и его сообщения о покупке, по-прежнему показывают имя, образованное из ID модели. Предметы, уже лежащие в инвентарях, сохраняют старое имя и описание.

Предметы для руки​

isEnabled: true
material: DIAMOND_SWORD
name: "&bFrost Blade"
lore:
- "&7A sword forged in ice"
enchantments:
- "minecraft:sharpness,3"
- "minecraft:unbreaking,2"

material выбирает материал предмета Bukkit и регистрирует предмет для руки вместо реквизита. name и lore поддерживают цветовые коды. Зачарования используют идентификаторы в нижнем регистре с пространством имён и положительные целочисленные уровни. Если зачарование является набором предметов, описание предмета показывает части набора в строке описания, содержащей $itemSet, а если такой строки нет — после описания. Получайте зарегистрированные предметы через /fmm giveitem <id> или меню администратора. Рецепты реквизитов и магазин создают бумажные предметы для размещения, а не эти авторские предметы для руки.

Чтобы окрасить кожаную броню, добавьте после материала цвет RGB в шестнадцатеричном виде без #, как в экипировке EliteMobs: material: LEATHER_CHESTPLATE:ff8800. Суффикс работает только с материалами, имя которых начинается с LEATHER_, например с частями кожаной брони и кожаной конской бронёй. Суффикс у любого другого материала или значение, не состоящее из одной–шести шестнадцатеричных цифр, приводит к отклонению каталога предметов: /fmm reload сохраняет текущий каталог, а консоль называет файл. Предметы, уже находящиеся в инвентарях, сохраняют старый цвет.

Совместимость при обновлении

Lua-скрипты экипированных предметов больше не поддерживаются. Определение предмета с непустым scripts:, старыми зачарованиями без пространства имён, например SHARPNESS,3, или недоступным на сервере материалом пропускается с диагностикой. FMM не меняет авторский файл. Удалите старую привязку скрипта предмета и создавайте эффекты через определения зачарований; скрипты реквизитов по-прежнему поддерживаются.

Для жезлов и посохов добавьте определение магического оружия. Не помещайте поведение оружия в скрипт реквизита или устаревшие хуки предметов.

Эксплуатационные заметки​

  • /fmm reload сначала импортирует и проверяет авторские предметы, зачарования и рецепты реквизита, сохраняя текущий каталог активным. Ошибка проверки отклоняет перезагрузку; успешная проверка запускает полную повторную инициализацию, включая config.yml, shop_config.yml, pets.yml, рецепты, модели, виды питомцев, модули поведения питомцев и выходной пак. Одновременные запросы инициализации и перезагрузки отклоняются
  • Успешная полная инициализация планирует FmmReloadedEvent через 40 тиков, чтобы зависимые плагины восстановили привязки. Более узкая перезагрузка контента от импортера тоже отправляет событие при успехе. Она пересобирает модели, предметы, зачарования, скрипты реквизита и рецепты, но не перечитывает config.yml и shop_config.yml. Сбой после очистки активных реестров в этом пути отключает FMM. Исключение — сбой рецептов реквизита: FMM пишет в лог Prop recipe catalog rejected и оставляет прежние рецепты активными. Отклонённая проверка не означает завершённую перезагрузку
  • При выгрузке мира FMM удаляет модели реквизитов из среды выполнения, сохраняя их постоянные базовые стойки. После повторной загрузки этих сущностей он удаляет дубликаты и восстанавливает реквизиты. Это отдельный процесс, не равнозначный окончательному подбору или уничтожению реквизита
  • Фиксированные метки времени ZIP и упорядоченные карты моделей уменьшают лишние изменения, но порядок обхода файловой системы может изменить байты ZIP и SHA1 даже при неизменных моделях. Идентичный результат не гарантируется. См. Вывод ресурс-пака.
  • FreeMinecraftModels только генерирует ресурс-пак; сам он его не хостит.
  • ResourcePackManager по-прежнему является рекомендуемым способом доставки для Java-клиентов и самым безопасным задокументированным путём для смешанных конфигураций.
  • WorldGuard, WorldEdit, GriefPrevention, Vault, floodgate и Geyser-Spigot объявлены как softdepend в plugin.yml. WorldGuard и GriefPrevention предоставляют встроенные запросы защиты; WorldEdit не является отдельным провайдером защиты. Vault с экономическим провайдером включает магазин. Для соответствующего отображения Bedrock должны быть доступны распознавание клиента, мост отрисовки и доставка ресурс-пака

Когда менять эти значения​

Используйте этот конфиг для настройки поведения во время выполнения, а не для управления пакетами контента.

  • Для работы с жизненным циклом официальных пакетов используйте /fmm setup, /fmm downloadall и /fmm updatecontent
  • Используйте папку imports для ручного импорта .bbmodel или другого локального контента
  • Используйте config.yml, когда нужно подкрутить режим отрисовки, дальность видимости, дистанцию взаимодействия, поведение Bedrock, применение защиты регионов или автоматическое скачивание обновлений
  • Используйте skipUnchangedBoneUpdates, useDeltaMetadataPackets и maxModelsForProximityOverride для настройки пакетов/трафика в мирах с плотной застройкой моделями. Все три по умолчанию уже настроены на оптимизированное поведение; значения false / очень высокие существуют для отладки и A/B-сравнения, а не как рекомендуемые продакшн-значения
  • Используйте filmicMode (или /fmm filmic on) только во время записи видео, затем выключайте его
  • Используйте idleWalkBlendTicks, deathBlendTicks, weightedTurning, turnSpeedCap и turnAcceleration, чтобы настроить анимацию и повороты моделей. Задайте времена переходов 0, а weightedTurning — false, чтобы вернуть мгновенные переключения и повороты старых версий
  • displayBonesRideTheirEntity и modelViewersTrackHiddenBodies включены по умолчанию. Значение false возвращает старую телепортацию каждой кости по отдельности, при которой движущиеся модели и маунты могут отставать от своей сущности
  • Снизьте maxParticlesPerEmitter и maxParticlesPerViewer или задайте particleEffectsEnabled: false, если модели с большим количеством частиц слишком нагружают канал
  • Используйте shop_config.yml (и поля shopEnabled/shopPrice в рецептах), чтобы настраивать магазин мебели без правок кода

Известные особенности​

  • Поведение на Bedrock зависит и от sendCustomModelsToBedrockClientsV2, и от вашей более широкой настройки Floodgate/Geyser/ресурс-пака, поэтому делайте осторожные выводы, если не тестировали конкретно свой стек.
  • Если магазин включён, но отсутствует Vault или экономический провайдер, он остаётся недоступным и записывает конкретное предупреждение при запуске. /fmm version сообщает только версию плагина; проверьте эти предупреждения, если /fmm shop отсутствует.