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

FauxPlayers

Плагин для Paper и мод для Fabric-сервера, создающий на сервере записи фейковых игроков. Умеет транслировать игроков с другого сервера, имитировать реалистично колеблющийся пинг, вести ИИ-чаты и отыгрывать персонажей, совместим с TAB.

FabricPaper
Загрузчики
FabricPaper
Скачиваний на Modrinth
766
Подписчиков на Modrinth
2
версий
12
Обновлён
12 октября 202612 окт.
Опубликован
в 2026

Коротко о моде

Работает на Fabric и Paper
Для Minecraft 1.21–26.3
Ставится только на сервер; игрокам ставить не нужно
Последняя версия — 1.0.4 от 12 октября 2026
Лицензия GPL-3.0-only — бесплатно
Где нужен
В игрене нуженНа сервереобязателен

Ставится только на сервер; игрокам ставить не нужно

Версии игры1.21–26.3
Описание переведено автоматическиПоказать оригинал (EN)

FauxPlayers

FauxPlayers добавляет в Minecraft записи игроков, отображаемые только на клиенте. Поддерживается:

  • Paper 26.3 (один Paper JAR).
  • Fabric для Minecraft 26.2 и 26.3.
  • Ответы о статусе сервера.
  • Управление внутриигровым списком игроков.
  • Трансляция игроков с другого сервера или HTTP-источника.
  • Воспроизведение экспортированной истории чата Discord на сервере.
  • Имитация пинга, скинов, голов и очков TAB.
  • Разговоры и образы фейковых игроков на базе API, совместимого с OpenAI.
  • Смерти и убийства фейковых игроков (в том числе другими фейковыми игроками).

Важно

Фейковый игрок — это запись, отображаемая на клиенте. Это не подключённый игрок. FauxPlayers не создаёт:

  • соединение;
  • сущность;
  • событие входа или выхода;
  • отправителя команд;
  • Bukkit Player;
  • серверного игрока. В Paper Bukkit.getOnlinePlayers() содержит только реальных игроков. Фейковые записи не меняют права, события, слоты, лимиты или серверные API. Другие игроки видят фейковую запись как обычную запись игрока. Она может отображать имя, отображаемое имя, скин, голову, режим игры, полоски пинга и очко пинга TAB. Пинг имитируется.

Требования

Сборка:

  • Java 25.
  • Gradle Wrapper. Paper:
  • Paper 26.3: Java 25.
  • ProtocolLib для функций пакетов Paper. Fabric:
  • Minecraft 26.2 или 26.3.
  • Fabric Loader 0.19.3 или новее.
  • Fabric API 0.159.0+26.2 или новее для Minecraft 26.2.
  • Fabric API 0.160.5+26.3 или новее для Minecraft 26.3.
  • Java 25. Опционально:
  • TAB для интеграции с TAB на обеих платформах.

Статус сервера

FauxPlayers может изменять данные, отправляемые клиентам списка серверов. Он может изменять:

  • количество игроков онлайн;
  • максимальное количество;
  • имена в списке. Количество и список имён — отдельные значения. Вышестоящий сервер может сообщать о 30 игроках и предоставлять пять имён. FauxPlayers не создаёт недостающие имена. Данные STATUS не создают соединений. Это не меняет вместимость сервера для входа.

Внутриигровой список игроков

FauxPlayers отправляет пакеты информации об игроках реальным игрокам. Фейковые записи существуют только в клиенте получателя. Отображаемая задержка управляет полосками пинга. Она также управляет очком Ping: N в TAB. Случайный пинг может обновлять оба значения с настроенным интервалом. Чтобы отображать очко TAB, включите цель списка игроков TAB:

playerlist-objective:
  enabled: true
  value: '%ping%'
  fancy-value: '&7Ping: %ping%'

FauxPlayers отправляет очко TAB-PlayerList на Paper и Fabric. Он отправляет очко снова после перезагрузки цели TAB. Значение %online% в TAB включает реальных игроков и активные фейковые записи TAB. Это не меняет реальное количество игроков на сервере.

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

