Honeypot 5.0.1 (HOTFIX)
Honeypot 5.0.0 apparently introduced a bug in a database migration that caused Honeypot to basically never be able to work unless it was already set up, which isn't possible without running it. It was a catch-22. This update fixes that bug, ensures database migrations are executed prior to tables being created (which is what caused the bug in the first place), and fixes an unrelated bug regarding InventoryDragEvent causing stack traces to get thrown when dragging within any double chest.
IMPORTANT: Any server that never used Honeypot before and ran Honeypot 5 for the first time will need to delete their honeypot.db from their plugin folder!
Honeypot 5.0.0
After several months, Honeypot 5 is releasing today and brings a huge change to Honeypot as you know it: Honeypot Regions.
Since Honeypot 3.4.0, when R*-tree was implemented for spatial indexing, Honeypot has, in theory, always been able to store regions. In fact, technically speaking, it did store regions, but each region was a 1x1x1 space. Now, Honeypot can create regions of any size, and all blocks within that region act as if they are Honeypot blocks. Pistons can't push or pull, water can't flow into the region, block breaks and places are impossible, TNT can't explode, etc., just like a normal Honeypot. /honeypot locate will highlight regions with a cyan particle effect! (Note, the particles are much brighter without shaders on. My shaders remove the brightness of particles for some reason)
As well, the /honeypot history command has been improved to become a GUI, allowing server staff to review an player's entire history, rather than however many most recent records, as configured within config.
As something for server owners to look forward to, in Honeypot 5.1.0, the blocks-broken-before-action-taken config will be rewritten to support different types of actions, and will be applied across all Honeypot events listeners.
Important
Because Honeypot 5 is a massive architectural change, its Developer API is, once again, not backwards compatible with Honeypot 4 or 3.x plugins. Developers working with Honeypot will need to perform quite a bit of work to update to Honeypot 5, especially if they are providing a StorageProvider.
Core
Changes & Additions:
- Added support for Honeypot Regions, entire areas protected by Honeypot which utilize a single action. These regions are protected from damage/destruction the same as Honeypot Blocks. Create a region with
/honeypot create region [action].- When creating a region, you will be given a Honey Bottle by default (configurable in config). To create a region, right-click two points. To cancel region creation, drop the Honey Bottle. If you accidentally delete the Honey Bottle, wait 10 minutes, change worlds, or relog.
- The wand cannot be deposited into an inventory, put in an item frame, or even moved around your inventory if you have another inventory open (if yours is open, i.e. the "E" key, you can still move it). Not all possibilities are accounted for, however. For example, the wand can be given to an armor stand. If you find situations like this which allow you to remove the item from your Inventory, please let me know so I can fix it (armor stand will be resolved later!)
- Added support for changing the type of Honeypot created via the GUI. You can now choose if a block or a region will be created.
- If you find yourself making regions more than blocks, you can change the default in the
gui.ymlconfig!
- If you find yourself making regions more than blocks, you can change the default in the
- Changed
/honeypot historyfrom a chat message, limited by whatever was set in config, to a GUI. The GUI now shows all blocks a Player has broken, and each set of blocks is only loaded on page navigation to reduce lag 😁- Because the block type was never previously tracked for Player History entries, a barrier will be displayed indicating the type information is not available. For all new blocks broken after this update, the type will be displayed
- Internally, breaks are tracked by
prelimBreakorbreak. AprelimBreakis a break that occurred but no action was taken as a result ofblocks-broken-before-action-takenbeing higher than 1. If you see a block in this GUI that saysprelimBreak, the action was not taken against the player, but it was counted.
- Added support for individual storage providers per store type. You may now have different storage providers for your players, player history, and regions. In theory, you can now store players in a YAML file, player history in a SQLite DB, and if you wanted to get insane, somehow figure out how to serialize data and encode it into an image for your regions. The possibilities are endless!
- Honeypot, of course, is "batteries included", meaning it comes with three providers for these store types, all of which utilize the same SQLite file you're already using.
Bug Fixes:
- Fixed a bug where the
honeypot.*wildcard permission and/oppermission was ignored in the GUI, requiring staff to have the exact command-equivalent permission to run an action (i.e., An op or someone withhoneypot.*couldn't use "Create a Honeypot" without havinghoneypot.create, or couldn't locate anything withouthoneypot.locate, etc.) - Fixed an issue where, in new versions of Paper, if the Paper version didn't have a hotfix in the version number (i.e., 26.2 instead of 26.2.1 or something), then Honeypot would crash on startup.
- Fixed a bug where players weren't properly auto-completing in the
/honeypot historycommand. - Fixed potential edge-case where, if a Honeypot was attempted to be created in a Lands region which was in an unloaded chunk, it would be allowed.
Removals:
- Removed legacy migration for PDC, which completes the removal of PDC support in Honeypot.
- PDC may come back as a separate plugin for another day, but it doesn't really work with regions.
API
Changes & Additions:
- Created
HoneypotRegionObjectwhich replacesHoneypotBlockObject.HoneypotRegionObjectis used for both creating regions and single block Honeypots. Depending on your need, either callcreateHoneypotRegion(Block block, String action)to create a single block, using the coordinates of theBlockas the region corners, orcreateHoneypotRegion(Location pos1, Location pos2, String action), which will create a region between the twoLocations. - Added a
typeparameter toHoneypotStorewhich defines what kind of provider it is.- Currently, three types of stores exist:
StoreType.REGION,StoreType.PLAYER, andStoreType.PLAYER_HISTORY. All of these are under theStoreTypeenum.
- Currently, three types of stores exist:
- Instead of a StorageProvider being required to implement the entire Honeypot storage specification, it can now define individual stores by annotating the class and implementing the proper Store interface. These are:
RegionStore,PlayerStore, andPlayerHistoryStore. Each Store type only requires the necessary methods to be implemented. Want to store players in SQLite while storing Regions in a serialized file, for example? You can do that! Registrynow has individual set and get methods for the Region Store, the Player Store, and Player History Store.- Added an
AbstractProcessorcalledHoneypotStoreProcessor. This processor is completely optional and does nothing on its own, but can be added to your build pipeline withinbuild.gradle.ktsorpom.xml, and will verify on build that your stores have been properly configured.
Bug Fixes:
- None
Removals:
- Removed
HoneypotBlockObject, as all Honeypot blocks are now simply 1x1x1 regions. UseHoneypotRegionObjectmoving forward. - Removed
Registry.getStorageProvider()andRegistry.setStorageProvider(StorageProvider provider), asStorageProviderno longer exists. - Removed
StorageProviderinterface as it's been split into individual interfaces for various store types.
Platforms
Dependencies
- GriefPrevention Optional
- Lands Optional
- PlaceholderAPI Optional
- Vault Optional
- WorldGuard Optional