2.0.0latest3 days ago DonutAuctionHouse v2.0.0 — The Market Update
New
- Auctions with bids, next to Buy It Now. Start one from the sell menu or with/ah auction <starting bid>. Each bid is held in escrow. An outbid player is refunded at once and told. A bid in the final 30 seconds extends the auction (anti-snipe). The highest bidder wins when it ends, and the result is settled exactly once, even across servers and restarts. Sellers cannot cancel an auction that has bids. - Sales tax and listing fees. Tax is a percentage taken from the seller's proceeds. Permission tiers can lower it (donutauction.tax.*), and the tax can be paid to a server account. The listing fee is a flat amount and/or a percentage, with a cap and an exemption permission. Both are off by default. - Price insight. The sell menu shows recent sales of the item: average, range and last price each, plus the cheapest listing on sale./ah priceshows the same for the held item, and the figures are available as PlaceholderAPI placeholders. - Sale notifications. Sellers get a chat message, sound and title the moment something sells, including sales made on another server. If they were offline, they get a "while you were away" summary when they join. Outbid, won, expired and staff-removed notices are included too. - A collection that never loses items. Items are handed over only as whole stacks that fit. A purchase or auction win that does not fit waits in/ah collectinstead of being dropped on the ground, and won items are delivered on join. Expired and cancelled listings can be reclaimed, relisted with a right-click, or collected all at once. - Better browsing. Search covers names, lore, enchantments, seller names and shulker contents (every word must match). New sorts are Ending Soon and Lowest Price Each. There is a Buy It Now / Auctions filter,/ah view <player>(or/ah <player>) for one seller's listings, and stacks show their price each. - Selling shortcuts./ah sell 2.5k(alsom,b,tand1,250). Click the price in the sell menu to type an exact amount. Shift-click the +/- buttons to step ten times faster. The menu also previews your tax and earnings. - Rules. A blacklist by material, name, lore, custom model data and plugin data keys. Disabled worlds and blocked game modes (creative and spectator by default). Per-item minimum and maximum prices, per single item. A listing cooldown. Each rule has a bypass permission. - Discord webhooks. Listings, sales, bids, wins and expiries can be posted as embeds with the item name, amount, enchantments and lore, the price and the traders' heads. Discord's rate limits are respected. - PlaceholderAPI.%donutauction_active%,_limit%,_slots_left%,_collect%,_sold%,_earned%,_bought%,_spent%,_total_listings%,_total_auctions%, plus_average_<MATERIAL>%,_sales_<MATERIAL>%,_lowest_<MATERIAL>%and_listed_<MATERIAL>%. - Developer API and events.DonutAuctionApi(Bukkit services) lists, reads and creates listings and opens menus. CancellableAuctionPreListEvent,AuctionPrePurchaseEventandAuctionPreBidEvent. AsynchronousAuctionListedEvent,AuctionPurchasedEvent,AuctionBidEvent,AuctionWonEvent,AuctionEndedEventandAuctionCancelledEvent. - Staff tools. Shift-right-click any listing to remove it: the item goes to the seller's collection and any held bid is refunded. Also/ah admin view <player>,/ah admin remove <id>,/ah admin info,/ah admin purge <days>, and/ah open <player> [browse|items|history|search <text>]for NPCs, menus and the console. - Transaction log. One line per trade inplugins/DonutAuctionHouse/logs/transactions-YYYY-MM-DD.log. - Messages. MiniMessage,&codes and&#RRGGBBhex can be mixed. Item names are sent as translatable text, so each player reads them in their own language. Player-made names are always escaped and cannot add colors or click events to broadcasts. Menu text is no longer italic. - Sounds for clicks, purchases, sales, outbids, wins and errors, configurable per event.Fixes
- Permission-based listing limits (donutauction.limit.*,donutauction.slots.*) were never applied: YAML stores dotted permission names as nested sections, so 1.x only read a key nameddonutauction. They now work as documented. - Fast buy and fast sell preferences are loaded when a player joins. Before, they only worked after toggling them in the same session. - Returning items and changing inventories now always run on the player's own thread (Folia-safe), never on a database thread. - Reclaiming expired items is now a conditional row update like buying, so two servers can no longer both return the same item. - The Redis subscriber reconnects after Redis restarts; MySQL polling covers the gap. - One unreadable item (for example one written by a newer Minecraft version) no longer stops every other listing from loading. It is skipped, kept in the database and reported in/ah admin info. - Plain Spigot and Bukkit servers now get a clear startup message that DonutAuctionHouse needs Paper or a Paper fork, instead of class-loading errors.Upgrade and data
- Replace the jar and restart.config.ymlandmessages.ymlkeep your values; new settings and messages are added automatically. Back up your database first, as always. - Items are now stored in Paper's binary format, which records the data version and runs Mojang's data fixers on load, so listings survive Minecraft upgrades. Rows written by 1.x stay readable. - Theauctionstable gains columns for tax, auctions, stored names and the collection, plus a smallauction_metatable. Sales made before the upgrade appear in history and are not announced again. - Sold listings are no longer kept in memory or shown in Your Items, because payment always happens at purchase time. They are listed in History > Sold. Your Items now shows active listings and everything waiting to be collected. - Confirmations and history show the exact amount in parentheses only when your economy's format rounds it, so$390.00 (390)is now$390.00. - New default: listing in creative or spectator mode is blocked (restrictions.blocked-gamemodes, bypassdonutauction.restrictions.bypass).Verification
- 177 automated tests: unit tests, real command and inventory event flows on native SQLite, and the row claims on SQLite and MySQL 8. - An end-to-end matrix on real servers with network clients: Paper 1.20.1, 1.20.4, 1.20.6, 1.21.1, 1.21.4, 1.21.8, 1.21.11, 26.1.2, 26.2 and 26.3, and Folia 1.20.4, 1.21.4, 1.21.11 and 26.3, with Vault and VaultUnlocked. Each run lists, buys with 10% tax, checks the seller notification, runs an API auction through bid and win, opens history, runs/ah priceand the console commands, and checks PlaceholderAPI. Seetools/smoke/README.md.1.6.02 weeks ago DonutAuctionHouse v1.6.0
Features
- Optional compact k/M browse and Your Items prices. Disabled by default; existing economy formatting and config values are preserved. Configure suffixes, 0-6 fractional digits, locale, and currency template. Display rounding never changes stored prices or payments. - Buy/sell confirmations show the provider's formatted price and every decimal digit of the amount. - A book in the auction browser opens private, read-only Bought/Sold history. Includes previous/next pages, Refresh, Back, item, precise price, date/time zone, and seller/buyer. Unknown names fall back to UUIDs; unavailable item metadata uses a placeholder. - History queries enforce viewer ownership in the service/database path and run asynchronously. Stale results cannot reopen a menu after navigation or disconnect.Fixes
- Reject non-finite prices such asNaN, and reject out-of-range sell command prices before removing the held item. Invalid prices are no longer silently clamped into a different listing price. - Database index initialization uses portable metadata checks rather than MySQL-unsupportedCREATE INDEX IF NOT EXISTSsyntax. Migration errors are reported instead of being hidden. - A price-provider or confirmation-formatting failure after payment and item delivery now returns a safe success message. Completed purchase claims cannot be reopened by a late release attempt.Upgrade and data
- Replace the jar and restart. Keep existing config, messages and database files; back up the database before upgrades. New settings/default messages are added without resetting custom values. - History reuses the existingauctionstable and adds onepurchase_completedflag. Legacy SOLD records remain visible; new pre-payment claims and failed purchases are excluded. No parallel ledger or payment mechanism is introduced. - Completion bookkeeping runs after existing payment/item delivery and cannot undo settlement. If the database fails at that point, a record may be absent; the server logs its auction ID. Legacy versions cannot distinguish old crash-interrupted SOLD claims from completed sales.Verification and compatibility
- Java 17 bytecode and Paper 1.20.1 API target retained; JDK 21 builds supported. - Store support matrix retained: Paper, Folia, Purpur, Spigot and Bukkit, Minecraft 1.20.1 through 26.3. - Unit, registered Bukkit command/GUI event, native SQLite, history privacy/pagination/migration, and settlement regressions are included. CI also checks Java 17/21 and native MySQL. - Isolated headless Paper 1.20.1 and 26.3 probes passed startup, item serialization, formatting and database history. Real-client visual checks, every intermediate server/version, and multi-server Folia/Vault tests have not been run. Folia's official download API did not provide a 26.3 build during verification. - The customer's/ah sell <price>browser-opening report has no proven customer-specific cause. A foreign/ahalias collision reproduces the symptom; the namespaced/donutauctionhouse:ah sell <price>routes correctly in tests. This release does not claim that unresolved report is fixed. Please provide plugin/server versions, exact command, held item, namespaced comparison and logs.1.5.2Sep 19, 2026 DonutAuctionHouse v1.5.2
Fixes
* Browse GUI previous-page control restored (slot 46). Sell held item stays at slot 45; next page stays at slot 53. * After leaving page 1, players can go back without disconnecting. * Page arrows showpage/totalPagesand the total listing count. * Changing sort, filter, or search returns the browse session to page 1. * Browse pagination clamps the page to at least 1.Compatibility
* Paper and Folia, Minecraft 1.20.1 through 26.3, Java 17.Upgrade Notes
1. Replace the jar. Keep existingplugins/DonutAuctionHouse/data. 2. Restart the server (or/ah reloadafter replacing the jar if you only need newmessages.ymlkeys; a restart is still recommended).1.5.1Sep 18, 2026 DonutAuctionHouse v1.5.1
Improvements
Store tags extended to Minecraft 26.3*.Compatibility
* Paper and Folia, Minecraft 1.20.1 through 26.3, Java 17. * Legacy support for 1.20.1–26.2 is unchanged.Upgrade Notes
1. Replace the jar. Keep existingplugins/DonutAuctionHouse/data. 2. Restart the server.1.5.0Aug 27, 2026 # DonutAuctionHouse v1.5.0 ### New Features * Optional Redis listing notifications for multi-server networks (sync.redisinconfig.yml, off by default). * MySQL poll fallback so sold listings disappear on other nodes even without Redis. ### Improvements * Purchase, cancel, and expire now claim the database row before changing local cache. * Vault withdraw/deposit for a claimed purchase runs on the buyer’s Folia entity thread. ### Bug Fixes * Buying an auction on one Folia server while MySQL is shared no longer leaves the listing buyable on another server. ### Configuration *sync.poll-interval-seconds(default3, MySQL only;0disables). *sync.redis.enabled,host,port,password,channel. ### Compatibility * Paper and Folia, Minecraft 1.20.1 through 26.2, Java 17. * SQLite single-server behavior is unchanged when Redis is disabled. ### Upgrade Notes 1. Replace the jar. Keep existingplugins/DonutAuctionHouse/data. 2. For a network: setstorage.type: MYSQLon every node to the same database. 3. Optional: setsync.redis.enabled: trueon every node with the samechannel. 4. Restart each node. Confirm a buy on server B removes the listing from/ahon server A and a second buy is refused.1.4.0Aug 19, 2026 - bStats metrics (plugin ID 33523), disable withmetrics.enabled: false- Store tags: Paper, Folia, Purpur, Spigot, and Bukkit for Minecraft 1.20.1–26.2 - Modrinth update check always reports on load (console + online admins): up to date or update available - Admins withdonutauction.update.notifystill see update notices on join when a newer release exists - Chat search uses BukkitAsyncPlayerChatEvent; scheduler falls back when region schedulers are absent1.3.1Aug 10, 2026 DonutAuctionHouse v1.3.1
New Features
* NoneImprovements
* Fullmessages.ymltranslation support for GUI titles, button labels, lore, chat messages, command text, and status labels */ah reloadnow reloadsmessages.ymlalongsideconfig.yml* Prefix and minimum-price messages can live inmessages.yml(legacyconfig.ymlkeys still work)Bug Fixes
* NoneConfiguration
* Newmessages.yml— edit and/ah reloadto translate the plugin without recompiling * Existingconfig.ymlmessages.prefixandmessages.price-below-minremain supported as fallbacksCompatibility
* Drop-in update from 1.3.0 * Folia-supported unchanged * No database migration required * No command or permission changesUpgrade Notes
1. Replace the jar withDonutAuctionHouse-1.3.1.jar2. Restart the server (or/ah reloadafter first start to generatemessages.yml) 3. Editplugins/DonutAuctionHouse/messages.ymlto translate player-facing text1.3.0Jul 29, 2026 DonutAuctionHouse v1.3.0
New Features
Sell from auction GUI* — emerald "Sell Held Item" button on the main auction house (slot 45) lists the item in your main hand Adjustable sell price* — use +/- buttons in the sell GUI before confirming a listingImprovements
* Sell GUI enlarged to 45 slots with confirm/cancel on the bottom row (slots 40 and 44) * Confirm purchase GUI enlarged to 45 slots with a gray border, centered item preview, and buyer balance display * Sell flow logic shared between/ah selland the auction GUI button * Maven publish workflow supportstarget/jars with Paper/Folia/Bukkit loader tagsBug Fixes
* Fixed sell GUI confirm/cancel buttons overlapping duration and category controls * Fixed item duplication when closing and reopening the sell menu during duration/category/price changes * Pending sale is no longer cancelled when the sell GUI refreshes itselfConfiguration
* NoneCompatibility
* Drop-in update from 1.2.2 Requires Vault or* VaultUnlocked plus an economy plugin * Folia-supported remains enabled * No database migration required * No permission changesUpgrade Notes
1. InstallDonutAuctionHouse-1.3.0.jar(replace 1.2.2) 2. Restart the server 3. Open/ahand use the emerald button or/ah sell <price>to list items from your hand1.2.2Donut Auction 1.2.2Jul 28, 2026 Improvements
Economy bridge detection now supports VaultUnlocked in addition to classic Vault* * Clearer startup logs when a Vault-compatible Economy service is linked or missing * Soft-disables cleanly when no Economy provider is registered instead of throwing on enableBug Fixes
* Fixed Folia / VaultUnlocked servers failing to load DonutAuctionHouse with “Vault isn’t on the server” * Removed harddepend: Vaultso the plugin can enable when only VaultUnlocked is installed1.2.1Donut Auction 1.2.1Jul 10, 2026 Improvements
* Sell confirmation now uses atomic pending-sale transactions with unique IDs so an item is owned by only one state at a time (inventory, pending sale, or active auction) * Confirm, cancel, inventory close, disconnect, and shutdown recovery are idempotent against double-clicks, lag, and repeated callbacks * Cancel and collect actions on existing auctions use operation locks to prevent double item returns * Failed listing validation now safely restores the item (with ground drop if the inventory is full) * Added sampled debug logging for invalid/repeated pending-sale claims (debug.pending-sales)Bug Fixes
* Fixed item duplication when cancelling/ah sellconfirmation (Cancel, GUI close, duration/category re-open, double-click, or disconnect could return the item more than once) * Pending sell items are now returned correctly on player quit and server shutdownConfiguration
*debug.pending-sales(default:false) — whentrue, logs every invalid/repeated pending-sale claim; whenfalse, samples only1.2.0Donut Auction 1.2.0Jun 8, 2026 Quality of Life & Marketplace Expansion Update
Feature 1 — Permission-Based Auction Limits
Configurable permission-based auction limits with highest-permission-wins resolution. New permissions: -donutauction.limit.5(default: true) -donutauction.limit.10-donutauction.limit.25-donutauction.limit.50-donutauction.limit.100-donutauction.limit.unlimited(-1) New command:/ah limit— displays your current limit, active listings, and remaining slots. Config:auction-limits: enabled: true default-limit: 5 permissions: donutauction.limit.10: 10 donutauction.limit.25: 25 donutauction.limit.50: 50 donutauction.limit.100: 100 donutauction.limit.unlimited: -1Feature 2 — Preserve Original Item Lore
New configurable lore system that preserves original item lore from custom item plugins. Lore modes: -APPEND— Adds auction info below existing lore (default) -REPLACE— Replaces lore entirely (legacy behavior) -DISABLED— Does not modify lore at all Config:
Compatible with: MMOItems, Oraxen, ItemsAdder, EcoItems, ExecutableItems, MythicMobs, and any custom item plugin using ItemMeta/NBT.auction-lore: mode: APPEND separator: trueFeature 3 — Fast Buy System
Instant purchase mode that skips the confirmation GUI. New permission:donutauction.fastbuyNew command:/ah fastbuy— toggles fast buy mode. Config:
Behavior: - Normal: Click item → Confirm Purchase → Purchase Complete - Fast Buy: Click item → Purchase Complete - Setting persists across reconnects and server restarts.fast-buy: enabled: true default-state: false require-permission: trueFeature 4 — Fast Sell System
Instant listing mode that uses stored settings. New permission:donutauction.fastsellNew command:/ah fastsell— toggles fast sell mode. Config:
Behavior: - Normal:fast-sell: enabled: true default-state: false require-permission: true/ah sell <price>→ Sell GUI for duration/category selection - Fast Sell:/ah sell <price>→ Listed immediately using last settings - Automatically remembers last duration, category, and price.Feature 5 — Shulker Box Support
Full shulker box support with content preview. Config:
Features: - Preserves all contents, NBT, names, lore, enchantments, colors, and custom metadata. - Right-click any shulker box in the auction to preview its contents. - Read-only preview GUI prevents extraction while listed. - No duplication exploits.shulker-support: enabled: true preview-contents: trueFeature 6 — Modrinth Update Checker
Modern update checker using the Modrinth API. Config:
New permission:update-checker: enabled: true notify-console: true notify-admins: true check-interval-hours: 12donutauction.update.notifyBehavior: - Checks asynchronously, never blocks startup. - Caches results, handles rate limits and API downtime. - Notifies console on enable if update available. - Notifies admins on join if update available.Feature 7 — Auction Slot Expansion
Additional monetization-friendly slot permissions. New permissions: -donutauction.slots.10-donutauction.slots.25-donutauction.slots.50-donutauction.slots.100Config:auction-slots: enabled: true permissions: donutauction.slots.10: 10 donutauction.slots.25: 25 donutauction.slots.50: 50 donutauction.slots.100: 100Performance Improvements
- All database operations now use the plugin's named async executor instead of the default ForkJoinPool. - Operation lock cleanup prevents memory leaks from accumulated auction locks. - Fire-and-forget DB updates now include exception logging. - Search performance optimized with cached plain-text names.Security & Stability Fixes
- CRITICAL: Fixed item duplication exploit where server crash during purchase could duplicate items. - CRITICAL: Fixed item duplication exploit where server crash during cancellation could duplicate items. - CRITICAL: Fixed item duplication exploit where server crash during item collection could duplicate items. - All inventory/economy actions now happen after database persistence succeeds. - Failed purchases now refund money automatically. - Failed cancellations now restore auction state automatically. - Failed collections now restore auction state automatically.New Permissions Summary
| Permission | Description | |---|---| |donutauction.use| Access to the auction house | |donutauction.sell| Allows selling items | |donutauction.admin| Administrative controls | |donutauction.fastbuy| Toggle fast buy mode | |donutauction.fastsell| Toggle fast sell mode | |donutauction.update.notify| Update notifications | |donutauction.limit.5| 5 listing limit | |donutauction.limit.10| 10 listing limit | |donutauction.limit.25| 25 listing limit | |donutauction.limit.50| 50 listing limit | |donutauction.limit.100| 100 listing limit | |donutauction.limit.unlimited| Unlimited listings | |donutauction.slots.10| 10 slot expansion | |donutauction.slots.25| 25 slot expansion | |donutauction.slots.50| 50 slot expansion | |donutauction.slots.100| 100 slot expansion |New Commands Summary
| Command | Description | |---|---| |/ah limit| View your auction limit and remaining slots | |/ah fastbuy| Toggle fast buy mode | |/ah fastsell| Toggle fast sell mode |Migration Notes from 1.1.0 → 1.2.0
- Existing configs are safely updated with new defaults on startup. - A newplayer_preferencestable is created automatically for fast buy/sell settings. - Existingdonutcore.*permissions continue to work alongside newdonutauction.*permissions. - Existing auction data is fully compatible — no data migration required. - The lore system defaults toAPPENDmode. Set toREPLACEto preserve 1.1.0 behavior.1.1.0Donut Auction 1.1.0Apr 28, 2026 Minimum Auction Price
A new configurable minimum listing price has been added to reduce auction spam.New config options
auction: min-price: 10 messages: price-below-min: '&cMinimum auction price is &6%min_price%&c.'1.0.3Donut Auction 1.0.3Apr 4, 2026 - Greatly reduced file size.1.0.2Donut Auction 1.0.2Apr 3, 2026 - Resolved an issue where clickingNext Pageon/ahalways returned to page 1.1.0.1Donut Auction 1.0.1Mar 18, 2026 - fixed a bug that caused the filter not to refresh on close.1.0.0Donut Auction House 1.0.0Mar 7, 2026 - First Release
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta
LuckPerms
A permissions plugin/mod for Minecraft servers.
2.8MSueta
ItemSwapper
Inventory update concept for hotswapping items.
2.1MSueta
SkinsRestorer
🎨 Ability to restore/change skins on servers! (Offline and Online Mode)
1.6MSueta