AdvancedReplay is a Replay system for Spigot 1.8 & 1.21. It can record players on your Server and save the recorded data to a file or database, so you can watch the replays at any time. Currently it records almost every action a player does and can be easily controlled with the commands.
This Plugin needs ProtocolLib to run.
Features
Replaying: When watching a replay you have a variety of tools to control the replay. For example, you can pause it, change the speed, teleport to one of the players and more.
Easy to use API: AdvancedReplay comes with a lot of possibilities for customization with the api, including a way to change how replays are saved and a possibility to add and replay your own data. For more details take look at the API section.
Recorded Data:
AdvancedReplay is currently able to record living entities, items and Projectiles.
Player movements
Player actions (Eating, Arm animations & more)
Inventory changes
Metadata updates
Projectiles
Dropped Items
Block changes by players
Chat messages
If you encounter any bugs please report them to me.
Configuration
In the config.yml you can configure some general settings about the plugin and the recorded data If you want to use a database you also need to set up the mysql.yml. If you want to disable a notification or message just leave it empty.
Example config with some explanations:
Code (YAML):
# General plugin settings general:
# Maximum length of a replay in seconds max_length: 3600
# Create a new recording on startup # save_on_stop and add_new_players should be enabled record_on_startup: false
# Should the Replay be saved on shutdown/when the maximum length is exceeded? save_on_stop: false
# Should the plugin save the Replays to a mysql database? # If enabled you need to configure the mysql.yml use_mysql: false
# Save the Replays to an S3 compatible Storage # If enabled you need to configure s3.yml use_s3: false
# If enabled in offline mode, the plugin will fetch the skin data from Mojang # Can slow down the server when recording a lot of players use_offline_skins: true
# Change how detailed movement is recorded. Better quality results in larger replays # Options: high, medium, low quality: high
# Automatically delete replays after a specific amount of time (days) # Use -1 to disable cleanup_replays: -1
# Hide all players that are not participating in a replay hide_players: false
# Should players when they join after a recording started be added to all running recordings add_new_players: false
# Should AdvancedReplay check for new updates? update_notifications: true
# Configuration of the replaying settings replaying:
world: # Reset block changes after watching a replay? reset_changes: false
# How should the replay progress be displayed # Options: action_bar, xp_bar, none progress_display: action_bar
# Configuration of the recording data recording:
blocks:
# Enable recording of block changes? enabled: true
# Use real block changes when replaying? real_changes: true
entities: # Enable recording of all living entities? enabled: true
items:
# Enable recording of items? enabled: true
chat:
# Enable recording of chat messages? enabled: true
# Format of recorded chat messages format: '&r<
{name
}>
{message
}'
Videos English:
German:
Commands/Permissions /replay - Overview of all commands /replay start [Name]:[Duration] [<Players ...>] - Starts recording a new Replay /replay stop <Name> [-nosave|-force] - Stops and saves a Replay /replay play <Name> - Starts a recorded Replay /replay jump <Time> - Jump to a specific moment /replay leave - Leave your Replay /replay info <Name> - Information about a Replay /replay delete <Name> - Deletes an existing Replay /replay list [Page] - Lists all available Replays /replay reload - Reloads the configuration
replay.command.<Command> - Permission for the specific command
API All the methods of the API can be accessed with the ReplayAPI class.
@Override
public PacketData onRecord
(String playerName
){ /* * Will be called every tick for every player that is being recorded. * Return a PacketData containing the data that you want to add. */
returnnull; }
@Override
publicvoid onPlay
(ActionData data, Replayer replayer
){ String name
= data.
getName(); PacketData packetData
= data.
getPacketData(); // Will be called whenever a previous recorded action should be played
} });
Code (Java):
@EventHandler
publicvoid onReplayFinished
(ReplaySessionFinishEvent e
){ Player player
= e.
getPlayer(); Replay replay
= e.
getReplay(); }