AdvancedReplay 1.8 - 1.18 1.8.1

Record, Replay, Repeat

  1. Jumper251
    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.


    [​IMG]


    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

      # 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/

Recent Reviews

  1. Venjox
    Venjox
    1/5,
    Version: 1.8.1
    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..
  2. smaks6
    smaks6
    5/5,
    Version: 1.8.1
    The best plugin! This plugin working amazing! The only thing I could fault is a little underdeveloped api.
  3. AgentH14
    AgentH14
    4/5,
    Version: 1.8.1
    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!
  4. Venom9925
    Venom9925
    4/5,
    Version: 1.8
    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.
  5. Thexiaoyu
    Thexiaoyu
    2/5,
    Version: 1.8
    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)
  6. XDRGAMING_S4
    XDRGAMING_S4
    5/5,
    Version: 1.8
    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 :)
  7. Sencium
    Sencium
    5/5,
    Version: 1.8
    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
  8. Goro922
    Goro922
    1/5,
    Version: 1.8
    doest work in 1.18.1
    ............................................................
  9. NikolajBB1
    NikolajBB1
    2/5,
    Version: 1.8
    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.
  10. Anldernx
    Anldernx
    1/5,
    Version: 1.8
    it doesnt work for me, it just simply removes your items and you get soft locked so i cant you this plugin