Сгенерированный файл содержит все поддерживаемые настройки. Это основные настройки:

enabled: true
status:
  enabled: true
  include-real-players: true
  include-static-fakes: true
  include-relayed-players: true
  include-replay: true
count:
  mode: COMBINED       # FIXED, ADDITIONAL, RANDOM, REMOTE, or COMBINED
  fixed: 20
tab:
  enabled: true
  include-static-fakes: true
  include-relayed-players: true
  include-replay: true
  default-latency: 50
  default-latency-range:
    minimum: 50
    maximum: 50
  default-gamemode: SURVIVAL
  outlier-ping:
    count: 2 # Random faux players assigned unusually high pings; 0 disables.
    minimum: 300
    maximum: 1500
  random-ping:
    enabled: true
    minimum: 20
    maximum: 100
    standard-deviation: 25
    refresh-seconds: 30
static-players:
  - name: Herobrine
    latency: 42
relay:
  enabled: false
  source: STATUS        # STATUS or HTTP
  status:
    host: 127.0.0.1
    port: -1             # SRV or port 25565
  http:
    url: http://127.0.0.1:8080/players
  refresh-seconds: 10
replay:
  enabled: false
  file: replay/chat.csv
  speed: 1.0
  loop: true
  maximum-gap-seconds: 30
  maximum-players: 100
  chat: true
  discord-chat: true
  deaths: true
  events: true
  announce-seeks: true
  skip-real-players: true
# OpenAI-compatible live persona chat. The API key is stored in this file.
personas:
  enabled: true
  mode: JOINED # JOINED waits for a real player; ALWAYS starts after server startup
  endpoint: https://api.deepseek.com/chat/completions
  api-key: "YOUR_DEEPSEEK_API_KEY"
  model: deepseek-v4-flash
  system-prompt-file: minecraft_chat_personas_system_prompt.md
  persona-data-file: minecraft_chat_personas.json
  interval-minimum-seconds: 30
  interval-maximum-seconds: 75
# Occasional text-only faux-player deaths, only when replay is disabled.
simulated-deaths:
  enabled: false

Чат образов и имитация смертей

Чат образов поддерживает один непрерывный разговор между активными фейковыми игроками, используя настроенную конечную точку chat-completions, совместимую с OpenAI. Сообщения реальных игроков добавляются как контекст. За каждый ход отправляется не более одной строки, а следующий ход ждёт случайный интервал из настроенного диапазона. Сгенерированные строки обычно пишутся строчными буквами, а пунктуация чаще всего убирается. personas.mode: JOINED приостанавливает чат, когда уходит последний реальный игрок, запускает его после входа игрока и очищает историю разговора, когда сервер пустеет. personas.mode: ALWAYS запускается после старта сервера и продолжается, даже когда реальных игроков онлайн нет. Прилагаемые Markdown-промпт и JSON-список копируются в папку конфигурации при первом использовании, и их можно там редактировать. В качестве говорящих могут генерироваться только активные фейковые имена из списка TAB; модель возвращает не более одного короткого сообщения за ход. Замените пример ключа DeepSeek на свой собственный ключ перед запуском сервера. simulated-deaths.enabled включает случайные текстовые объявления о смертях фейковых игроков, пока воспроизведение отключено. Это объявления в чате; фейковые игроки остаются записями для отображения и не становятся сущностями и не вызывают настоящих игровых смертей. Статические записи поддерживают name, display-name и latency. UUID статических и транслируемых записей стабильны.

Трансляции

Трансляция копирует список игроков откуда-то ещё и показывает его как фейковые записи. Это «откуда-то ещё» — то, что указано в relay.source.

  • relay.source: STATUS напрямую опрашивает вышестоящий Minecraft-сервер, поэтому он

