By registering with us, you'll be able to discuss, share and private message with other members of our community.
SignUp Now!Celebrate the joy of spring with 25% OFF on all Monthly Ranks 🎮
Use coupon code:
⏰ Limited time offer — Bloom before it's gone!
🌿 Keep your subscription active to enjoy the same discount every month!
Upgrade Now 🌸🚀
- Fixed Critical item duplication in multi-server (Redis) setups - when a player removed a selling item via the selling inventory, the item was correctly given to the player and marked as DELETED in the database, but other servers received a generic LISTED removal message and incorrectly recreated the item in their EXPIRED cache, allowing it to be claimed a second time on another server
- Fixed ItemRepository.select(int id) not filtering DELETED items - single-item database queries returned items already marked as DELETED, while the bulk select() method correctly excluded them. This allowed the Redis ItemRemovedListener to reload deleted items and re-add them to cache
- Added destinationStorageType to cluster bridge removeItem method - the ItemRemovedMessage now includes the exact destination storage type (DELETED or EXPIRED) so other servers know exactly what happened instead of guessing. Backward compatible via a default method on AuctionClusterBridge
- Fixed ItemRemovedListener (Redis addon) rewritten with defense-in-depth - uses the explicit destination from the message first, falls back to database state verification, and never blindly assumes an item should go to EXPIRED
- Fixed CreateOptionsMigration failing on MySQL with errno: 150 "Foreign key constraint is incorrectly formed" - the player_unique_id column used uuid() type which could produce a different collation than the existing players table (especially on MySQL 8.0+ with changed default collation). Changed to string(36) to match all other foreign key columns referencing players.unique_id
- Added banned-rules support for categories - allows excluding specific items from a category even if they match the inclusion rules. For example, a netherite hoe would normally appear in the "Tools" category, but if it has a specific CustomModelData (e.g., 300), it can be excluded using a banned rule. Uses the same rule types as regular rules (material, tag, lore, custom-model-data, etc.)
- Added Broadcast system - sends messages to all online players when items are listed or purchased. Configurable per event type (sell/purchase) with options to exclude the seller/buyer. Supports per-category message overrides using MiniMessage format with %seller%, %buyer%, %items%, %price%, %category% placeholders. Disabled by default, enable in config.yml under broadcast
- Added Player options system - extensible per-player preference system backed by the database. Players can toggle options via /ah option (opens GUI) or /ah option <option_name> [value] (command toggle). Options are cached in memory and only stored in the database when different from the default value. Currently supports broadcast_sell and broadcast_purchase to opt out of broadcast messages
- Added Options inventory (/ah option) - 27-slot GUI with toggle buttons for each broadcast option, showing current status (enabled/disabled)
- Added Admin option commands - /ah admin option set <player> <option> <value> to set options for a player, /ah admin option list <player> to view player options, /ah admin option reset <player> to reset all options to defaults
- Added %zauctionhouse_option_<option_name>% PlaceholderAPI placeholder - returns true/false for a player's option value (e.g., %zauctionhouse_option_broadcast_sell%)
- Added banned-rules support for categories - allows excluding specific items from a category even if they match the inclusion rules. For example, a netherite hoe would normally appear in the "Tools" category, but if it has a specific CustomModelData (e.g., 300), it can be excluded using a banned rule. Uses the same rule types as regular rules (material, tag, lore, custom-model-data, etc.)
- Added Broadcast system - sends messages to all online players when items are listed or purchased. Configurable per event type (sell/purchase) with options to exclude the seller/buyer. Supports per-category message overrides using MiniMessage format with %seller%, %buyer%, %items%, %price%, %category% placeholders. Disabled by default, enable in config.yml under broadcast
- Added Player options system - extensible per-player preference system backed by the database. Players can toggle options via /ah option (opens GUI) or /ah option <option_name> [value] (command toggle). Options are cached in memory and only stored in the database when different from the default value. Currently supports broadcast_sell and broadcast_purchase to opt out of broadcast messages
- Added Options inventory (/ah option) - 27-slot GUI with toggle buttons for each broadcast option, showing current status (enabled/disabled)
- Added Admin option commands - /ah admin option set <player> <option> <value> to set options for a player, /ah admin option list <player> to view player options, /ah admin option reset <player> to reset all options to defaults
- Added %zauctionhouse_option_<option_name>% PlaceholderAPI placeholder - returns true/false for a player's option value (e.g., %zauctionhouse_option_broadcast_sell%)
- Added ZAUCTIONHOUSE_COMBINED_ITEMS button - combines selling, expired, and purchased items into a single paginated view. Each source is individually togglable via include-selling, include-expired, and include-purchased. Click actions automatically adapt to the item's storage type (cancel listing, claim expired, claim purchased). Each item type uses its own lore configuration from config.yml
- Fixed Item duplication exploit in multi-server (Redis) setups - removing a listing on one server and claiming the expired item could leave a ghost entry on the original server, allowing the item to be claimed again after natural expiration
- Fixed ItemRemovedListener (Redis addon) - removed fragile DB state validation that rejected removal messages due to race conditions, added safety-net cleanup across all storage types
- Fixed ItemStatusListener (Redis addon) - status change propagation now searches across all storage types (LISTED, EXPIRED, PURCHASED) instead of only LISTED
- Fixed ExpireService - added guard against re-expiring items already deleted/claimed on another server
- Added Redis Sentinel support (Redis addon) - enables high-availability Redis setups with automatic master discovery and failover. Configure mode: "sentinel" in config.yml with sentinel nodes. Fully backward compatible, existing standalone configurations work without changes
- Fixed NullPointerException when default economy is not configured - /ah sell and all sell-related buttons now display an error message instead of crashing. Added startup validation with prominent warnings in console when a default economy is missing from economies.yml
- Fixed Incorrect economy type names in economies.yml comments - COINS_ENGINE and PLAYER_POINTS did not match the actual CurrenciesAPI enum values (COINSENGINE, PLAYERPOINTS), causing these economy types to silently fail to load when users followed the documented names
- Added All permissions are now programmatically registered in Spigot on startup and reload. Includes static permissions (use, sell, admin, etc.), and dynamic permissions from configuration (listing limits, expiration tiers, tax bypass/reductions, economy access, inventory commands, cooldown bypass). All permissions are grouped under the zauctionhouse.* wildcard
- Fixed Items dropping on the ground when claiming expired, purchased, or selling items with a full inventory - items now stay in their storage when the player's inventory is full. Added player-inventory-must-have-free-space config option under remove-expired-item and selling-item sections (enabled by default)
- Added ZAUCTIONHOUSE_REMOVE_ALL_EXPIRED, ZAUCTIONHOUSE_REMOVE_ALL_SELLING, ZAUCTIONHOUSE_REMOVE_ALL_PURCHASED buttons - allows players to retrieve all items at once from expired, selling, and purchased inventories. Items are given one by one and stops when inventory is full (if player-inventory-must-have-free-space is enabled)
- Added ItemContentProvider API - extensible system for displaying the contents of container items (shulker boxes, custom containers from plugins). External plugins can register their own providers via AuctionPlugin.getItemContentManager().registerProvider()
- Added AxShulkers hook - displays the contents of shulker boxes managed by the AxShulkers plugin in the item content viewer. AxShulkers stores shulker contents externally instead of in vanilla NBT, so this hook is required to view their contents
- Fixed Seller not receiving money in multi-server (Redis) setups when the buyer is on a different server - the plugin tried to deposit money locally on the buyer's server where the seller's economy account may not exist. Money is now deferred to PENDING status in distributed environments and claimed by the seller on their own server via /ah claim or auto-claim on join
- Added AuctionClusterBridge.isDistributed() - allows cluster bridge implementations to signal a multi-server environment so the plugin can adapt its behavior (e.g., defer deposits instead of executing them locally)
We get it, advertisements are annoying!
Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.