/bid command (alias /livebid) — dedicated command for all live auction interactions: place bids, join/leave sessions, and manage preferences. Bids can also be placed by clicking the suggestion in chat./bid <next-minimum> for one-click bidding.ACTION_BAR, BOSS_BAR, TITLE, SCOREBOARD, or CHAT. Defaults to chat-only reminders when EzCountdown is absent or disabled./bid notify [on|off] and choose display types with /bid notify display <types…>. Preferences persist across sessions (stored in live-preferences.yml or the MySQL table {prefix}live_player_preferences)./liveauction opens a 54-slot inventory when multiple auctions are running, letting players select which one to join.chat-filter-feature-enabled: true, players can run /bid mutechat on to suppress non-auction chat while in an active session.minimum-bid-increment-percent and minimum-bid-increment-fixed in auction.yml control the minimum raise required per bid.LiveAuctionStartedEvent (cancellable), LiveAuctionBidPlacedEvent (cancellable), LiveAuctionEndedEvent, LiveAuctionPlayerJoinedEvent, LiveAuctionPlayerLeftEvent.ezauction.bid (default: true), ezauction.auction.live.notify (default: true).!Live auction chat messages
!Live auction shulker contents
!/liveauction queue gui
ezauction.auction.live.sell; clicking it opens the sell menu pre-configured for the live queue. A grey button is shown to players without the permission./liveauction sell — command shortcut to open the live sell menu without navigating to the GUI first./liveauction cancel — removes the sender's own item from the live queue and refunds the deposit./liveauction cancel <id> (admin) — force-cancels an active live auction by ID, refunds all bidders, and returns the item to the seller.already-queued message and cannot enqueue a second entry until the first is sold or cancelled.ezauction.auction.live.sell (default: true), ezauction.auction.live.admin (default: op).jacoco-maven-plugin from 0.8.12 to 0.8.13 to resolve Unsupported class file major version 69 during test instrumentation on JDK 25./auction claim and the Claims button in the browser now open a dedicated 54-slot inventory instead of a bare command response. The GUI shows each pending return item with its expiry date in the lore, a Claim All button (slot 49), and a Back button (slot 45) that returns to the auction browser.claim.expiry-days key in auction.yml (default 7). The expiry is shown in the item lore inside the Claim GUI and resets whenever a new item is stored for the player./liveauction.ItemStack data is now stored as a Base64-encoded byte stream (item-data key) via BukkitObjectOutputStream instead of YAML-native serialization. This eliminates the [ERROR] Material cannot be null log entries that appeared during startup when loading YAML files written by a Paper 1.21+ server on a Spigot server. Existing files are migrated to the new format automatically on the next save cycle; the old item key is still read as a fallback during the transition.YamlAuctionStorageSmokeTest (8 tests) and a dedicated spigot-smoke.yml GitHub Actions workflow to guard this code path in CI.!Team Auctions
/auction team - browse team listings (hidden when disabled or TeamsAPI absent)./auction team sell - list held item as a team auction.team-auctions.enabled toggle in auction.yml (default false).TeamsIntegration facade - null-safe soft-dependency wrapper around TeamsAPI 1.4.0.AuctionListing.teamId field persisted to both YAML and MySQL backends.AuctionListingService team scope and AuctionQueryService team query, both guarded by the config flag.AuctionManager.createTeamListing() and listActiveTeamListings().TeamsAPI added to softdepend in plugin.yml.en, es, nl, zh).ezauction.auction.team, ezauction.auction.team.sell.SellMenuState.quantity() - tracks the chosen listing amount, clamped to [1, item stack size].SellMenuInteractionConfiguration.quantityAdjustments - configurable quantity-step list (default: ±1, ±8, ±16, ±64).SellMenuLayoutConfiguration.quantityAdjustmentSlots / quantityDisplay layout fields; inventory expanded from 27 to 36 slots to accommodate the extra row.$ by default). Labels now use formatCurrency() consistently with the rest of the sell menu.zh) translation files: gui-messages_zh.yml had a duplicate activity preamble block and incorrect 4-space indentation; messages_zh.yml had broadcast and team-auctions merged onto one line and was missing a trailing newline; orders-only.yml had Windows CRLF line endings. All three files now pass YAML validation.Discord Notifications
EzAuction can now send auction event notifications to Discord via two independent methods — use one or both at the same time.
webhook.enabled: true in discord.yml, paste your Discord webhook URL, and choose which events trigger a message (auction_start, auction_end, auction_bid, auction_cancel). Supports rich embeds and custom bot name/avatar.enabled: true in discord.yml and supply the target channel ID. Optionally restrict notifications to players that have a linked Discord account with a required role (role-required, required-role-id).A new admin command /auctiondiscord test [message] lets you verify Discord is wired up correctly without needing to create a real listing. Requires the ezauction.discord permission.
Improved Sell GUI (in-GUI price and duration selection)
The sell menu now handles price and duration entirely inside the GUI:
Configurable GUI Action Buttons
GUI action buttons (confirm, cancel, adjust price, pick duration, etc.) are now fully driven by the message/layout YAML files. Each button's item, name, lore, and slot can be customised without modifying any code. Language translations apply to these buttons as they do to all other GUI text.
1k, 2.5m, etc.) now throw IllegalArgumentException on bad input. Error messages are correctly shown to the player when an unrecognisable price or amount is entered via command./auction and /liveauction is now handled per-subcommand, giving context-aware suggestions at each argument position.messages.yml fallback removed. If your server was relying on a root-level messages.yml file (deprecated since v2.0), it will no longer be loaded. All messages must be in the language-specific files under messages/messages_<lang>.yml, messages/gui-messages_<lang>.yml, etc. The defaults ship correctly — this only affects servers that manually edited the old file.discord.yml configuration file. This file is automatically created on first run with all features disabled (enabled: false, webhook.enabled: false). No action is required unless you want to enable Discord notifications.
Menu-first marketplace with listings, buy orders, and async safety nets