использует тот же публичный ping в списке серверов. Укажите на него в relay.status.host.

  • relay.source: HTTP запрашивает JSON по вашему собственному URL, так что состав вы выбираете сами. Укажите его в relay.http.url. Оба варианта записывают один и тот же кэшированный состав, и оба отображаются как фейковые записи. Выбирайте HTTP, когда можете отдать полный список; выбирайте STATUS, когда у вас есть только другой сервер. Запросы релея выполняются в фоне. Они не блокируют поток сервера. Отключение релея прекращает показ его имён. Состав, полученный при последнем запросе, хранится в памяти, поэтому повторное включение использует его снова без нового запроса, но пока релей выключен, из него ничего не отображается. /fauxplayers status в этом состоянии сообщает 0 shown | 8 cached, а не подразумевает, что имена используются.

Релей STATUS

Установите relay.source в STATUS. Установите relay.status.host в адрес вышестоящего сервера. FauxPlayers отправляет запрос Minecraft STATUS. Он использует SRV-запись _minecraft._tcp, когда она доступна. В противном случае используется настроенный порт. Порт -1 использует порт 25565, когда SRV-записи нет. Выборки STATUS не являются полным составом. FauxPlayers не использует их для сообщений о входе и выходе, поэтому релей STATUS никогда не создаёт фейковых объявлений о входе или выходе. Это делает только источник HTTP.

Релей HTTP

Установите relay.source в HTTP. Установите relay.http.url в адрес JSON-эндпоинта. Рекомендуемый ответ:

{
  "online": 3,
  "max": 100,
  "players": [
    {"name": "Alice"},
    {"name": "Bob"},
    {"name": "Charlie"}
  ]
}

Список players рекомендуется. Плоское поле name также принимается. Используйте HTTP, когда эндпоинт предоставляет полный состав. Изменения состава могут создавать фейковые сообщения о входе и выходе. Имена, классифицированные как anonymous или Anonymous Player, игнорируются. FauxPlayers не разрешает и не отображает их. Если запрос не удался, keep-last-successful-result при включении сохраняет последний удачный состав.

Сообщения о входе и выходе

Установите messages.enabled в true, чтобы объявлять изменения состава HTTP. Paper и Fabric отслеживают настоящее сообщение о входе и выходе. Они переиспользуют его формат для сообщений релея. Это поддерживает пользовательские форматы сообщений. Отслеженный формат сохраняется в message-format.yml. FauxPlayers не создаёт события входа и выхода Bukkit для фейковых игроков.

Реальные игроки в приоритете

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

  • Вторая запись не создаётся, поэтому список игроков и TAB показывают одну запись, а не две.
  • Никакой воспроизведённый вход, выход или чат не отправляется под их именем, поэтому воспроизведение никогда не говорит за того, кто присутствует. Их собственная запись и их собственные слова всегда побеждают. Регистр не важен, поэтому воспроизведённый notch отбрасывается, пока Notch в сети. Это охватывает все источники фейковых записей: статические, релейные и воспроизведённые. Установите replay.skip-real-players в false, чтобы воспроизводить историю точно так, как она происходила, даже если она называет кого-то, кто в сети. Проверка выполняется каждые несколько тиков, поэтому игрок, вошедший, пока показывается фейковая запись с этим именем, забирает запись себе.

Отключение режима

Переключение режима в положение «выкл» сразу обновляет список игроков и объявляет уход игроков так же, как объявляется выход реального игрока. Эти две цели раздельны. Список игроков — это то, что реальные игроки видят в TAB. Выборка статуса — это то, что показывает список серверов до чьего-либо подключения. Настройка tab.* меняет только первое, настройка status.* меняет только второе, а переключение режима, такое как relay.enabled, меняет оба.

ПереключательСписок игроковВыборка статуса
enabled: falseочищеночищена
tab.enabled: falseочищенбез изменений
tab.include-static-fakes: falseстатические записи удаленыбез изменений
tab.include-relayed-players: falseрелейные записи удаленыбез изменений
tab.include-replay: falseвоспроизведённые записи удаленыбез изменений
relay.enabled: falseрелейные записи удаленырелейные записи удалены
replay.enabled: falseвоспроизведённые записи удаленывоспроизведённые записи удалены
status.enabled: falseбез измененийполностью не тронута
status.include-static-fakes: falseбез измененийстатические записи удалены
status.include-relayed-players: falseбез измененийрелейные записи удалены
status.include-replay: falseбез измененийвоспроизведённые записи удалены

