Regionerator icon

Regionerator -----

Gradual deletion of unvisited terrain




Apparently I forgot to post 2.4.0 anywhere but GitHub, whoops. As always, I do not test hooks that I do not have an environment for. If you see changelogs related to a hook you use, please verify that it is reading correctly!

What's Changed
2.4.0
  • Update to Java 17
  • Update Lands hook
    • Lands users: Please verify that Lands' protections are detected properly.
    • Requires Lands 6.26+ (or so I believe - the versioning looks like it went wonky with the update that actually included this change. There are no changelogs for the API and the commit messages are tremendously unhelpful.)
  • Flag fresh chunks async
  • Fix relying on Bukkit's softdepend system actually functioning for the hook loading process
  • Attempt to reduce likelihood of author nag about tasks on shutdown
    • If you're still seeing this, you can safely ignore it. Regionerator's deletion task does not perform any additional operations once Regionerator cancels it. You usually see this warning because it finishes shutting down a fraction of a second after the main thread disables the plugin. The "solutions" involve hanging the main thread unnecessarily while waiting for the deletion thread to die or hiding the thread from Bukkit by not using its scheduler.
  • Code health
2.5.0
  • Add support for BentoBox game modes (Big thanks to @BONNe!)
  • Add support for PlotSquared
  • Fix a potential bug with non-standard Towny cell sizes
  • Improve performance of GriefPrevention, Towny, WorldGuard hooks slightly
  • Improve support for non-Craftbukkit-based platforms
    • Regionerator will now make a best effort to determine the location of world data rather than assuming CB world structure and never finding it.
  • Fix entity/POI data not being deleted
    • You may see inflated region deletion numbers on your first run! This is because Regionerator may have previously deleted blocks and left behind entities.
    • POI data is not the same as structure data. Regionerator still does not handle structure data due to the fact that it would require parsing and editing NBT.
  • Improve disk savings by deleting XL chunks immediately
    • Likely only affects extremely heavily-built bases or chunks affected by malicious users.
    • Regionerator previously orphaned XL chunks like any other chunk. The server would delete them when the chunk was saved next. Unlike normal chunks, which are written in the middle of region files, XL chunks are separate .mcc files and can be removed from disk without having to rewrite the entire region file. A single .mcc file usually exceeds the size of an average region, so being able to dispose of them faster is important.
  • Use NIO file API
    • This is a major performance improvement. My benchmark put deletion at around 4,270% faster on a HDD reporting 153MB/s read, 170MB/s write and 1,461% faster on a SSD reporting 411MB/s read, 529MB/s write. As we now have to delete roughly 3x as many files and I assume you all are running your servers on far better hardware than my aging enthusiast-grade PC, I anticipate an average performance increase of "only" around 200%.
    • The largest cause of slow cycle times is hooks that are not async-capable. This affects only the portion of the deletion cycle where Regionerator rewrites region files to delete chunks.
Full Changelog: 2.3.0...2.5.0
----------, Jul 5, 2023

It's been so long since a release that you get categories instead of just bullet points! Exciting!

Configuration:
  • Added per-world flag durations and default setting for all non-specified worlds
    • Replaces 2 old settings - world list and flag duration.
    • Allows for setups where specific worlds do not use Regionerator but all other user-generated worlds will.
    • See Configuration#worlds
  • Added cache settings
    • These settings are mostly for advanced users with particularly large or small servers. If you don't know what you're doing, you could probably break Regionerator badly (i.e. a batch size of 1 and a batch delay of 5 minutes would cause the queue to take forever to drain, meaning flags would likely fail to save).
    • See Configuration#cache
Cache:
  • Changed queue to drain at a rate of 1 region per 0.5 seconds instead of 2.5 seconds.
  • Added minimum time between expiration checks to reduce churn
  • Added soft max cache size (cache is allowed to exceed max size between expiration checks)
Hooks:
  • Fixed Civs hook not enabling without soft dependencies (namely WG and MMOItems) being present
    • Because the hook needs to be precompiled and therefore is a huge pain to monitor and maintain, the hook is officially EoL. If the API used changes, that's it, goodbye hook.
  • Fixed WG hook causing problems without WG present
  • Fix WG hook not being declared capable of async operation
    • Using exclusively async-capable hooks provides a huge speed improvement, so this may lead to huge performance gains during cycles for some people.
