Skip to content

Repository files navigation

ServerReplayBukkit

English | 中文

Current status: Beta. Features may be unstable; use with caution in production.

Found an issue? Open an Issue (please use the latest plugin version and include your Paper / Purpur version, server logs, and reproduction steps).

This project is not affiliated with the ServerReplay mod; it is not an official port or fork and only aims for compatibility with its replay file formats.

Server-side replay recording plugin for Paper, generating replay files compatible with both Flashback Mod and Replay Mod. Supports Paper / Purpur and other Paper-based servers (Java 1.21.8). No ProtocolLib dependency.

Features

  • /replay start <player> start recording
  • /replay stop <player> stop and save .zip or .mcpr file
  • Auto-save when a player leaves
  • Native Paper command tree (Brigadier) with vanilla-style target selectors such as @p, @a, @s, @e[type=player]
  • Tested recording content: player actions, chunks, entities, scoreboards, time, chat, bossbar, tellraw, title, actionbar, subtitle

Comparison

Project Platform Output Extra dependencies Dual format Crash recovery
ServerReplayBukkit (this project) Paper / Purpur 1.21.8 .zip + .mcpr None Yes both Yes, repacks temp files on restart
ServerReplay Fabric mod .mcpr + .zip Fabric API + Kotlin Yes Yes
FlashbackServer Paper / Folia 1.21.5-1.21.11 .zip None No No
PaperRecorder Paper fork 1.20.1 .mcpr Core replacement No No
ISeeYou Leaves / Leaf 1.20/1.21 .mcpr Server-side ReplayAPI No No

Note: AdvancedReplay focuses on in-game replay and is not listed here because it does not produce .mcpr / .zip files for client-side playback.

Playback formats: .zip is the Flashback mod compatible format (open with the Flashback mod client); .mcpr is the Replay Mod compatible format (open with the Replay Mod client).

Usage

Build artifact: use plugin/build/libs/ServerReplayBukkit-<version>.jar. This is the only jar to distribute; the core/ and adapter-*/ module outputs are build intermediates and do not need to be distributed.

  1. Put the jar into the server plugins/ directory
  2. Start Paper 1.21.8; config.yml is generated automatically on first launch
  3. Run in-game:
/replay start <player> [flashback|mcpr|both]
/replay stop <player> [flashback|mcpr|both]
/replay status
/replay reload

Notes:

  • Without a format argument, start uses default-format from config.yml (default flashback, outputs .zip); stop stops all formats for that player
  • Player argument supports vanilla-style target selectors such as @p, @a, @s, @e[type=player]
  • config.yml configures the default recording format; run /replay reload after editing
  • config.yml has a language option (zh_CN / en_US) for command messages; run /replay reload after editing
  • Recordings are saved to plugins/ServerReplayBukkit/replays/; open .zip with Flashback mod (0.39.7+) and .mcpr with the Replay Mod client

Permissions

serverreplay.commands.replay, available to operators by default.

Compatibility

  • Version: Paper 1.21.8; Paper-based servers only, pure Bukkit / Spigot is not supported
  • More Minecraft versions are planned, newer versions have priority
  • Heavy NMS usage; cross-version compatibility is poor
  • Plugin coexistence status:
    • Grim (anticheat): being tested
    • ViaVersion: being tested
    • Matrix and other anticheats: planned
    • Other plugins not listed: untested
  • Hot reloading (e.g. PlugMan) is not supported; commands are registered through the Paper lifecycle API. Use /replay reload for config reloads; restart the server for a full reload.

Changelog

0.7.0

  • Added a language file system (lang/ directory and language config option, zh_CN / en_US); command messages can be switched or customized
  • Log messages now use server-relative paths instead of local absolute paths

Full history (Chinese only): CHANGELOG.md.

API

This plugin registers its API through the Bukkit ServicesManager, so other plugins can inspect recording state or inject custom packets:

  • RecordingApi: start, stop, isRecording, sessions
  • RecordingSession: per-session query and custom packet injection
RecordingApi api = Bukkit.getServicesManager().load(RecordingApi.class);

API status: experimental. The API may change at any time during the beta period; do not depend on it being stable before 1.0.0.

License & Credits

This project references the behavior and file formats of the following projects; the code is independently implemented and does not include their code or assets:

  • Flashback mod: referenced the .zip format (metadata.json + segmented binary action stream), replay action structure, and unsupported packet rejection rules; generated flashback files open directly in the Flashback client. Permission granted by the author Moulberry (Discord, 2026-08-04).
  • Replay mod / ReplayStudio: referenced the .mcpr format (recording.tmcpr frame structure, metaData.json, configuration phase switching and registry synchronization) and the replay-side handling of login, configuration, and chunk packets, for MCPR output compatibility.
  • ServerReplay mod: referenced the overall approach and configuration direction of Fabric server-side mcpr/flashback recording. It also inspired the plugin name; using the name ServerReplayBukkit was approved by the original author senseiwells (Discord, 2026-08-06).
  • FlashbackServer plugin: referenced the Paper server-side flashback recording architecture without ProtocolLib, including snapshot building, configuration phase synchronization, and chunk/entity snapshot handling.

By submitting a Pull Request, you agree to license your contribution under GNU AGPL-3.0.

This project is developed and maintained by me, licensed under GNU AGPL-3.0.

Copyright (C) 2026 noone89

About

Server-side Minecraft replay recorder for Paper/Purpur, generating Flashback (.zip) and ReplayMod (.mcpr) files.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages