BetterReplay
1.5.1Packet Based Player Recorder. BetterReplay is a server-side replay plugin for Paper and Folia-style scheduling. It records player and nearby entity activity on the server, saves the timeline, and repl
1.5.1latestlast week [1.5.1]
Fix Folia compatibilitySecurity
- 2026-08-29: Replay loading now bounds file, MySQL, ZIP, LZ4, Zstd, GZIP, timeline-index, and chunk-payload allocations; validates declared sizes and codec metadata; and rejects malformed archive structures before they can exhaust server memory - 2026-08-30: Replaced the archivedorg.lz4:lz4-javadependency with the maintainedat.yawk.lz4:lz4-javafork while preserving legacy LZ4 replay decoding (#97)1.5.0Aug 26, 2026 [1.5.0]
Added
- 2026-08-24: Configurable MiniMessage-based replay messages and persistent control-item metadata, plus replay viewer PDC state controls for safer inventory interactions - 2026-08-24: Replay playback effects for ender pearls, splash potions, arrows, tridents, combat damage, health changes, hurt sounds, and critical hits - 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-08-24: Updated PacketEvents to2.13.0and restored replay player skin metadata dispatch - 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failu1.5.0-alpha.19Aug 26, 2026 [Unreleased]
Added
- 2026-08-24: Configurable MiniMessage-based replay messages and persistent control-item metadata, plus replay viewer PDC state controls for safer inventory interactions - 2026-08-24: Replay playback effects for ender pearls, splash potions, arrows, tridents, combat damage, health changes, hurt sounds, and critical hits - 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-08-24: Updated PacketEvents to2.13.0and restored replay player skin metadata dispatch - 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff1.5.0-alpha.18Aug 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.17Aug 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.16Jul 29, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.15Jun 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.14Jun 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.13Jun 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.12Jun 24, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/- 2026-06-23: New binary.brarchives now compress timeline payloads and chunk payloads with Zstd level 1, declarepayloadCompression: "zstd", bump the binary replay compatibility floor to1.5.0-alpha.12, and keep LZ4 replay/chunk archives readable through metadata or frame-magic compatibility fallbackRemoved
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk1.5.0-alpha.11Jun 23, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk retrieval failures when chunk recording is enabled - 2026-06-16: Chunk recording and chunk replay now move tracked-player chunk discovery, replay chunk refresh, legacy live block comparisons, and viewer packet sends onto the proper Folia entity or region scheduler - 2026-06-16: Recording session entity/playe1.5.0-alpha.10Jun 17, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk retrieval failures when chunk recording is enabled - 2026-06-16: Chunk recording and chunk replay now move tracked-player chunk discovery, replay chunk refresh, legacy live block comparisons, and viewer packet sends onto the proper Folia entity or region scheduler - 2026-06-16: Recording session entity/playe1.5.0-alpha.9Jun 16, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures - 2026-06-16: Recording chunk baseline capture now schedules live chunk reads on the owning Folia region to avoid async chunk retrieval failures when chunk recording is enabled - 2026-06-16: Chunk recording and chunk replay now move tracked-player chunk discovery, replay chunk refresh, legacy live block comparisons, and viewer packet sends onto the proper Folia entity or region scheduler1.5.0-alpha.8Jun 14, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond - 2026-06-14: Replay stop cleanup now schedules live block and chunk restore reads on their owning Folia region to avoid asynchronous world access failures1.5.0-alpha.7Jun 14, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabled - 2026-06-12: Velocity replay handoff support via/replay play <name> server:<backend>, including remote replay launch and return-to-origin flow after playback stops - 2026-06-14: Config keyVelocity.Default-Replay-Serverto route/replay play <name>to a default Velocity replay backend when noserver:<backend>argument is suppliedChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings - 2026-06-14: Velocity replay handoff failures now send a clear chat error when the transfer request cannot be sent, the proxy reports a failure, or the proxy does not respond1.5.0-alpha.6Jun 12, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabledChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots - 2026-06-12: Saved replay listings and replay-name tab completion now share a 5-second cache that refreshes from storage when stale, and MySQL replay overwrites now updatecreated_atso recent listings reflect replaced recordings1.5.0-alpha.5Jun 12, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabledChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings - 2026-06-12: Legacy JSON replays whose inventory snapshots upgrade into split equipment/storage events now recreate recorded players correctly after replay seek/skip state reconstruction - 2026-06-12: Legacy JSON replay loading now acceptsnullinventory content slots from olderinventory_updatesnapshots1.5.0-alpha.4Jun 8, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabledChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports - 2026-06-08: Fixed all compiler warnings. Maven build and test runs no longer emit unused annotation-processing or Mockito self-attach agent warnings1.5.0-alpha.3Jun 6, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabledChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering - 2026-06-06: Recorded-player menu teleports now use FoliaLib asynchronous teleports instead of direct player teleports1.5.0-alpha.2Jun 5, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playback - 2026-06-04: Expanded bStats telemetry with SimplePie charts for storage type, recording chunk capture, playback viewer safety and chunk playback settings, vanish-viewer, and retention state plus retention age normalization to days when cleanup is disabledChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering1.5.0-alpha.1Jun 5, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playbackChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility - 2026-06-04: Dev alpha publishing now derives the next-alpha.Nversion from existing Modrinth releases for the current base version instead ofGITHUB_RUN_NUMBER, so prereleases track the next unreleased line (now1.5.0-alpha.N) and workflow renames cannot reset alpha numbering1.4.0-alpha.69Jun 4, 2026 [Unreleased]
Added
- 2026-04-17: Frame-by-frame step controls during paused replay; step backward or forward one tick group at a time via⏮and⏭inventory buttons - 2026-04-19: Variable playback speed controls during active replay, current speed action-bar feedback, and config keysPlayback.Speed-StepplusPlayback.Max-Speed- 2026-04-27: Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, and temporary legacy JSON compatibility during migration - 2026-04-27: Hidden admin utilities:/replay export,/replay debug dump,/replay debug info, and/replay benchmark, with output written under the plugin data folder - 2026-04-29: Replay protection commands and metadata, protected replay highlighting in/replay list, config-driven retention cleanup with human-readable duration parsing, and deletion safeguards for protected replays - 2026-05-14: Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- 2026-05-30: Inventory recording split into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - 2026-05-31: Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- 2026-06-02:/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, on future checks, or after restart - 2026-06-02: New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playbackChanged
- 2026-04-11:RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility - 2026-04-19: Update checks now treat-SNAPSHOTbuilds as their corresponding release version - 2026-04-20: Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - 2026-04-22: Replay sessions now always start at1.0xspeed, andPlayback.Max-Speedis enforced to a minimum of1.0- 2026-04-27: Binary replay archives now use format version2; new.brinventory payloads store split equipment and storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported - 2026-04-29:ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- 2026-04-30: Config keys for list settings were renamed fromlist-page-sizeandlist-protected-highlight-colortoList.Page-SizeandList.Protected-Highlight-Color, with automatic startup migration - 2026-04-30: Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - 2026-05-14: Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - 2026-06-04: README content was reorganized into overview sections with dedicated Architecture, Configuration, and Commands documents underdocs/Removed
- 2026-04-28:General.Enable-Benchmark-Command;/replay benchmarkis now always permission-gated throughreplay.benchmarkFixed
- 2026-04-13: Replay controls no longer get stuck after replay ends (#27) - 2026-04-15: Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - 2026-04-16: Nested replay inventory loss when starting a replay during an active replay (#31) - 2026-04-17: Backward step controls now move exactly one tick group per click instead of skipping two - 2026-04-19:activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - 2026-04-22: Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sections - 2026-04-27: Replay export now writes under the plugin data folder - 2026-04-30: PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - 2026-05-14: Chunk playback restore flow now handles unload timing and viewer return cases more reliably, and replay chunk load probing no longer bottlenecks missing-chunk checks under higher send rates - 2026-05-30: Equipment polling and dirty inventory polling now reuse shared short-lived caches across concurrent recordings to reduce repeatedItemStackserialization work without losing fallback accuracy - 2026-05-31: Replay playback now returns viewers to their original location and gameplay state by default, including disconnect and rejoin recovery - 2026-06-02: Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - 2026-06-03: Replay viewer startup teleports now use asynchronous teleports for safer Paper and Folia compatibility1.4.0-alpha.66Jun 3, 2026 [Unreleased]
Added
-/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, or still require a server restart - Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playbackFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay playback now returns viewers to their original location and gameplay state by default, including disconnect/rejoin recovery - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.64Jun 3, 2026 [Unreleased]
Added
-/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, or still require a server restart - Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade path - New config keyPlayback.Vanish-Viewer(defaulttrue) to hide replay viewers from live players during playbackFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay playback now returns viewers to their original location and gameplay state by default, including disconnect/rejoin recovery - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.62Jun 3, 2026 [Unreleased]
Added
-/replay reloadcommand to re-readconfig.yml, restart retention scheduling, and report which changed settings apply immediately, only to new sessions, or still require a server restart - Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade pathFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay playback now returns viewers to their original location and gameplay state by default, including disconnect/rejoin recovery - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.60Jun 3, 2026 [Unreleased]
Added
- Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade pathFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Replay viewers can no longer pick up live world items during playback, preventing replay inventory lockups from stray pickups - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay playback now returns viewers to their original location and gameplay state by default, including disconnect/rejoin recovery - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.58May 31, 2026 [Unreleased]
Added
- Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Replay viewer safety controls:Playback.Viewer-Safety-Mode,Playback.Restore-Viewer-Location-On-Stop,Playback.Restore-Viewer-GameMode-On-Stop,Playback.Restore-Viewer-Flight-On-Stop, andPlayback.Restore-Viewer-State-On-Rejoin- Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade pathFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay playback now returns viewers to their original location and gameplay state by default, including disconnect/rejoin recovery - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.56May 31, 2026 [Unreleased]
Added
- Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-Mode- Split inventory recording into dedicated equipment-state and storage-snapshot events backed by raw item bytes, plus regression coverage for the new binary payloads and legacy JSON upgrade pathFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Equipment polling now reuses a single per-tick capture across concurrent recordings and only falls back to clean-player sweeps periodically, reducing repeated ItemStack serialization under high recording load - Dirty inventory polls now reuse a shared short-lived storage snapshot cache across concurrent recordings, while clean fallback sweeps still force a fresh capture to preserve missed-change detection - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds - Binary replay archives now use format version2; new.brinventory payloads store split equipment/storage slot bytes directly, while legacy JSON replay loading remains supported and older alpha.brinventory archives are intentionally unsupported1.4.0-alpha.54May 14, 2026 [Unreleased]
Added
- Frame-by-frame step controls during paused replay; step backward or forward one tick at a time via⏮/⏭inventory buttons (slots 6–7) - Variable playback speed controls during active replay; adjust with⏪ Slower/⏩ Fasterinventory buttons (slots 6–7) using configurable step increments - Current playback speed displayed in the action bar as[X.Xx]during playback - New config keysPlayback.Speed-Step(default0.2) andPlayback.Max-Speed(default1.0) to control speed increment and upper bound - Finalized binary.brreplay storage for file and MySQL backends, including crash-safe append-log recording, lazy indexed loading, preserved recording start timestamps, startup recovery of orphaned temp logs, filtered export tooling, hidden benchmark/debug utilities, and temporary legacy JSON compatibility during migration - Replay protection commands and metadata, protected replay highlighting in/replay list, and config-driven retention cleanup with duration parsing - Optional chunk baseline capture and chunk-aware playback for binary replays, including block-entity support, replay chunk caching,Playback.Chunk-View-Radius,Playback.Chunk-Send-Limit-Per-Tick,Playback.Chunk-Clear-Limit-Per-Tick,Playback.Chunk-Timing-Diagnostics, andPlayback.Chunk-ModeFixed
-activeSessionsinRecorderManagerchanged toConcurrentHashMapto preventConcurrentModificationException(#33) - PacketEvents block-break recording is now rescheduled onto the server thread to avoid Netty-thread contention and unsafe shared-state mutation (#43) - Held-item swaps and hotbar slot changes are now captured immediately for more accurate replay inventory playback - Nested replay inventory loss when starting a replay during an active replay (#31) - Replay controls getting stuck after replay ends (#27) - Replay export now writes under the plugin data folder - Chunk playback restore flow now handles unload timing and viewer return cases more reliably - Replay chunk load probing now frees completed missing-chunk checks before scheduling the next async wave, so higher chunk send limits are not throttled by one-tick queue lag when many surrounding chunks were never recorded - Replay chunk load probing now runs at10xthe configured chunk send rate, so fastmissing-replay-chunkchecks do not throttle how quickly the viewer can discover whether nearby chunks were actually recorded - Config migration now preserves wrapped pseudo-comments, keeps the managed header stable, and avoids accumulating blank lines between root sectionsChanged
-RecordingStopEventnow fires synchronously to fix async AntiCheatReplay compatibility -ReplayManagernow exposeslistSavedReplaySummaries,protectSavedReplay,unprotectSavedReplay, and returnsReplayDeleteResultfromdeleteSavedReplay- Config settings ownership moved out ofReplayinto a dedicated typed, comment-preserving config manager with versioned migrations - Replay sessions now always start at1.0xspeed;Playback.Max-Speedis enforced to a minimum of1.0- Config keys for list settings were renamed fromlist-page-size/list-protected-highlight-colortoList.Page-Size/List.Protected-Highlight-Color; values are auto-migrated on startup - Update checks now treat-SNAPSHOTbuilds as their corresponding release, and Modrinth publishing metadata now includes Purpur, Spigot, and Bukkit loaders - Modrinth uploads now publish the matching release changelog onmainand the[Unreleased]section fordevalpha builds1.4.0-alpha.52May 14, 2026 1.4.0-alpha.49May 5, 2026 1.4.0-alpha.45May 1, 2026 1.4.0-alpha.43May 1, 2026 1.4.0-alpha.40May 1, 2026 1.4.0-alpha.38May 1, 2026 1.4.0-alpha.36Apr 29, 2026 1.4.0-alpha.34Apr 28, 2026 1.4.0-alpha.31Apr 28, 2026 1.4.0-alpha.29Apr 28, 2026 1.4.0-alpha.25Apr 22, 2026 1.4.0-alpha.23Apr 22, 2026 1.4.0-alpha.22Apr 22, 2026 1.4.0-alpha.18Apr 20, 2026 1.4.0BetterReplay 1.4.0Apr 20, 2026
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta