Sueta

Donut Auction

2.0.0

a Donut Auction House plugin for Paper/Folia servers inspired by DonutSMP.

·Plugin
  1. 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 price shows 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 collect instead 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 (also m, b, t and 1,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. Cancellable AuctionPreListEvent, AuctionPrePurchaseEvent and AuctionPreBidEvent. Asynchronous AuctionListedEvent, AuctionPurchasedEvent, AuctionBidEvent, AuctionWonEvent, AuctionEndedEvent and AuctionCancelledEvent. - 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 in plugins/DonutAuctionHouse/logs/transactions-YYYY-MM-DD.log. - Messages. MiniMessage, & codes and &#RRGGBB hex 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 named donutauction. 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.yml and messages.yml keep 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. - The auctions table gains columns for tax, auctions, stored names and the collection, plus a small auction_meta table. 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, bypass donutauction.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 price and the console commands, and checks PlaceholderAPI. See tools/smoke/README.md.
    98 downloads
  2. 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 as NaN, 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-unsupported CREATE INDEX IF NOT EXISTS syntax. 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 existing auctions table and adds one purchase_completed flag. 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 /ah alias 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.
    7486 downloads
  3. 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 show page/totalPages and 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 existing plugins/DonutAuctionHouse/ data. 2. Restart the server (or /ah reload after replacing the jar if you only need new messages.yml keys; a restart is still recommended).
    5883 downloads
  4. 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 existing plugins/DonutAuctionHouse/ data. 2. Restart the server.
    528 downloads
  5. 1.5.0Aug 27, 2026
    # DonutAuctionHouse v1.5.0 ### New Features * Optional Redis listing notifications for multi-server networks (sync.redis in config.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 (default 3, MySQL only; 0 disables). * 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 existing plugins/DonutAuctionHouse/ data. 2. For a network: set storage.type: MYSQL on every node to the same database. 3. Optional: set sync.redis.enabled: true on every node with the same channel. 4. Restart each node. Confirm a buy on server B removes the listing from /ah on server A and a second buy is refused.
    6640 downloads
  6. 1.4.0Aug 19, 2026
    - bStats metrics (plugin ID 33523), disable with metrics.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 with donutauction.update.notify still see update notices on join when a newer release exists - Chat search uses Bukkit AsyncPlayerChatEvent; scheduler falls back when region schedulers are absent
    1658 downloads
  7. 1.3.1Aug 10, 2026

    DonutAuctionHouse v1.3.1

    New Features
    * None
    Improvements
    * Full messages.yml translation support for GUI titles, button labels, lore, chat messages, command text, and status labels * /ah reload now reloads messages.yml alongside config.yml * Prefix and minimum-price messages can live in messages.yml (legacy config.yml keys still work)
    Bug Fixes
    * None
    Configuration
    * New messages.yml — edit and /ah reload to translate the plugin without recompiling * Existing config.yml messages.prefix and messages.price-below-min remain supported as fallbacks
    Compatibility
    * Drop-in update from 1.3.0 * Folia-supported unchanged * No database migration required * No command or permission changes
    Upgrade Notes
    1. Replace the jar with DonutAuctionHouse-1.3.1.jar 2. Restart the server (or /ah reload after first start to generate messages.yml) 3. Edit plugins/DonutAuctionHouse/messages.yml to translate player-facing text
    1879 downloads
  8. 1.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 listing
    Improvements
    * 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 sell and the auction GUI button * Maven publish workflow supports target/ jars with Paper/Folia/Bukkit loader tags
    Bug 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 itself
    Configuration
    * None
    Compatibility
    * 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 changes
    Upgrade Notes
    1. Install DonutAuctionHouse-1.3.0.jar (replace 1.2.2) 2. Restart the server 3. Open /ah and use the emerald button or /ah sell <price> to list items from your hand
    3332 downloads
  9. 1.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 enable
    Bug Fixes
    * Fixed Folia / VaultUnlocked servers failing to load DonutAuctionHouse with “Vault isn’t on the server” * Removed hard depend: Vault so the plugin can enable when only VaultUnlocked is installed
    81 downloads
  10. 1.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 sell confirmation (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 shutdown
    Configuration
    * debug.pending-sales (default: false) — when true, logs every invalid/repeated pending-sale claim; when false, samples only
    4739 downloads
  11. 1.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: -1
    Feature 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:
    auction-lore:
      mode: APPEND
      separator: true
    Compatible with: MMOItems, Oraxen, ItemsAdder, EcoItems, ExecutableItems, MythicMobs, and any custom item plugin using ItemMeta/NBT.
    Feature 3 — Fast Buy System
    Instant purchase mode that skips the confirmation GUI. New permission: donutauction.fastbuy New command: /ah fastbuy — toggles fast buy mode. Config:
    fast-buy:
      enabled: true
      default-state: false
      require-permission: true
    Behavior: - Normal: Click item → Confirm Purchase → Purchase Complete - Fast Buy: Click item → Purchase Complete - Setting persists across reconnects and server restarts.
    Feature 4 — Fast Sell System
    Instant listing mode that uses stored settings. New permission: donutauction.fastsell New command: /ah fastsell — toggles fast sell mode. Config:
    fast-sell:
      enabled: true
      default-state: false
      require-permission: true
    Behavior: - Normal: /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:
    shulker-support:
      enabled: true
      preview-contents: true
    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.
    Feature 6 — Modrinth Update Checker
    Modern update checker using the Modrinth API. Config:
    update-checker:
      enabled: true
      notify-console: true
      notify-admins: true
      check-interval-hours: 12
    New permission: donutauction.update.notify Behavior: - 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.100 Config:
    auction-slots:
      enabled: true
      permissions:
        donutauction.slots.10: 10
        donutauction.slots.25: 25
        donutauction.slots.50: 50
        donutauction.slots.100: 100
    Performance 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 new player_preferences table is created automatically for fast buy/sell settings. - Existing donutcore.* permissions continue to work alongside new donutauction.* permissions. - Existing auction data is fully compatible — no data migration required. - The lore system defaults to APPEND mode. Set to REPLACE to preserve 1.1.0 behavior.
    7560 downloads
  12. 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.'
    6971 downloads
  13. 1.0.3Donut Auction 1.0.3Apr 4, 2026
    - Greatly reduced file size.
    2236 downloads
  14. 1.0.2Donut Auction 1.0.2Apr 3, 2026
    - Resolved an issue where clicking Next Page on /ah always returned to page 1.
    135 downloads
  15. 1.0.1Donut Auction 1.0.1Mar 18, 2026
    - fixed a bug that caused the filter not to refresh on close.
    946 downloads
  16. 1.0.0Donut Auction House 1.0.0Mar 7, 2026
    - First Release
    521 downloads

Similar projects

Plugin →