Honeypot 5.1.0
Honeypot 5.1.0 comes 3 days after Honeypot 5.0.0's release and introduces per-type trigger limits for Honeypots, as well as ensures that inventory interact/click and TNT explosions are tracked properly and apply limits the same way. This replaces the legacy blocks-broken-before-action-taken config value, so be sure to check out your configs when updating! It also adds improvements to logging, and a new "What's New" GUI for update notifications. This GUI is dynamically generated from a version manifest here on GitHub, and displays the entire change log in an easy-to-read format 😁
Alongside the new features, 5.1.0 fixes a whopping 25 bugs in total, some of which are critical. It is highly recommended you update your version of Honeypot as soon as possible!
For developers, this update brings 2 new event types and deprecates 7. The PlayerStore and PlayerHistoryStore interfaces got updated to support the new TriggerType Enum, and the legacy methods deprecated. Existing StorageProvider implementations will make the assumption that everything is TriggerType.BREAK, but you should update your StorageProvider as soon as possible to support the various new trigger types. This update, however, is backwards compatible, so you have time. Honeypot 6 will remove all the events and methods that were deprecated this version.
Core
Changes & Additions:
- Added per-type trigger limits, so server owners can decide how many of each type of Honeypot they want to trigger
- This is per-type based on the event listener, not the action of the Honeypot
- In the
/honeypot history query [player]menu, each break will show the type of trigger that caused it. If no action was taken, the trigger will be prefixed with "prelim", meaning "preliminary".
- Added lifetime action and trigger tracking for players
- These values are backfilled on migration based on the history table! For most servers, you'll be able to have lifetime tracking right away!
- Added new placeholders for these features:
%honeypot_current_count_[type]%- Gets the current player's trigger count, where[type]isbreak,inventory_open,inventory_interactorgeneric%honeypot_current_count_[type]_[playerName]%- Gets a given player's trigger count, where[type]isbreak,inventory_open,inventory_interactorgenericand[playerName]is the name of the player to check%honeypot_lifetime_triggers%- Gets the current player's total lifetime Honeypot triggers%honeypot_lifetime_triggers_[playerName]%- Gets a given player's total lifetime Honeypot triggers, where[playerName]is the player to check%honeypot_lifetime_actions%- Gets the current player's total lifetime Honeypot actions taken against them%honeypot_lifetime_actions_[playerName]%- Gets a given player's total lifetime Honeypot actions taken against them, where[playerName]is the player to check%honeypot_triggers_before_action_[type]%- Gets the number of triggers required per type before action is taken, where[type]isbreak,inventory_open,inventory_interactorgeneric- The legacy Placeholders still exist for backwards compatibility, and use the
breaktype
- Improved internal player history management, trigger count logic, and action handling to ensure that history and trigger counts are much more accurate and less prone to bugs.
- Added a "What's New" GUI for version updates moving forward. This GUI displays how many versions Honeypot is behind, what features have been added and in what version, and what bugs have been fixed and in what version.
- Added detection of players lighting things on fire with Flint and Steel or Fire Charges. This prevents players from lighting TNT honeypots and also allows action to be taken on players who attempt to burn burnable Honeypots (previously, the fire would be lit, but the actual burning of the block would be prevented)
- This still doesn't not take action against players if a fire they lit spreads to a burnable block, or if they light it via a fire charge shot by a dispenser
- As before, Honeypots are prevented from burning, at least
- Added a new option to set the minimum log level for Honeypot
- Added a new log level,
VERBOSEVERBOSElogging is far and few between still. I'm working on improving how logging is implemented, now, so Honeypot isn't littered withlogger.verbose()calls lol
- Added a new config option to enable or disable logging to a file without having to see DEBUG or VERBOSE messages in the file
- Setting the minimum log level to DEBUG or VERBOSE ignores this setting, forcibly enabling file writes
Bug Fixes:
- Fixed a bug where Block Break Events for a player would incorrectly send WebHooks to Discord regardless of the
send-whenvalue in config, and would incorrectly categorize them as Action Taken, even if action was not taken - Fixed a bug where history was counted twice for players who attempted to blow up Honeypots using TNT
- Fixed a bug where players would have a bogus history row added to them when blowing up Honeypots using TNT if they would normally be considered exempt or have the necessary permissions to break the Honeypot
- Fixed a bug where, when
allow-player-destructionwastrue(default), player-lit TNT deleted the Honeypot object whileallow-explode: falsewould keep the block intact, allowing players to essentially "disarm" Honeypots by blowing them up if the server was configured as such- Going forward, for ALL explosions, only
allow-explodeis taken into consideration when determining whether to remove a Honeypot, regardless of ifallow-player-destructionistrue
- Going forward, for ALL explosions, only
- Fixed Player History being properly added for inventory interactions and sign changes
- Fixed a bug where TNT explosions triggered regions for every block affected by the exposion within the region, rather than treating it as a single event
- Fixed a bug where
SignChangeEventListenerblocked changes to sign Honeypots for exempt players - Fixed a potential thread-safety issue regarding the Honeypot Logger and the Discord WebHook handler
- Fixed a bug where ghost Honeypots were created when an integration such as WorldGuard blocked an action. The block would be destroyed, but the Honeypot would remain in the database
- Fixed a bug where a piston being extended into a breakable Honeypot wasn't detected, breaking the block and leaving a ghost Honeypot behind
- Fixed Placeholder API placeholders using
Bukkit.getOfflinePlayer()instead ofBukkit.getOfflinePlayerIfCached()to prevent a blocking call - Fixed a bug where running
/honeypot reloadafter settinguse-inventory-clicktotruewould cause the inventory open listener to stop, but the inventory interact listeners to never start, resulting in all container-based Honeypots to be disarmed until the next server restart - Fixed a bug where breaking a block that was supporting a Honeypot but wasn't, itself, a honeypot (i.e. a torch placed on a block, where the block was NOT a Honeypot but the torch WAS) wouldn't trigger the
BlockBreakEventfor the Player who broke the supporting block- This inadvertently surfaced a pre-existing, but previously unknown, bug where history events would have AIR logged as the associated block if a Honeypot was broken in this manner. That bug has also been fixed
- Fixed a bug where regions in different worlds that overlapped on coordinates could be removed when running
/honeypot remove - Fixed a bug where the Ghost Honeypot Checker was always scheduled on startup, even if it was disabled, until
/honeypot reloadwas run to cancel it - Fixed a bug where the "Unsupported Version" message would only show if EVERY version number within the MC version was out of range (year, drop, and hotfix if applicable)
- Fixed a bug where comparing two Honeypot Regions for equality would always return true
- Fixed a bug where the message for
no-permissionwould fail to show if a player attempted to use an action in the GUI they didn't have permission for - Fixed a bug where servers using versions of Honeypot before 3.4.0 that upgrade to Honeypot 4 or later will lose their Honeypots permanently from the DB
- Fixed a bug where Honeypot compared versions incorrectly, leading to versions such as
5.1.10being considered newer than5.2.0 - Fixed a bug where Honeypots created past ~16,700,000 blocks would get rounded and be created at a completely different location
- Fixed a bug where
/honeypot history purgerequired a Player argument even though it wasn't required or necessary - Fixed a bug where offline players could not be queried with
/honeypot history query [name]
Removals:
- None
API
Changes & Additions:
- Added
HoneypotPreTriggerEventandHoneypotTriggerEventwhich is called before and after any Honeypot would be triggered- This event is called for all player-based events and pistons. Pistons events are called using the
NON_PLAYERtrigger type
- This event is called for all player-based events and pistons. Pistons events are called using the
- Added a new
TriggerTypeforPlayerStore - Updated the
PlayerStoreinterface with new methods for utilizing per-trigger event types - Deprecated several event types. All of these events are being replaced by
HoneypotPreTriggerEventandHoneypotTriggerEvent, accordingly.HoneypotPreCreateEventandHoneypotCreateEventare not deprecated. These will be removed in Honeypot 6.0HoneypotPreInventoryClickEventHoneypotInventoryClickEventHoneypotNonPlayerBreakEventHoneypotPrePlayerBreakEventHoneypotPlayerBreakEventHoneypotPrePlayerInteractEventHoneypotPlayerInteractEvent
- Added an API to
PlayerHistoryStoreto allow retrieval of players based on UUID, which allows querying for offline players now.
Bug Fixes:
- Fixed a bug in which the (now deprecated)
HoneypotNonPlayerBreakEventcould be given a neighboring block instead of the Honeypot
Removals:
- None; see "Changes & Additions" for deprecations, however
Platforms
Dependencies
- GriefPrevention Optional
- Lands Optional
- PlaceholderAPI Optional
- Vault Optional
- WorldGuard Optional