status.enabled: false — единственная настройка, которая оставляет выборку нетронутой, а не очищает её, потому что тогда ответ статуса — собственный ответ сервера. Список игроков перестраивается каждые несколько тиков, поэтому изменение вступает в силу в течение мгновения после команды. Повторное включение режима объявляет игроков, которых он добавляет. Изменение, которое не трогает список, например правка replay.speed или добавление текстовой замены, не стоит никаких сообщений. Объявляется разница, которую создаёт само изменение конфигурации. Объявляются только записи, которые меняются из-за него, поэтому команда, не затрагивающая список игроков, остаётся безмолвной, даже пока состав релея или воспроизведение меняются под ней. При первой загрузке при старте сервера ничего не объявляется, потому что нет предыдущего списка для сравнения. Установите messages.enabled в false, чтобы удалять записи без каких-либо сообщений. Отключение релея сохраняет полученный состав в памяти, поэтому повторное включение использует его снова без нового запроса, но пока он выключен, из него ничего не отображается.

Команды

Используйте /fauxplayers. /fp и /fakeplayers — псевдонимы.

КомандаФункция
/fauxplayers statusПоказывает состояние реальных игроков, релея, воспроизведения, персон, симулированных смертей и диапазона ping. API-ключ всегда скрыт.
/fauxplayers listПеречисляет статические и кэшированные релейные имена.
/fauxplayers reloadПерезагружает конфигурацию.
/fauxplayers refreshЗапускает обновление релея.
`/fauxplayers add `Добавляет статическую запись.
`/fauxplayers remove `Удаляет статическую запись.

| `/fauxplayers ping | Задаёт статичный пинг. | |/fauxplayers outlierping | Случайно выбирает столько активных faux-игроков для высоких пингов;0отключает это. | |/fauxplayers outlierping set -| Задаёт ограниченный диапазон выбросов пинга с нормальным распределением (по умолчанию300-1500). | | /fauxplayers pingrange set -| Задаёт случайный диапазон пинга для обычных faux-игроков. | |/fauxplayers defaultping set -| Задаёт диапазон задержки по умолчанию для статичных записей без явной задержки. | |/fauxplayers personas status| Показывает статус персон, число запросов и последний результат или ошибку. | |/fauxplayers set personas.mode JOINED| Чат только пока настоящие игроки онлайн. ИспользуйтеALWAYS, чтобы работать с запуска сервера. | | /fauxplayers say | Отправляет фейковый текст в чат. | |/fauxplayers get | Показывает настройку. | |/fauxplayers set | Изменяет настройку. | |/fauxplayers relay| Показывает состояние релея. | |/fauxplayers relay enable| Включает релей. | |/fauxplayers relay disable| Отключает релей. | |/fauxplayers replay| Показывает состояние воспроизведения и список подкоманд. | |/fauxplayers replay enable| Включает воспроизведение. | |/fauxplayers replay disable| Отключает воспроизведение. | |/fauxplayers replay restart| Перечитывает файл и начинает заново. | |/fauxplayers replay seek | Переходит к строке. | |/fauxplayers replay skip | Перемещается по строкам, отрицательное значение идёт назад. | |/fauxplayers replay replace =| Добавляет замену текста. | |/fauxplayers replay unreplace | Удаляет замену текста. | |/fauxplayers replay replacements| Выводит список замен текста. | |/fauxplayers replay speed | Задаёт скорость таймлайна. | |/fauxplayers replay loop <true|false>| Задаёт режим повтора. | |/fauxplayers replay file | Задаёт путь к CSV. | Обе платформы поддерживают автодополнение команд. Paper требуетfauxplayers.admin`. Fabric требует уровень прав оператора сервера.

