Releases: ez-plugins/EzAuction
EzAuction 2.3.1
Fixed
- Live auction escrow safety - fixed a critical payout edge case in live auction resolution. If the economy plugin fails to credit the seller when an auction ends, the winner's escrowed bid is now refunded immediately and the item is returned to the seller, preventing silent money loss.
- Live auction regression coverage - added dedicated end-auction tests for seller-credit failure and success paths to prevent escrow-loss regressions.
EzAuction 2.3.0
Added
- Live auction overhaul — complete rewrite of the live auction engine with new interactive features:
/bidcommand (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.- Clickable bid messages — the bid announcement in chat includes a clickable link that auto-fills
/bid <next-minimum>for one-click bidding. - Item hover previews — the item name in chat announcements shows enchantments, potion effects, and shulker box contents on hover.
- EzCountdown integration (optional soft-dependency) — configurable countdown display per-player via
ACTION_BAR,BOSS_BAR,TITLE,SCOREBOARD, orCHAT. Defaults to chat-only reminders when EzCountdown is absent or disabled. - Per-player notification preferences — players toggle notifications with
/bid notify [on|off]and choose display types with/bid notify display <types…>. Preferences persist across sessions (stored inlive-preferences.ymlor the MySQL table{prefix}live_player_preferences). - Live auction picker GUI —
/liveauctionopens a 54-slot inventory when multiple auctions are running, letting players select which one to join. - Opt-in chat filter — when
chat-filter-feature-enabled: true, players can run/bid mutechat onto suppress non-auction chat while in an active session. - Bidding configuration —
minimum-bid-increment-percentandminimum-bid-increment-fixedinauction.ymlcontrol the minimum raise required per bid. - Five new Bukkit events:
LiveAuctionStartedEvent(cancellable),LiveAuctionBidPlacedEvent(cancellable),LiveAuctionEndedEvent,LiveAuctionPlayerJoinedEvent,LiveAuctionPlayerLeftEvent. - New permissions:
ezauction.bid(default: true),ezauction.auction.live.notify(default: true).
- Live auction seller management — sellers can enter and manage the live queue directly from the GUI or commands:
- Sell button in the Live Auction GUI — a lit sell button (slot 44) appears in the live browser for players with
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.- Queue position feedback — on enqueue, the seller receives a chat confirmation with their position (e.g. "Your Diamond Sword has been added to the live queue at position #2"). If the queue is disabled the auction starts immediately and a separate instant-start message is shown instead.
- Cancel button in the Live Auction GUI — a cancel button (slot 37) appears only while the viewer has a queued entry; clicking it dequeues the item and refunds the deposit.
/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.- Duplicate-entry guard — players who already have an item queued receive an
already-queuedmessage and cannot enqueue a second entry until the first is sold or cancelled. - New permissions:
ezauction.auction.live.sell(default: true),ezauction.auction.live.admin(default: op).
- Sell button in the Live Auction GUI — a lit sell button (slot 44) appears in the live browser for players with
Fixed
- JaCoCo Java 25 compatibility — upgraded
jacoco-maven-pluginfrom0.8.12to0.8.13to resolveUnsupported class file major version 69during test instrumentation on JDK 25. - Live auction first-bid minimum — the first bid on a live auction now only requires meeting the starting price. Previously, the minimum bid increment (percent and fixed) was incorrectly applied before any bid existed, making the starting price unreachable.
- Empty chat input bids the minimum — during the custom-bid chat prompt, pressing Enter with no input now automatically places a bid at the minimum amount instead of cancelling or erroring.
- Claim GUI —
/auction claimand 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. - Configurable claim expiry — pending return items now carry an expiry timestamp. New
claim.expiry-dayskey inauction.yml(default7). The expiry is shown in the item lore inside the Claim GUI and resets whenever a new item is stored for the player. - Live Auctions shortcut in the browser — a Live Auctions beacon button (slot 47) has been added to the main auction browser GUI. Clicking it opens the live auction picker directly, without needing to type
/liveauction.
EzAuction 2.2.1
Fixed
- Spigot compatibility –
ItemStackdata is now stored as a Base64-encoded byte stream (item-datakey) viaBukkitObjectOutputStreaminstead of YAML-native serialization. This eliminates the[ERROR] Material cannot be nulllog 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 olditemkey is still read as a fallback during the transition. - Smoke test coverage – Added
YamlAuctionStorageSmokeTest(8 tests) and a dedicatedspigot-smoke.ymlGitHub Actions workflow to guard this code path in CI.
EzAuction 2.2.0
Added
- Team Auctions: team-scoped listings visible and purchasable only by members of the seller's team.
- New command:
/auction team- browse team listings (hidden when disabled or TeamsAPI absent). - New command:
/auction team sell- list held item as a team auction. team-auctions.enabledtoggle inauction.yml(defaultfalse).TeamsIntegrationfacade - null-safe soft-dependency wrapper around TeamsAPI 1.4.0.AuctionListing.teamIdfield persisted to both YAML and MySQL backends.AuctionListingServiceteam scope andAuctionQueryServiceteam query, both guarded by the config flag.AuctionManager.createTeamListing()andlistActiveTeamListings().- Team browse tab in the auction browser GUI; tab button hidden when team auctions are disabled or TeamsAPI is not installed.
TeamsAPIadded tosoftdependinplugin.yml.- Full message keys added across all four language files (
en,es,nl,zh). - New permissions:
ezauction.auction.team,ezauction.auction.team.sell.
- New command:
Added (sell menu)
- Price-adjustment buttons replaced with coloured glass panes (lime = increase, red = decrease).
- Second row of quantity-adjustment buttons (same glass style) to select how many of a stack to list.
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/quantityDisplaylayout fields; inventory expanded from 27 to 36 slots to accommodate the extra row.
Fixed
- Price-adjustment button labels displayed "coins" instead of the configured currency symbol (
$by default). Labels now useformatCurrency()consistently with the rest of the sell menu. - Chinese (
zh) translation files:gui-messages_zh.ymlhad a duplicateactivitypreamble block and incorrect 4-space indentation;messages_zh.ymlhadbroadcastandteam-auctionsmerged onto one line and was missing a trailing newline;orders-only.ymlhad Windows CRLF line endings. All three files now pass YAML validation.
2.1.0
New Features
Discord Notifications
EzAuction can now send auction event notifications to Discord via two independent methods — use one or both at the same time.
- Direct webhook (no extra plugins required): set
webhook.enabled: trueindiscord.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. - DiscordSRV channel forwarding: if you run DiscordSRV, set
enabled: trueindiscord.ymland 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:
- Dedicated price adjustment buttons (set, increase, decrease) keep players inside the inventory screen.
- Duration picker lets players choose from the configured duration options without typing a command.
- A custom input button is still available for players who prefer typing an exact value in chat.
- In-GUI confirm/cancel dialogs for both listings and buy orders replace the previous chat prompts. Players no longer need to respond in chat to confirm a purchase.
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.
Changes
- Number input shortcuts (
1k,2.5m, etc.) now throwIllegalArgumentExceptionon bad input. Error messages are correctly shown to the player when an unrecognisable price or amount is entered via command. - Tab completion for
/auctionand/liveauctionis now handled per-subcommand, giving context-aware suggestions at each argument position. - Internal storage layer has been refactored to use Repository interfaces. No configuration changes are required, but the refactor lays the groundwork for future storage backends and improves reliability.
Breaking / Migration Notes
- Legacy
messages.ymlfallback removed. If your server was relying on a root-levelmessages.ymlfile (deprecated since v2.0), it will no longer be loaded. All messages must be in the language-specific files undermessages/messages_<lang>.yml,messages/gui-messages_<lang>.yml, etc. The defaults ship correctly — this only affects servers that manually edited the old file. - New
discord.ymlconfiguration 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.
2.0.1
Fixed
- Fixed
/auction reloadsubcommand to properly reload configuration without requiring a full server restart.
Added
- Added new
/ordercommand to open the menu for placing an order. - Added new
/orderscommand to open the orders GUI directly. - Added new standalone order GUIs for better user interaction.
- Improved debug mode for order features, providing more detailed logging and diagnostics.
- Added new
orders-only.ymlconfiguration file withorders-only-mode: falseoption. When set totrue, it enables only the Orders feature and/orderscommand, disabling most other auction features. Changes take effect after a reload.
Changed
- Refactored plugin loading structure for better modularity and maintainability, including updates to
PluginRegistry.javafor staged initialization and component-based setup.
2.0.0
- EzShops 2.0.0+ integration support
- Added enhanced navigation with back buttons and search tips
- Added quick access to pending returns via Claims button
- Added low-price warnings in confirmation dialogs
- Added a new gathered "My Activity" menu
1.2.0
- Added subcommand /auction history [player]
- Added command /auctionhistory
- Added GUI for the auction history
- Added optional (through new permission) feature to see the history of all players
- Fixed
PluginRegistry- Imported all non-imported used classes
- Fixed code styling
- Fixed pending returns init
- Restored
src/main/java/com/skyblockexp/ezauction/live/LiveAuctionCommand.java - Restored
src/main/java/com/skyblockexp/ezauction/gui/AuctionReturnListener.java
1.1.1
- Fixed hologram compatibility issues for Minecraft 1.19–1.20 and implemented a safe shutdown for versions < 1.19
- Added support for parsing numeric shortcuts (
k,m,b,t) representing thousands, millions, billions, and trillions across the entire project - Introduced a utility to handle user input such as
3k,2.5m,10b, and4tand convert them into numeric values - Bundled a full MySQL library into the
.jar(increasing file size) to ensure full compatibility and offline support - Resolved multiple debug messages; debugging is now optional and configurable via the
debugsetting inauction.yml
1.1.0 | Custom events
- Refactored the full AuctionManager for code clean up purposes
- Added custom
AuctionListingCreateEvent: Gets triggered when an auction listing is getting created. - Added custom
AuctionListingSellEvent: Gets triggered when an auction listing is getting sold. - Added read-only custom
AuctionListingSoldEvent: Gets triggered when an auction listing is sold and handled. - Released the project on Github



