RollbackCore [1.4.7-1.14.4] 3.4.3-BETA + 2.4.2

Aggressively rollback arenas without lag! Easy integration! Scalable!

  1. LizardFreak7
    Native Minecraft Version:
    1.13
    Tested Minecraft Versions:
    • 1.7
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    • 1.14
    Source Code:
    https://bitbucket.org/lizardfreak321/rollbackcore/src
    RollbackCore is a rollback plugin designed to aggressively rollback arenas of any size! It can also be used to paste things depending on how you use it. It can be integrated into any bukkit/spigot plugin using the API.

    I also added some command support, allowing you to backup regions without code! You can even integrate it with this SG plugin (see below).

    Features:
    • Works across 1.4.7 - 1.14.4 (the 1.12.2 and older format will automatically update to 1.13+'s format. Sorry, no 1.13 -> 1.12 converter exists at the moment)
    • Progressive, splits operation to prevent hanging the server.
    • Configurable time spent on operations per tick to minimize lag and maximize operation rate.
    • Compression built in to save hard drive space.
    • Highly optimized.
    • Version independent due to only using Java Libraries and Spigot APIs (So it won't break when the next version of Minecraft comes out)
    • Stores sign text, skull head owners (1.13+), and command block commands (1.13+).
    • New WatchDogRegion [BETA] for greater scalability!
    Commands and permissions and Configuration:
    Please see the wiki: https://bitbucket.org/lizardfreak321/rollbackcore/wiki/Home

    Integration with Wazup92's SurvivalGames plugin:
    The tutorial I made explains everything:


    BlockData Updates:
    RollbackCore allows the server admin to specify BlockData update in case RollbackCore is out of date, but Minecraft changes a block.
    An example of a BlockData update is Minecraft signs. In 1.13, a sign's blockdata was "minecraft:sign". In 1.14, the blockdata was changed to "minecraft: oak_sign"
    Here is the update file in the Jar file that specifies the current updates as of 1.14.4:
    Code (YAML):
    1-14-4:
      1-14-3
    : []
    1-14-3
    :
      1-14-2
    : []
    1-14-2
    :
      1-14-1
    : []
    1-14-1
    :
      1-14
    : []
    1-14
    :
      1-13-2
    :
      - from
    : "\\bsign(.*)"
        to
    : "oak_sign$1"
      - from
    : "\\bwall_sign(.*)"
        to
    : "oak_wall_sign$1"
    1-13-2
    :
      1-13-1
    : []
    1-13-1
    :
      1-13
    : []
    The versions on the left side are the "to" version, and the versions nested inside of them are the "from" version.
    For an update to work, there must be a full path from the 'from' version to the 'to' version. An update will work even if it is incorrect, so in the event that the conversion failed, use the backup file (with the dat_old file extension) by renaming the file extension to .dat, fix the conversion, then try again. Backups are recommended to prevent data loss.

    Empty updates just have a pair of square brackets [] to specify that there are no changes.

    Now, regarding the actual replacements.
    The \\b at the beginning of sign means that it starts with "sign". This prevents it from updating "oak_sign" to "oak_oak_sign".
    The (.+) captures the rest of the blockdata, because the full blockdata of a sign has a section in square brackets [] that specifies the direction.
    The $1 references the capture to put it in the replacement.
    The replacement uses regular expressions, so please be aware that regex can make a replacement behave differently than a standard replacement.
    The config uses YAML, which is very picky. Please learn how to use yaml before attempting to use this.

    To do custom updates, use (or create if it isn't there already) a root configuration section called "custom-mappings:" within the config file, and use the same format as used above.

    API documentation:
    https://www.shadowxcraft.net/javadocs/rollbackcore/
    A simple and easy API that any developer can use!
    For additional information about which class should be used where, please see the wiki https://bitbucket.org/lizardfreak321/rollbackcore/wiki/Home


    Java code example:

    Import the RollbackCore classes at the top of your class:
    Code (Text):
    import net.shadowxcraft.rollbackcore.*;
    If that is not working, you likely have not added RollbackCore to your java project. In eclipse, right click on the project, click properties, then "Java Build Path", then "Libraries", then "Add External JARs...". Locate your copy of rollbackcore, click on it, click open, and then click apply.

    Let's say you have all of these instance variables in your class:
    Code (Java):
    Location min; // The minimum location of the region that needs to be saved
    Location max; // The maximum location of the region that needs to be saved
    Plugin yourPlugin; // The instance of your java plugin. This is the class that extends JavaPlugin.
    String arenaName; // The name of the arena, for example.
    String prefix; // The prefix of the rollbackcore messages.
    And the following parameters in your current method:
    Code (Text):
    (CommandSender sender) // The person to send the status messages to. Use null for nobody.
    You can then call copy like this:
    Code (Java):
    new Copy(min, max, yourPlugin.getDataFolder() + "/arenas/" + arenaName.toLowerCase(),
       sender, prefix).run();
    Which would save the region into a folder inside of your plugin folder called "arenas".
    Here is my KitPVP arenas folder using this code:
    upload_2018-11-11_9-7-21.png

    You can then call paste like this:
    Code (Java):
    new Paste(min, yourPlugin.getDataFolder() + "/arenas/" + arenaName.toLowerCase(),
       sender, true /*Clear entities*/, false /*Don't ignore air*/, prefix)
       .run();
    Here is what it looks like when you set sender to your player:
    upload_2018-11-11_9-11-46.png
    Or if I replace the entire arena with air: upload_2018-11-11_9-13-45.png

    Skript events:
    %event-string% is the string of the EndStatus enum.
    %event-location% is the location of the min x, y, and z of the region.

    Code (Text):
    on rollbackcore copy end:
        broadcast "Copy ended! Status: %event-string%, Location: %event-location%"
     
    on rollbackcore paste end:
        broadcast "Paste ended! Status: %event-string%, Location: %event-location%"
     
    on rollbackcore entityclear end:
        broadcast "Entity Clear ended! Status: %event-string%, Location: %event-location%"
     
    on rollbackcore wdimport end:
        broadcast "WDImport ended! Status: %event-string%, Location: %event-location%"

    on rollbackcore wdrollback end:
        broadcast "WDRollback ended! Status: %event-string%, Location: %event-location%"

    Open source:

    This plugin is open source under the LGPL license.
    The source is here: https://bitbucket.org/lizardfreak321/rollbackcore/src

    Soft dependencies:
    There are no required dependencies, the plugin works fine by itself, but some of the commands require worldedit. When using the API, there is no need for worldedit.

    Worldedit's Bukkit page is here:
    https://dev.bukkit.org/projects/worldedit
    Metrics:
    This plugin utilizes bStats to collect anonymous statistics. You can disable this in the bStats config.

    Other info:
    Limitations: It does not currently store block entity data for any block except signs (for their text), head owners, and command block commands. If this limitation is problematic for you, leave a message in the thread and I will try to add what you need!

    WatchDogRollback [BETA] sometimes misses block changes due to it using listeners to log block changes. Keep backups using a copy if region preservation is import or if block changes will not trigger the Spigot API (Like Worldedit or plugins directly changing the blocks)

    Minecraft updates: This plugin shouldn't break when there are minecraft updates, but in the case that it does, I will update it to support it. This plugin also keeps track of the version, so I can make a converter.

    Tested and works perfectly on Java 8 (and Java 7, too, before 1.13), and on Bukkit/Spigot 1.4.7 - 1.14.4. Keep in mind that the older the version of CraftBukkit, the less robust it is, therefore it does not work as well. Make sure you are using the correct jar for your server version!

    If you have any suggestions or issues, leave them in the discussion thread or in the issue tracker!
    Issue tracker: https://bitbucket.org/lizardfreak321/rollbackcore/issues?status=new&status=open

    Test server:
    - shadowxcraft.net /server hungergames (On game start it rolls the arena back)
    - shadowxcraft.net /server kitpvpretro (BuildUHC and QuickHG)

    If you like the plugin, I would appreciate a rating :) I have put a lot of time into this plugin!
    Donations are also appreciated! I am a full time college student. I do not make money from this plugin or my server.
    ToxicSpin, ANDREI923 and CCCCarsten like this.

Recent Reviews

  1. Szlafrog
    Szlafrog
    5/5,
    Version: 3.4.3-BETA + 2.4.2
    Great Plugin :D I really appreciate your help with using the API.
    Maybe you could add chest items support in the future ?
  2. ToxicSpin
    ToxicSpin
    5/5,
    Version: 3.4.2-BETA + 2.4.1
    Best rollback plugin ! Works fine and without lag.
    Can you please add 1.14.3 compatibility? <3
    1. LizardFreak7
      Author's Response
      Added 1.14 support! Thank you for using RollbackCore!
  3. Plajer
    Plajer
    5/5,
    Version: 3.4.2-BETA + 2.4.1
    Very good plugin, nice API, good choice for minigames. I would recommend it to other devs.
  4. GenFormil
    GenFormil
    5/5,
    Version: 3.3.0-BETA + 2.3.4
    Great work! Overall good performance without taking too much resources. The api is amazing and will probably be featured in all my future minigames server :)
  5. cwyfl
    cwyfl
    5/5,
    Version: 3.2.1-BETA + 2.3.3
    Rate this great plugins again since it's still release the up-to-date version and very helpful support. Hope there can have more rollback and restore feature in the future. Good plugin .
    1. LizardFreak7
      Author's Response
      Thank you for the review! I am planning on looking into some new features over the weekend, and I will work on creating more example code.
  6. BySadex
    BySadex
    1/5,
    Version: 2.3.2
    Thanks for 1 Virus! ....................................................................
    1. LizardFreak7
      Author's Response
  7. Troxx
    Troxx
    5/5,
    Version: 2.3.2
    Awesome! This plug-in makin my server exist! ;) <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3
  8. cwyfl
    cwyfl
    5/5,
    Version: 2.3.1
    ✔Awesome plugin
    ✔Excellent author

    if you need a plugin to rollback arenas, it's a good choice!
    1. LizardFreak7
      Author's Response
      Thank you for reviewing my resource! Let me know if you have any other suggestions.
  9. ANDREI923
    ANDREI923
    5/5,
    Version: 2.3
    +-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+
    Thanks For This Amazing update
    +-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+
    1. LizardFreak7
      Author's Response
      I'm glad I could help! Let me know in the discussion if you have any suggestions or questions.
  10. isntrews
    isntrews
    5/5,
    Version: 2.0
    Excellent plugin. Easy to setup and works great! Does this plugin require the user to set the region area with worldedit or will /sg worldmanager rollback myworld select the entire world?
    1. LizardFreak7
      Author's Response
      Thank you for reviewing my resource! The mode my plugin uses for the SurvivalGames integration requires setting up a region, but other than that is is fairly automated (Much more than during the initial portion of development). It would be very complicated to use this mode to select all chunks in the world, it would also be a lot more intensive than selecting only the required area. If you have any questions, the best place to ask is the discussion.