Не-операторы не могут обнаружить FauxPlayers

Для не-оператора команд FauxPlayers не существует:

  • Корни и алиасы отсутствуют в пакете дерева команд.
  • Ответы автодополнения никогда их не содержат, даже когда клиент отправляет сырые запросы подсказок вроде /f, /fa или /fp. Paper вырезает их из пакета подсказок с помощью ProtocolLib; Fabric фильтрует их на диспетчере команд до построения любого ответа.
  • Их выполнение сообщает о неизвестной команде, а автодополнение ничего не возвращает.
  • Операторов это не затрагивает. На Paper фильтр пакета подсказок требует ProtocolLib. Удаление дерева команд и защита выполнения работают и без него.

Replay

Replay читает экспорт чата Discord и воспроизводит его на сервере в исходном порядке. По достижении конца он начинается заново, если replay.loop не false. Файл — это экспорт канала Discord со столбцами AuthorID, Author, Date, Content, Attachments и Reactions. Используются только Author, Date и Content. replay.file указывается относительно папки данных плагина, если не является абсолютным.

  • Paper: plugins/FauxPlayers/replay/chat.csv.
  • Fabric: config/fauxplayers/replay/chat.csv. Позиция сохраняется по мере продвижения воспроизведения, поэтому перезапуск сервера продолжается с того места, где оно остановилось, а не с первой строки. Сохранённая позиция лежит рядом с файлом, как chat.csv.position, поэтому смена replay.file начинает новый файл с начала. /fauxplayers replay restart начинает заново с первой строки и очищает сохранённую позицию. Выключение воспроизведения сохраняет позицию, поэтому повторное включение возобновляет его.

Что воспроизводится

X joined the game добавляет фейковую запись X и транслирует сообщение о входе. X left the game удаляет запись и транслирует сообщение о выходе. Оба также распознаются в форме X has joined the server. Сообщение о смерти читается из того, что в нём сказано, а не из того, кто его отправил, потому что его может нести любой из аккаунтов. X was slain by Y using [Z], X fell from a high place и X drowned воспроизводятся как сообщения о смерти, кому бы их ни приписывал экспорт. Жертва должна быть именем, которое заходило на сервер, поэтому X сверяется с этим списком. Чат, который лишь упоминает смерть, вроде i blew up the front или brodie fell for the ragebait, остаётся чатом, потому что первое слово — не игрок. Выключение сервера, перезапуск, статус, вывод консоли и ошибки прав полностью отбрасываются. Воспроизводимые игроки — обычные faux-записи. FauxPlayers определяет UUID Mojang, регистр имени и скин по имени, поэтому их голова и иконка настоящие. Они никогда не являются игроками сервера. Запросы голов продолжают повторяться. Имя, которое не удалось, запрашивается снова, пока не определится, и голова пересобирается, как только приходит настоящий скин.

Два источника чата

Канал содержит и внутриигровой чат, и чат Discord, и экспорт разделяет их по тому, какой аккаунт отправил строку, а не по имени в тексте. Существуют два аккаунта:

  • Серверный бот публикует входы, выходы, смерти, вывод сервера и внутриигровой чат, записанный как Player: message.
  • Аккаунт релея публикует внутриигровой чат под собственным именем игрока. Со временем эти серверы перешли от первого стиля ко второму, поэтому экспорт обычно содержит оба. Пользователь Discord публикует под своим аккаунтом, под своим Discord-ником. Этот ник часто является версией внутриигрового имени игрока в нижнем регистре, поэтому по одному имени это решить нельзя. FauxPlayers читает аккаунт из столбца AuthorID:
  • Бот — это аккаунт, который публикует строки входа под именем, не являющимся игроком. Релей тоже публикует строки входа, но публикует их под собственным именем входящего игрока, поэтому их не путают с ботом.
  • Релей — это аккаунт, который публикует под множеством разных имён, и эти имена принадлежат людям, заходившим на сервер. Аккаунт Discord всегда публикует только под одним именем, поэтому он никогда не подходит.

  • Пересланная строка считается игровым чатом, если её имя — это имя игрока, а так оно и есть по построению, поскольку релей пишет под именем самого игрока. Имя не обязано встречаться в строке входа, поэтому фрагмент экспорта, начинающийся после чьего-то входа, всё равно правильно приписывает его чат. Всё остальное — чат Discord.