Miscellaneous:
  • Changed flagging to distribute load more evenly
    • Reduces likelihood of a lag spike when updating visiting flags by reducing the number of simultaneously considered players
  • Fixed completely fresh regions being deleted when fresh chunks are configured to be preserved
  • Moved some utilities to a more heavily tested library
----------, Mar 8, 2021

If you're updating from a version earlier than 2.2.0, please read the 2.2.0 update notes.

  • Add support for ClaimChunk
  • "Fixed" (read: reverted changes to) Residence hook with WG not present
  • Cleaned up/improved Factions handling a little
----------, Oct 21, 2020

Hooks for Feudal, Kingdoms, Landlord, and UltimateClaims have been removed.
  • Removed local dependencies
    • While pretty much all of the various supported plugins are open source, anything requiring manual setup ruins the point of using a tool like Maven for dependency management. I am not going to maintain support for plugins that require me to do additional manual work and reduce the ability of others to contribute.
    • Removed Feudal support.
      • Feudal is inactive in a buggy state on 1.13, and previous versions contained a force-op.
    • Removed Kingdoms and UltimateClaims support.
      • In addition to the lack of build system support, Songoda appears to have questionable business practices. If you want support for their plugins, you can ask their staff to add their own PluginHooks to Regionerator. At worst, my old hooks are always available via version control and can be copied verbatim.
    • Removed LandLord support.
      • LandLord has not been updated since Minecraft 1.8 and does not have build system support.
    • Civs, Residence, and MassiveCraft Factions are only available via reflection as they are not available via a build system. FactionsUUID already was only supported via reflection.
  • Fixed some logic resulting in fresh chunks never being deleted under certain conditions.
  • Fixed issues with option to delete fresh chunks ignoring chunks generated with option disabled.
  • Added more debug logging.
    • Added new debug level EXTREME for tracing down hooks causing chunk loading.
  • Fixed data load failure potentially eternally protecting chunks
  • Fixed repeated data conversion (due to old data move failure) resetting values to potentially worse states
  • Fixed a few potential concurrency problems
Please note that I have not extensively tested this build. While I'm relatively confident in the changes made, you should exercise caution when using it.
----------, Oct 15, 2020

  • Fix RedProtect hook optimization for 7.7.2 (still worked, just potentially much slower)
  • Fix error on shutdown while cycle was running with option remember-next-cycle-time
  • Fix error not being raised when failing to delete a file
----------, Sep 19, 2020

----------, Aug 22, 2020

  • Added backwards compatibility for old versions of SQLite
    • Note that due to how old SQLite works, the "last delete" information is not available - it requires over double the database interaction.
  • Added configuration option remember-next-cycle-time to not restart cycles on plugin load.
  • Removed unused configuration option minutes-per-flag-autosave
    • This setting only affected cache duration (which was capped to 5 minutes and performed effectively as 3), not auto-commit.
  • Fixed commands not functioning when no worlds were configured.
  • Fixed /regionerator reload not enabling and disabling all configured features as expected
    • Note that as of 2.0.0 reloading does not interrupt or restart active cycles; they continue on their merry way where they left off.
  • Fixed /regionerator pause not pausing active cycles
  • Moved config.yml's delete-this-to-reset-plugin to data.yml's next-cycle
  • QoL: when a world is removed from Regionerator, you no longer need to manually remove its next cycle to prevent re-adding it later starting deletion earlier than intended.
  • Removed a couple unused methods
    • Ordinarily I'd deprecate and wait for a major bump for removals, but frankly this is such a niche plugin that I don't think anyone's writing their own hooks or using the API. If you do happen to know of anyone who does, feel free to yell at me so I'm more careful in the future. The only thing I see possibly affecting anyone is Regionerator#getProtectionHooks' return type changing from a List to a Set.
----------, Jul 23, 2020

  • Allows the plugin to enable without the ability to use triggers
    • This breaks the "last visit before delete" functionality, but allows Regionerator to run on servers using outdated software.
If you do intend to use Regionerator on old server software and want to enable this feature, you will need to update SQLite. This resource will help you do that. As always, make sure to test everything before pushing live!
----------, May 19, 2020

  • Updated Civs hook to 1.6.7
  • Fixed issue checking regions that do not exist
----------, Apr 26, 2020

