- Native Minecraft Version:
- Legacy (< 1.13)
- Tested Minecraft Versions:
- 1.8
- 1.9
- 1.10
- 1.11
- 1.12
- 1.13
- 1.14
- 1.15
- 1.16
- 1.17
- 1.18
- Source Code:
- https://github.com/Jumper251/AdvancedReplay
AdvancedReplay
AdvancedReplay is a Replay system for Spigot 1.8 - 1.18.
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.
If you encounter any bugs please report them to me.
- Player movements
- Player actions (Eating, Arm animations & more)
- Inventory changes
- Metadata updates
- Projectiles
- Dropped Items
- Block changes by players
- Chat messages
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
# 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
# This message is displayed when a player dies
death_message: '&6{name} &7died.'
# This message is displayed when a player leaves the game
quit_message: '&6{name} &7left the game.'
# This message is displayed when a player joins the game
join_message: '&6{name} &7joined the game.'
# Configuration of the replaying settings
replaying:
world:
# Reset block changes after watching a replay?
reset_changes: false
# 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] - 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.
Code (Java):ReplayAPI.getInstance().registerReplaySaver(new IReplaySaver() {
@Override
public void saveReplay(Replay replay) {
ReplayData data = replay.getData();
// Will be called to save a new replay
}
@Override
public boolean replayExists(String replayName) {
// Return true if the replay exists
return false;
}
@Override
public void loadReplay(String replayName, Consumer<Replay> consumer) {
// Load the ReplayData and return a new replay to the consumer
consumer.accept(new Replay(replayName, new ReplayData()));
}
@Override
public void deleteReplay(String replayName) {
// Will be called to delete an existing replay
}
@Override
public List<String> getReplays() {
// Return all available replays
return null;
}
});
Code (Java):ReplayAPI.getInstance().registerHook(new IReplayHook() {
@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.
*/
return null;
}
@Override
public void 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
public void onReplayFinished(ReplaySessionFinishEvent e) {
Player player = e.getPlayer();
Replay replay = e.getReplay();
}
Dependencies
ProtocolLib - https://www.spigotmc.org/resources/protocollib.1997/

AdvancedReplay 1.8 - 1.18 1.8.1
Record, Replay, Repeat
-
MagicMoonsong, 119, Venom9925 and 18 others like this.
Recent Updates
- 1.8.1 - Bug fixes Mar 16, 2022
- 1.8 - Added support for 1.18 Dec 17, 2021
- 1.7.1 - Added Swimming, Bug fixes & Improvements Dec 8, 2021
Recent Reviews
-
Venjox
- 1/5,
Plugin doesnt work, hardstuck into Replay. Got no Response from the Developer to that issue, so had to remove the Plugin and aswell restore my Inventory..
-
smaks6
- 5/5,
The best plugin! This plugin working amazing! The only thing I could fault is a little underdeveloped api.
-
AgentH14
- 4/5,
Amazing Plugin for my city server!
BUT..
It's missing 1 thing...
and that is, WorldEdit, so the plugin can update blocks and after the player records it and views the replay!
Other than that, it's a well made spigot plugin! -
Venom9925
- 4/5,
Good plugin but pls make a support discord server and consider adding random name generator option,means if player do not enter the replay name while recording then the plugin will automatically create a name for it.
-
Thexiaoyu
- 2/5,
Mysql Unable to load video
Loading replay yoMYMi is displayed in the game...
no more
java.io.OptionalDataException
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject0(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject(Unknown Source)
[21:29:29 WARN]: at java.util.HashMap.readObject(Unknown Source)
[21:29:29 WARN]: at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
[21:29:29 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[21:29:29 WARN]: at java.lang.reflect.Method.invoke(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readSerialData(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject0(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readSerialData(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject0(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject(Unknown Source)
[21:29:29 WARN]: at java.io.ObjectInputStream.readObject(Unknown Source)
[21:29:29 WARN]: at me.jumper251.replay.filesystem.saving.DatabaseReplaySaver$1.getValue(DatabaseReplaySaver.java:68)
[21:29:29 WARN]: at me.jumper251.replay.filesystem.saving.DatabaseReplaySaver$1.getValue(DatabaseReplaySaver.java:1)
[21:29:29 WARN]: at me.jumper251.replay.utils.fetcher.Acceptor.run(Acceptor.java:17)
[21:29:29 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[21:29:29 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[21:29:29 WARN]: at java.lang.Thread.run(Unknown Source)
[21:29:29 WARN]: Exception in thread "pool-37-thread-1"
[21:29:29 WARN]: java.lang.NullPointerException
[21:29:29 WARN]: at me.jumper251.replay.commands.replay.ReplayPlayCommand$1.accept(ReplayPlayCommand.java:43)
[21:29:29 WARN]: at me.jumper251.replay.commands.replay.ReplayPlayCommand$1.accept(ReplayPlayCommand.java:1)
[21:29:29 WARN]: at me.jumper251.replay.utils.fetcher.Acceptor.run(Acceptor.java:17)
[21:29:29 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[21:29:29 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[21:29:29 WARN]: at java.lang.Thread.run(Unknown Source) -
XDRGAMING_S4
- 5/5,
Very nice plugin! however when using "unlimited-nametag-mode" It just spawns armor stands that are not hidden with no hologram above them. please add compatibility for this :)
-
Sencium
- 5/5,
Really enjoying the replays! I wish the default config had the notes the config on the site here has but a quick copy/paste fixes that.
I had issues on 1.18 but after updating ProtocolLib it fixed everything -
Goro922
- 1/5,
doest work in 1.18.1
............................................................ -
NikolajBB1
- 2/5,
The plugin is well made for other versions but 1.18 are not a well supported version, wouldn't recommand this to 1.18 servers but other versions it should work.
-
Anldernx
- 1/5,
it doesnt work for me, it just simply removes your items and you get soft locked so i cant you this plugin