Сообщения без авторства

Серверный бот — это собственный аккаунт сервера, поэтому он никогда не пишет от своего имени. Он несёт только вход, выход, смерть, вывод сервера или игровой чат, записанный как Player: message. Строка бота, в которой нет игрока, — это пересланное сообщение без авторства, где имя потерялось по пути. FauxPlayers игнорирует такие вместо показа, и именно это не даёт серверу выглядеть так, будто он сам говорит что-то вроде nothing. Строка игрового чата распознаётся по форме Player: message, и игрок не обязан быть тем, чей вход записан в экспорте. Так FieryGrowth: wsp воспроизводится как чат от FieryGrowth даже в файле, где он ни разу не входит. Имя, записанное с ведущей точкой, как делают некоторые серверы, обрезается. То же касается релея, который пишет под именем самого игрока, поэтому его строки приписываются по этому имени. Строка, чьё имя вообще не может быть именем игрока, например заключённое в скобки, остаётся выводом сервера. Игровой чат отображается как ` message, а чат Discord — как [Discord] message. Пользователи Discord не находятся в игре, поэтому они никогда не становятся записями игроков и никогда не получают голову игрока. Только строки входа и выхода создают воспроизводимых игроков, и они называют игровые аккаунты. Установите replay.discord-chatвfalse, чтобы исключить переписку Discord и воспроизводить только то, что происходило на сервере. Установите replay.chatвfalse, чтобы вместо этого отбросить игровой чат. Запустите /fauxplayers replay`, чтобы увидеть, какие аккаунты были обнаружены.

Перемотка

/fauxplayers replay показывает позицию как Lines: 2/547884, где число считает уже пройденные строки. Перемотка использует ту же нумерацию:

  • /fauxplayers replay seek 30000 переходит к этой строке.
  • /fauxplayers replay skip 5000 перемещает вперёд на пять тысяч строк.
  • /fauxplayers replay skip -5000 перемещает назад на пять тысяч строк. Перемотка заново строит список игроков по входам и выходам до этой строки вместо их воспроизведения, поэтому состав, число игроков и список TAB сразу верны для этого момента. Затем переход объявляется как обычное изменение состава: игроки, которые были в игре на старой строке и отсутствуют на новой, выходят, а игроки, которые есть только на новой строке, входят. Поэтому скачок читается так же, как любое другое изменение списка игроков, а не мерцает списком без объяснения. Игрок, чья строка входа стоит до точки перемотки, уже в списке и не входит снова, а его следующая строка выхода всё равно удаляет его. Чат никогда не расходится со списком игроков: каждый, кто говорит после перемотки, уже есть в составе. Установите replay.announce-seeks в false для беззвучного перехода, который сохраняет состав верным без сообщений.

Замена текста

Строки можно переписывать по мере воспроизведения, что полезно для вычистки фразы, оскорбления, ссылки или имени, прежде чем кто-либо их увидит. Эту же функцию иногда называют фильтрацией. Запустите /fauxplayers replay, чтобы увидеть полный список подкоманд, который строится из того же списка, что управляет автодополнением:

Use /fauxplayers replay <enable|disable|file|speed|loop|restart|seek|skip|chat
|discord-chat|deaths|events|maximum-gap-seconds|maximum-players|replace|unreplace
|replacements> ...
replay:
  replacements:
    - from: "annoying phrase"
      to: "replacement"
    - from: "discord.gg/abcdef"
      to: ""