This is a combined changelog including all of the betas since the 1.5.9 release. For specifically beta 5 to release, check the tag compare.
  • Rewrote the deletion process
    • Prioritizes deleting entirely orphaned or unvisited regions, yielding a higher success rate and greater reduction in world size
    • Focus on providing data on-demand to reduce memory footprint
    • Chunk's last modified timestamp is now used to determine visit status in addition to flags, guarantees chunks that see regular use will be considered visited
    • Minimized main thread impact - only hooks for plugins that are not capable of (safe) asynchronous operation are queried on the main thread, everything else is handled async
  • Minimized interaction with flagging system on main thread
  • Converted flag file saves to SQLite (Thanks @Hdadaw for the initial implementation)
  • Optimized flag storage system
    • Reduced duplicate saves
    • Queued batches of database operations to prevent too many simultaneous queries
  • Added more info to /regionerator check
  • Added /regionerator cache for checking cache/queue counts. This is only useful for users looking to see how conversion from YAML to SQLite is going.
  • Added tab completion to commands
  • Fixed Regionerator running cycles if dependencies were present but nonfunctional
  • Fixed chunks/regions in nether/end worlds not being deleted
  • Improved hook performance where possible
  • Added hook for Civs
  • Added hook for GriefDefender
  • Removed hook for ASkyBlock - ASkyBlock has been replaced by BSkyBlock, and BentoBox's island deletion system essentially removes the need for Regionerator present.
  • Exposed API for deleting chunks
  • Removed events fired when Regionerator attempts to delete area - Regionerator makes a best-effort attempt to delete area, and deletion is not guaranteed to happen. Developers who are looking to support Regionerator deleting area in which they have data stored should instead erase data when the ChunkPopulateEvent is called.
Standard disclaimer - if I don't use a protection plugin I don't test the hook. /regionerator check is your friend.
----------, Apr 18, 2020

  • Re-rewrote chunk handling
    • Focus on providing data on-demand to reduce memory footprint
    • Chunk's last modified timestamp is now used to determine visit status in addition to flags, guarantees chunks that see regular use will be considered visited
    • Exposes methods for deleting chunks
  • Back up flag data when deleting chunks - can be checked with /regionerator check
  • Moved more of deletion off the main thread
  • Minimized interaction with flagging cache on main thread
  • More data exposed for double checks
  • Reduced database operations
  • Added /regionerator cache for checking cache/queue counts. Really not super useful unless you're looking to see how database conversion is going.
----------, Apr 14, 2020


  • Converted flag file saves to SQLite (Thanks @Hdadaw)
  • Rewrote flagging and saving system (again) to improve database performance
    • This will Eventually(TM) lead to performance improvements for deletion
  • Improved Towny hook performance
  • Updated Lands hook
  • Fixed chunks/regions in nether/end worlds not being deleted
Standard disclaimer, you know the drill by now. Test before using - I do my best to maintain stability, but this is a dangerous plugin.
----------, Feb 8, 2020

  • Started rewriting the deletion process
    • Prioritizes deleting entirely orphaned or unvisited regions, yielding a higher success rate and greater reduction in world size
  • Added a queue for flag file saves - reduces the impact of flagging tremendously.
  • Fixed Regionerator running cycles if hook dependencies are present but nonfunctional
  • Added hook for Civs
  • Removed hook for ASkyBlock - ASkyBlock has been replaced by BSkyBlock, and BentoBox's island deletion system essentially removes the need for Regionerator present.
----------, Oct 17, 2019

  • No longer requires WorldEdit present to run
----------, Aug 5, 2019

  • Removed Apache Commons Lang3 dependency (though it was shaded, no real change)
  • Tiny code cleanup for 1.14 annotations
----------, Jun 11, 2019

  • Fixed WG hook for most recent 7.0.0 snapshot API changes
----------, Jan 30, 2019

Accidentally used a class from WG 6 provided by another (also outdated, but not broken) dependency. MY BAD.
----------, Oct 23, 2018

  • Updated to WorldEdit/WorldGuard 7
----------, Oct 21, 2018

  • Added support for Lands
  • Fixed Landlord integration checking incorrect chunk Z
  • Fixed ASkyBlock integration attempting to register a ready listener when not in use
Please note that as I do not run Lands, the Lands hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, Jul 4, 2018

  • Fixed RedProtect hook for RedProtect 7.0.0+
Versions under 7.0.0 are no longer supported.
----------, Jun 30, 2018

  • Added support for PreciousStones
  • Fixed plugin accidentally requiring WG to enable successfully
