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.
- Native Minecraft Version:
- Tested Minecraft Versions:
I also added some command support, allowing you to backup regions without code! You can even integrate it with this SG plugin (see below).
Commands and permissions and Configuration:
- 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!
Please see the wiki: https://bitbucket.org/lizardfreak321/rollbackcore/wiki/Home
Integration with Wazup92's SurvivalGames plugin:
The tutorial I made explains everything:
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:
The replacement uses regular expressions, so please be aware that regex can make a replacement behave differently than a standard replacement.The versions on the left side are the "to" version, and the versions nested inside of them are the "from" version.Code (YAML):1-14-4:
- from: "\\bsign(.*)"
- from: "\\bwall_sign(.*)"
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 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.
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:
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.Code (Text):import net.shadowxcraft.rollbackcore.*;
Let's say you have all of these instance variables in your class:
And the following parameters in your current method: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.
You can then call copy like this:Code (Text):(CommandSender sender) // The person to send the status messages to. Use null for nobody.
Which would save the region into a folder inside of your plugin folder called "arenas".Code (Java):new Copy(min, max, yourPlugin.getDataFolder() + "/arenas/" + arenaName.toLowerCase(),
Here is my KitPVP arenas folder using this code:
You can then call paste like this:
Here is what it looks like when you set sender to your player:Code (Java):new Paste(min, yourPlugin.getDataFolder() + "/arenas/" + arenaName.toLowerCase(),
sender, true /*Clear entities*/, false /*Don't ignore air*/, prefix)
Or if I replace the entire arena with air:
%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%"
This plugin is open source under the LGPL license.
The source is here: https://bitbucket.org/lizardfreak321/rollbackcore/src
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:
This plugin utilizes bStats to collect anonymous statistics. You can disable this in the bStats config.
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
- 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.
RollbackCore [1.4.7-1.14.4] 3.4.3-BETA + 2.4.2
Aggressively rollback arenas without lag! Easy integration! Scalable!