Каждый from сопоставляется как буквальный текст с учётом регистра, и каждое вхождение заменяется. Пустой to удаляет совпадение. Правила применяются ко всей строке до её воспроизведения — к игровому чату, чату Discord, сообщениям о смерти и прочему выводу сервера одинаково. Сопоставление происходит после классификации строки, поэтому перезапись никогда не превратит вход в сообщение чата и не скроет смерть. В игре:

  • `/fauxplayers replay replace =добавляет одно. Первый=` разделяет, поэтому пробелы работают с обеих сторон.
  • `/fauxplayers replay unreplace ` удаляет одно.
  • /fauxplayers replay replacements выводит их списком. Запустите /fauxplayers replay restart после изменения, чтобы загруженные строки перестроились.

Чтение статуса

/fauxplayers replay сообщает достаточно, чтобы отличить ожидающее воспроизведение от зависшего:

Replay » enabled=true | file=legacy.csv | speed=1.0 | loop=true
Lines: 28/547884 | players: 3 | finished: false
Clock: 2h 14m of 373d 4h 0m | next line in 12s | ticks driven: 8420
  • Lines считает уже воспроизведённые строки из строк в файле. Начинается с 0, и первая строка отправляется на первом тике после включения.
  • Clock — это как далеко в исходную временную шкалу дошло воспроизведение из всей шкалы.
  • next line in — это ожидание до следующей строки. Большое число означает, что воспроизведение проигрывает тихий отрезок, а не проблему. Используйте skip, чтобы пройти его.
  • ticks driven считает, сколько раз игровой цикл управлял воспроизведением. Оно должно продолжать расти. Число, которое никогда не меняется, означает, что цикл не работает, и об этом стоит сообщить, потому что ожидающее воспроизведение всё равно считает тики.

Скорость и промежутки

По умолчанию воспроизведение идёт в реальном времени. replay.speed сжимает часы: 10 воспроизводит десять секунд истории за реальную секунду. Долгий тихий период может заставить воспроизведение ждать очень долго. По умолчанию replay.maximum-gap-seconds равен 0, что отключает ограничение и точно сохраняет метки времени CSV. Установите положительное число, чтобы ограничить ожидание перед любой одной строкой; например, 30 превращает двухдневный простой в тридцатисекундную паузу. Ограниченные ожидания складываются, поэтому ограничение стоит всего одну паузу за тихий период. Строки, которые были в секунде друг от друга, всё равно воспроизводятся с секундной разницей, даже сразу после

с ограничением простоя. Низкое значение сжимает долгие ожидания, а высокое сохраняет больше тишины. Это также влияет на тихие и пустые промежутки: ожидание перед строкой, пока никого нет онлайн, ограничивается так же. При 1.0 с отключённым ограничением промежутков время воспроизведения совпадает с таймлайном CSV. Пример экспорта охватывает 373 дня; при 100 это занимает около 3.7 дней, а при 1000 — около 9 часов. Воспроизведение выдаёт не более 200 строк за тик, примерно 4000 в секунду, поэтому очень высокая скорость устанавливается на этом значении вместо того, чтобы идти быстрее.

Оговорки о порядке

  • replay.chat воспроизводит внутриигровой чат, replay.discord-chat воспроизводит чат Discord, replay.deaths воспроизводит сообщения о смерти, а replay.events воспроизводит остальной вывод сервера. Отключите один, чтобы канал был потише.
  • replay.maximum-players ограничивает, сколько воспроизводимых игроков может быть перечислено одновременно. Игроки сверх лимита всё ещё пишут в чат, но не получают запись в списке игроков.
  • Экспорт разбирается один раз при запуске. Измените replay.chat, replay.discord-chat, replay.deaths, replay.events или replay.maximum-gap-seconds, а затем выполните /fauxplayers replay restart.
  • Строка ретрансляции с меткой Server, означающая, что сервер говорит о себе, воспроизводится как чат от Server. Эта метка — то, как её называет экспорт, и это не настоящий аккаунт.
  • Некоторые серверы пересылают свой чат в Discord, а затем забирают его обратно. Эхо — это вторая строка с теми же словами, поэтому она воспроизводится дважды. То же происходит со смертью, которую несут оба аккаунта.
  • Воспроизведение, охватывающее людей, которые сейчас на сервере, оставляет их строки за кадром. См. раздел о реальных игроках выше. Ник в Discord и внутриигровое имя могут различаться. Воспроизведение сохраняет каждую строку под именем, которое использовал для неё экспорт.

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