Please note that as I do not run PreciousStones, the PreciousStones hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, May 26, 2018

  • Changed save format - backing up your flags.yml wouldn't be the worst idea. (#4)
  • Added support for versions < 1.8 (#5)
  • Fixed ASkyBlock hook (#6)
Apparently I forgot to post here when I made this release, sorry about the delay.
----------, May 7, 2018

  • Fixed Feudal hook
  • Fixed Towny hook not supporting cell sizes other than 16
----------, Mar 11, 2017

  • Actually fixed Residence hook for real this time
Huge thanks to mb243 for being patient, helping get to the bottom of the issue, and the generous donation.
----------, Mar 9, 2017

The Residence hook should now be fully functional, though unfortunately far less efficient than it used to be. I do plan to request an addition to Residence's API to reduce the hit, but some internal changes need to be made to hooks before I can do that.
----------, Mar 4, 2017

  • Fixed Feudal hook not properly enabling
In the future if I forget to add a hook to the default config you can manually enable it by adding it to the hook list. Unfortunately, due to the way it was handled before, that was not possible.
----------, Feb 3, 2017

  • Rewrote a significant portion of the deletion process to be cleaner
  • Added new subcommand 'check' to display chunk visit/hook status
  • Added new subcommands 'flag' and 'unflag' to edit flags on chunks
  • Added new alias '/rgr' for '/regionerator'
  • Added hooks for vanilla's spawn protection, Feudal, and Residence. Please note that as I do not have an environment set up using either plugin, neither hook has been tested. Be sure to test any new hooks you intend to use on a development server before pushing them live.
  • Expanded API slightly to better support plugins seeking to add their own hooks. All external hooks must extend PluginHook to be registered.
----------, Jan 22, 2017

Chunks containing RedProtect regions should now be protected from regeneration, just enable the hook in your configuration.

Please note that as I do not run RedProtect, the RedProtect hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, Jun 15, 2016

Kingdoms lands should now be protected, just enable the hook in your configuration.

Please note that as I do not run Kingdoms, the Kingdoms hook is entirely untested. Make sure to try it out on a development server before pushing it live.

Additional changes:
  • When a supported plugin is (un)loaded, its corresponding hook will now (un)load.
  • The RegioneratorChunkDeleteEvent will no longer be fired if a region file fails to delete.
  • If a region file is not writable, Regionerator will no longer get stuck on it. Honestly, if your region files aren't writable you've probably got much larger issues to worry about.
----------, Apr 21, 2016

Areas within islands from ASkyBlock should now be protected from regeneration, just enable the hook in your configuration.

Please note that as I do not run ASkyBlock, the ASkyBlock hook is entirely untested. Make sure to try it out on a development server before pushing it live.

The GriefPrevention hook now uses a method in the GriefPrevention API available in 12.9.1 or higher. Please update GriefPrevention or disable the hook if you are running a lower version.
----------, Jan 3, 2016

The RegioneratorChunkDeleteEvent is fired when a chunk is wiped. Note that the event can be called up to 1024 times per tick per cycle running, and Regionerator itself, while much more efficient than it used to be, is still quite heavy. Caution is advised for anyone using it.
Regionerator also makes no guarantee that chunks are fully deleted - it's possible that chunks could be stored unloaded and waiting to be written when Regionerator visits them.

The config option chunks-per-wipe-cycle has been removed as part of the efficiency improvement - a single read and single write is far more efficient.
----------, Dec 4, 2015

Areas with Landlord should now be protected from regeneration, just enable the hook in your configuration.

Please note that as I do not run Landlord, the Landlord hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, Sep 26, 2015

Added a new config option chunks-per-wipe-cycle, default 129. This is the number of individual chunks that will be deleted at a time. This is not to be confused with chunks-per-deletion, which is the number of chunks that are checked during each deletion cycle.

The value for chunks-per-wipe-cycle must be greater than chunks-per-deletion * ticks-per-deletion / 5 so that deletion is guaranteed to be complete before another set of chunks is queued.
----------, Sep 23, 2015

Areas with Towny should now be protected from regeneration, just enable the hook in your configuration.

Please note that as I do not run Towny, the Towny hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, Sep 14, 2015

Areas with Factions should now be protected from regeneration, just enable the hook in your configuration.

Please note that as I do not run Factions, the Factions hook is entirely untested. Make sure to try it out on a development server before pushing it live.
----------, Sep 14, 2015

Resource Information
Author:
----------
Total Downloads: 5,751
First Release: Sep 14, 2015
Last Update: Jul 5, 2023
Category: ---------------
All-Time Rating:
34 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings