Маскировки игроков
FreeMinecraftModels умеет маскировать любого онлайн-игрока под загруженную модель. Маскировки управляются через команды, публичный DisguiseAPI и PlayerDisguiseEntity на каждого игрока, который отвечает за невидимость и отрисовку модели для замаскированного игрока.
Команды
| Команда | Право | Заметки |
|---|---|---|
/fmm disguise <modelID> | freeminecraftmodels.disguise.self | Маскирует отправителя. Только для игрока |
/fmm disguise <modelID> <player> | freeminecraftmodels.disguise.others | Маскирует указанного игрока. Работает из консоли |
/fmm undisguise | freeminecraftmodels.disguise.self | Снимает маскировку с отправителя. Только для игрока |
/fmm undisguise <player> | freeminecraftmodels.disguise.others | Снимает маскировку с указанного игрока. Работает из консоли |
/fmm disguiselist | freeminecraftmodels.disguise.others | Перечисляет всех замаскированных игроков и их модели |
Wildcard freeminecraftmodels.* выдаёт все три права (admin, disguise.self, disguise.others) при дефолте OP.
Поведение
- Маскировка игрока, который уже замаскирован, аккуратно заменяет предыдущую маскировку — снимать её сначала не нужно.
- Замаскированный игрок делается невидимым для других, чтобы виделась только модель. Сам замаскированный игрок видит себя как обычно.
- Невидимость сохраняется и после ведра молока, и после очистки эффектов маяком, и после других действий, которые обычно сняли бы эффект.
- Хитбокс игрока не меняется. Таргетинг мобов, коллизия и PvP работают как обычно.
- Маскировки не переживают перезапуск сервера. Они отслеживаются только в памяти.
- При
/fmm reloadвсе активные маскировки сносятся в рамках выключения плагина. После перезагрузки игроков нужно маскировать заново.
Клиенты Bedrock
Маскировки полагаются на то, что FMM отрисует пользовательскую модель. Чтобы маскировки были видны Bedrock-игрокам, нужно установить sendCustomModelsToBedrockClients: true в config.yml и иметь рабочий пайплайн ресурс-паков для Bedrock (Floodgate + Geyser + конвертированный ресурс-пак). Если это не настроено, Bedrock-игроки не увидят ни модель, ни базового невидимого игрока — фактически они увидят пустое место там, где стоит замаскированный игрок.
DisguiseAPI
Сторонние плагины могут управлять маскировками программно через com.magmaguy.freeminecraftmodels.api.DisguiseAPI.
import com.magmaguy.freeminecraftmodels.api.DisguiseAPI;
// Маскировка (возвращает false, если ID модели не загружен)
boolean ok = DisguiseAPI.disguise(player, "dragon");
// Снять маскировку (возвращает true, если маскировка была снята)
DisguiseAPI.undisguise(player);
// Запросы
boolean isDisguised = DisguiseAPI.isDisguised(player);
String modelID = DisguiseAPI.getDisguiseModelID(player); // null, если не замаскирован
// Неизменяемый снимок всех замаскированных игроков
Collection<Player> all = DisguiseAPI.getDisguisedPlayers();
Этот API — публичная, безопасная при рефакторингах точка входа. Плагинам следует обращаться к DisguiseAPI, а не к внутреннему DisguiseManager.
Типичные сценарии
- Ролевые и RPG-серверы: маскировка игроков под модели боссов для синематиков или квестовых скриптов.
- Проведение событий: маскировка ведущего под гигантскую пользовательскую модель.
- Маунты и транспорт: комбинируйте
/fmm mountс/fmm disguiseдля креативных схем передвижения. - Интеграция с EliteMobs: скрипты боссов могут маскировать игрока, инициировавшего событие, для временного эффекта трансформации.
Решение проблем
Ничего не происходит после /fmm disguise dragon.
ID модели должен в точности совпадать с загруженной моделью. Проверьте имя модели через /fmm admin или /fmm stats. Если у отправителя нет freeminecraftmodels.disguise.others, FMM намеренно возвращает общее сообщение «invalid entity ID», даже если модель существует — это нужно, чтобы не раскрывать неавторизованным игрокам список загруженных ID моделей.
Моя маскировка исчезла после /fmm reload.
Это ожидаемо. Все маскировки сносятся при перезагрузке. Слушайте FmmReloadedEvent, если нужно автоматически переприменять маскировки.
Bedrock-игроки не видят маскировку. См. Клиенты Bedrock выше.
Замаскированный игрок всё ещё виден другим. Невидимость применяется как эффект на уровне пакетов. Если другой плагин принудительно снимает невидимость каждый тик (так делают некоторые античиты), это может конфликтовать с переприменением FMM. Внесите FMM в whitelist или отключите конфликтующую проверку.