Фальшивые имена не появляются

Проверьте status.enabled и tab.enabled. Проверьте связанные настройки include-*. Проверьте лог сервера на ошибки пакетов или TAB.

TAB показывает одного игрока онлайн

Проверьте, что TAB установлен и включён. Проверьте, что tab.enabled имеет значение true. Реальное число игроков онлайн на сервере остаётся неизменным.

Оценка Ping: N не появляется

Включите objective списка игроков в TAB. Установите пересобранный JAR. Перезапустите сервер.

Данные ретрансляции устарели

Выполните /fauxplayers status. Проверьте возраст кэша и последнюю ошибку. Выполните /fauxplayers refresh. Проверьте хост, порт, URL, тайм-аут и источник ретрансляции.

Воспроизведение включено, но ничего не происходит

Выполните /fauxplayers replay и прочитайте цифры.

  • Loaded: (none) означает, что файл ещё не прочитан или путь неверен. Большой экспорт разбирается несколько секунд перед воспроизведением первой строки.
  • next line in с отсчётом до большого числа означает, что воспроизведение проигрывает тихий промежуток истории. Это файл, которому точно следуют. Используйте `/fauxplayers replay skip , чтобы пропустить его, или уменьшите replay.maximum-gap-seconds`.
  • ticks driven застыло означает, что игровой цикл не управляет воспроизведением. В логе сервера будет предупреждение с указанием причины, потому что сбой в цикле сообщается, а не молча останавливает его.

Воспроизведение не запускается

Выполните /fauxplayers replay. Проверьте replay.enabled и разрешённый путь file. Проверьте последнюю строку ошибки и лог сервера. Выполните /fauxplayers replay restart после изменения файла или текстовых замен, которые также называются фильтрами. Первая загрузка разбирает весь файл в фоне. Большой экспорт занимает несколько секунд перед воспроизведением первой строки.

У воспроизводимого игрока голова по умолчанию

Голова настоящая только тогда, когда имя разрешается в аккаунт Mojang. FauxPlayers продолжает спрашивать: имя, которое не удалось, повторяется каждые двадцать секунд, а уже отправленная голова перестраивается, как только приходит настоящий скин, так что ничего не остаётся неверным до конца сессии. Запросы к Mojang выполняются через собственный HTTP-клиент плагина с щедрым тайм-аутом. Медленный ответ никогда не считается «нет такого аккаунта»; только ответ 404 или 204 считается, и даже тогда имя повторяется, просто реже. Три вещи могут помешать голове стать настоящей.

  • Аккаунт был переименован или удалён с момента написания экспорта. Mojang разрешает только текущие имена, поэтому имя из старого лога может ответить 404 без возможности восстановить скин. Такие всё равно повторяются, но только каждые десять минут, потому что более частые запросы не помогут. Это навсегда для этого имени.
  • Запросы были ограничены. Mojang отвечает на всплеск запросов имён HTTP 429. FauxPlayers распределяет свои запросы по времени и никогда не запоминает неудачу, поэтому имя с ограничением повторяется, и голова заполняется вскоре после этого.
  • Mojang был медленным или недоступным. Запрос повторяется, и голова перестраивается, когда он succeeds. Предупреждение в логе называет причину при первом возникновении.

Лицензия

FauxPlayers выпускается под лицензией GNU General Public License, версия 3.

Частые вопросы

Как установить FauxPlayers?

Установите Fabric под свою версию Minecraft, скачайте FauxPlayers под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть FauxPlayers?

У FauxPlayers есть сборки для Minecraft 1.21–26.3.

Нужен ли FauxPlayers на сервере?

Ставится только на сервер; игрокам ставить не нужно

Лицензия и источник
GNU General Public License v3.0 onlyможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее