
ServerReplay
ServerReplay - это полностью серверный мод для Minecraft Fabric, который позволяет записывать реплеи в формате Replay Mod или Flashback. Записывайте действия игроков и целые области чанков без установки клиентских модов.
ServerReplay - мод для Майнкрафт, который решает проблему записи игрового процесса на сервере. В отличие от клиентского Replay Mod, который требуется устанавливать каждому игроку, ServerReplay работает на стороне сервера и может записывать сразу нескольких игроков или статичные области чанков. Это особенно удобно для создания трейлеров, обзоров, замедленной съёмки и автоматического архивирования событий.
Почему именно серверная запись?
Запись на стороне сервера даёт ряд преимуществ по сравнению с клиентскими решениями:
- Запись статичных чанков. Можно указать точный размер области (не ограничен дистанцией просмотра). Записанные чанки могут быть выгружены без влияния на реплей - нет мерцания чанков и лишней нагрузки на сервер. Можно приостанавливать и возобновлять запись в зависимости от загрузки чанков или присутствия игроков.
- Запись отдельных игроков. Игрокам не нужно устанавливать Replay Mod или Flashback. Вы можете записывать все точки обзора одновременно. Работу записей можно автоматизировать через конфигурацию.
- Гибкий доступ. Запись могут запускать операторы (или игроки с правом
server-replay.commands.replay) в любой момент.
Есть и ограничения:
- В записях чанков могут отсутствовать некоторые элементы (например, кастомные босс-бары).
- Запись от лица игрока может быть не на 100% идентична записи клиентского Replay Mod или Flashback.
- Мод не рассчитан на сильно моддинговые сервера - сложные моды со своими пакетами могут быть несовместимы.
Как это работает
Для работы нужен Fabric Loader, Fabric API и Fabric Kotlin. Мод умеет записывать в двух режимах:
- По игрокам - запись привязана к конкретному игроку и ведётся в пределах серверной дистанции просмотра.
- По чанкам - запись статичной области, которая не зависит от того, находится ли там кто-то.
Быстрый старт
Запись игроков
Начните запись командой:
/replay start players <ник(и)>
Примеры:
/replay start players senseiwells
/replay start players @a
/replay start players @a[gamemode=survival]
Запись автоматически остановится, если игрок вышел или сервер выключился. Можно остановить вручную:
/replay stop players <ник(и)> <сохранить?>
/replay stop players senseiwells false
Файлы сохраняются в папку, указанную в player_recording_path (по умолчанию ./recordings/players/<uuid>/<дата-время>.mcpr). Готовый файл можно положить в ./replay_recordings на клиенте и открыть через Replay Mod.
Важно: попытка записать carpet-ботов или других не-игроков может привести к неожиданному поведению. Для больших областей лучше использовать запись чанков.
Запись чанков
Примечание: Minecraft-клиент не рендерит самые внешние чанки. Чтобы записать видимую область, добавьте один чанк по краям. Например, для области от -5,-5 до 5,5 записывайте от -6,-6 до 6,6.
Команда для запуска:
/replay start chunks from <FromX> <FromZ> to <ToX> <ToZ> in <измерение?> named <название?>
Примеры:
/replay start chunks from -5 -5 to 5 5 in minecraft:overworld named MyChunkRecording
/replay start chunks from 54 67 to 109 124
/replay start chunks from 30 30 to 60 60 in minecraft:the_nether
Удобно задавать радиус вокруг чанка:
/replay start chunks around <chunkX> <chunkZ> radius <радиус> in <измерение?> named <название?>
/replay start chunks around 0 0 radius 5
Запись чанков статична - она не перемещается. При старте указанные чанки загружаются (и генерируются, если нужно), но затем мод не держит их загруженными. Можно дополнительно настроить параметр chunk_recorder_load_radius, чтобы ограничить начальную загрузку - все чанки за его пределами будут записываться только при их естественной загрузке.
Остановка записи чанков - по имени:
/replay stop chunks named "Perimeter Recorder" false
/replay stop chunks named MyChunkRecording
Файлы сохраняются в chunk_recording_path (по умолчанию ./recordings/chunks/<название>/<дата-время>.mcpr).
Выбор формата записи
ServerReplay поддерживает два формата: Replay Mod и Flashback. По умолчанию используется Replay Mod, но можно переключить командой:
/replay encoding default set flashback
/replay encoding default set replay_mod
Можно запустить две записи одного игрока параллельно - одну в формате Flashback, другую в Replay Mod. Для чанков каждому рекордеру нужно дать уникальное имя.
Просмотр реплеев на сервере
После завершения записи можно просмотреть реплей прямо на сервере - игрок будет временно удалён из основного мира (считается офлайн). Сервер запускает параллельный процесс, который отправляет клиенту пакеты. Влияния на производительность почти нет.
Нажмите на зелёный текст в чате после завершения записи, чтобы сразу открыть реплей. Либо используйте команды:
/replay view players <uuid> <дата-время>
/replay view chunks <название> <дата-время>
Пример:
/replay view player "d4fca8c4-e083-4300-9a73-bf438847861c" "2024-05-11--19-19-55"
/replay view chunks "Chunks (183, 166) to (203, 186)" "2024-05-11--19-19-55"
При просмотре доступны команды:
/replay view pause- пауза/replay view unpause- продолжить/replay view speed <множитель>- скорость/replay view restart- перезапустить/replay view close- закрыть и вернуться на сервер/replay view progress <hide|show>- показать/скрыть прогресс-бар
Если игрок отключится во время просмотра, при повторном входе он вернётся обратно на сервер.
Скачивание реплеев
Если в конфиге включено allow_downloading_replays и настроен IP скачивания, можно получить URL для загрузки файла:
/replay download players <uuid> "дата-время"
/replay download chunks "название" "дата-время"
Появится ссылка в чате - кликните по ней, чтобы скачать.
Команды
Для использования команд нужно быть оператором уровня 4 или иметь право server-replay.commands.replay (если используется мод прав, например LuckPerms).
/replay start players <игроки>- начать запись для указанных игроков./replay start chunks from <X1> <Z1> to <X2> <Z2> in <измерение?> named <название?>- начать запись области чанков./replay start chunks around <X> <Z> radius <радиус> in <измерение?> named <название?>- запись области вокруг чанка./replay stop players <игроки> <сохранить?>- остановить запись игроков (по умолчанию сохраняет)./replay stop chunks from <X1> <Z1> to <X2> <Z2> in <измерение?> <сохранить?>- остановить запись области./replay stop chunks named <название> <сохранить?>- остановить запись по имени./replay stop [chunks|players] all <сохранить?>- остановить все записи чанков/игроков./replay status- статус: какие записи активны, их продолжительность и размер./replay reload- перезагрузить конфигурацию./replay encoding default set <тип>- установить формат (flashbackилиreplay_mod).
Настройка конфига
Файл конфигурации: ./config/server-replay/config.json. По умолчанию он выглядит так:
{
"default_encoding": "replay_mod",
"world_name": "World",
"server_name": "Server",
"chunk_recording_path": "./recordings/chunks",
"player_recording_path": "./recordings/players",
"player_recording_name": "{uuid}",
"max_file_size": "0 B",
"restart_after_max_file_size": false,
"max_duration": "0s",
"restart_after_max_duration": false,
"recover_unsaved_replays": true,
"delete_replays_after_duration": "0s",
"log_deleted_replays": true,
"chunk_recorder_load_radius": -1,
"chunk_recording_strategy": "always",
"pause_notify_players": true,
"notify_admins_of_status": true,
"include_resource_packs": true,
"ignore_custom_payloads": false,
"ignore_sound_packets": false,
"ignore_light_packets": true,
"ignore_chat_packets": false,
"ignore_action_bar_packets": false,
"ignore_scoreboard_packets": false,
"optimize_explosion_packets": true,
"optimize_entity_packets": false,
"record_hotbar": false,
"record_voice_chat": false,
"replay_server_ip": null,
"allow_downloading_replays": false,
"automatically_record": false,
"player_predicate": {
"type": "none"
},
"chunks": []
}
| Параметр | Описание |
|---|---|
default_encoding | Формат записи: replay_mod или flashback. По умолчанию replay_mod. |
world_name | Имя мира, которое отобразится в файле реплея. |
server_name | Имя сервера в файле реплея. |
player_recording_path | Путь для сохранения записей игроков. |
chunk_recording_path | Путь для сохранения записей чанков. |
player_recording_name | Шаблон имени папки для каждого игрока. По умолчанию {uuid}. Можно использовать {username}. Пример: "Recordings for: {username} ({uuid})". |
max_file_size | Максимальный размер файла реплея. При достижении запись останавливается. Указывается в байтах с единицами (например, "100 MB"). "0 B" - без ограничений. |
restart_after_max_file_size | Если true и достигнут max_file_size, запись автоматически перезапускается в новый файл. |
max_duration | Максимальная длительность записи (формат: "4h 35m 2.1s"). "0s" - без ограничения. |
restart_after_max_duration | Если true и достигнут max_duration, запись перезапускается. |
recover_unsaved_replays | Попытка восстановить незавершённые записи после аварийной остановки сервера. |
delete_replays_after_duration | Автоматическое удаление старых файлов (от последней модификации). Формат длительности, например "5d 10h". "0s" - отключено. |
log_deleted_replays | Логирование удалённых записей в консоль. |
fixed_daylight_cycle | Фиксированное время суток в реплее (в тиках). Например, 6000 - полдень. -1 - отключено. |
chunk_recorder_load_radius | Начальный радиус загрузки чанков при записи области. Частичная загрузка больших территорий. -1 - загружать все. |
chunk_recording_strategy | Стратегия записи чанков: always (постоянно), chunk_loaded (только когда чанки загружены, автоматическая пауза), chunk_contains_player (только если есть игрок в области - Flashback), chunk_contains_non_spectator_player (только не-зрители - Flashback). |
pause_notify_players | Уведомлять игроков о приостановке/возобновлении записи. |
notify_admins_of_status | Уведомлять администраторов о старте, окончании и ошибках записи. |
include_resource_packs | Копировать серверные ресурспаки в файл реплея (только Replay Mod). Отключение уменьшает размер, но может вызвать проблемы при воспроизведении. |
ignore_custom_payloads | Игнорировать модовые пакеты - полезно при конфликтах с другими модами. |
ignore_sound_packets | Игнорировать звуковые пакеты. |
ignore_light_packets | Игнорировать пакеты освещения (по умолчанию true). |
ignore_chat_packets | Игнорировать чат. |
ignore_action_bar_packets | Игнорировать action bar. |
ignore_scoreboard_packets | Игнорировать скорборды. |
optimize_explosion_packets | Оптимизировать пакеты взрывов (по умолчанию true). |
optimize_entity_packets | Оптимизировать пакеты сущностей (false). |
record_hotbar | Записывать содержимое хотбара (false). |
record_voice_chat | Записывать голосовой чат (например, от Simple Voice Chat, false). |
replay_server_ip | IP для скачивания реплеев. |
allow_downloading_replays | Разрешить скачивание реплеев через команду. |
automatically_record | Включить автоматическую запись по правилам из player_predicate и chunks. |
player_predicate | Условие для автоматической записи игроков. Тип none - никто. |
chunks | Список предопределённых записей чанков для автоматического запуска. |
Мод ServerReplay - мощный инструмент для админов, которым нужна качественная запись событий на сервере без нагрузки на клиентов. Скачайте мод для Fabric и настройте его под свои задачи - будь то трейлеры, летсплеи или мониторинг.
