Sueta

Donut Orders

2.0.0

A player-driven buy-order marketplace.

·Plugin
  1. 2.0.0latest2 days ago

    DonutOrders 2.0.0: The Supply Update

    Supported platforms: Paper, Folia and Purpur, Minecraft 1.20.1 through 26.3 (one jar). Plain Spigot is no longer supported: the plugin needs Paper's API and says so on startup. Paper is a drop-in replacement. A full rebuild of DonutOrders. Every order is now a conditional database update that only one click, thread or server can win, and money moves only after the database has decided. Tested end to end on 14 Paper and Folia servers from 1.20.1 to 26.3, and on two servers sharing one MySQL database.

    The board

    - Sorts: money per item, recently listed, most delivered, most paid, ending soon. - Nine categories, search by item, enchantment or player (/orders diamond), and a "what I can deliver" filter. - /orders view <player>. Each order shows the buyer, the price each, a progress bar, what is still wanted, what was paid out and the time left.

    Delivering and selling

    - The delivery menu takes only items the order accepts, shows the payout (and tax) as you fill it, and has an "add from inventory" button. - Shift-click an order on the board to deliver straight from your inventory. - Shulker boxes are opened: the order takes what it wants, and the box comes back with the rest. - `/orders sell` and `/orders sell all` sell into the best-paying orders first, after a confirmation that shows the payout. - Anything an order did not take comes back. What does not fit goes to your mailbox; nothing is ever dropped.

    Creating orders

    - An item picker with every item of your server, by category or search. - "Order the item in your hand" for potions, goat horns, custom items and anything with variants. - Enchanted books: an enchantment and level picker from the server's registry. - The setup menu: - amount buttons, and typed amounts and prices (2.5k, 1m and 3b work); - a duration picker, and the full cost with fee and balance after; - "outbid the best order" and "use the average"; - price insight (average, range, last price, volume and open demand) and a warning when the price is far above the market. - /order create <item|hand> <amount> <price> [time] creates without menus.

    Your orders

    - Collect delivered items any time; only whole stacks that fit are handed over. Collect all in one click. - Change an order: add items, raise or lower the price, add time. The money difference is charged or refunded. - Cancel for an instant refund of the money still held. Delivered items stay collectable. - A mailbox, history of finished orders and of your deliveries, and your lifetime totals.

    Notifications

    - Delivery alerts to the buyer, gathered per order (one line for a burst of deliveries), in chat, the action bar or both. - A title and sound when an order fills. - Book orders name their enchantment everywhere: "Enchanted Book (Mending)". - A "while you were away" summary on join: deliveries, filled orders, refunds. - Works across servers: a buyer on another server of the network is told there. - /order alerts mutes delivery alerts and new-order announcements. - Clickable new-order announcements, with a minimum value and a cooldown.

    Economy and rules

    - Creation fee (flat, percent, cap, refund on cancel, exempt permission) and seller tax with permission tiers. Both can pay into an account. - Price limits globally and per material or book, a cap on amount and on order value, and a creation cooldown. - Open-order limits by permission (donutorders.limit.<n>) or LuckPerms group. - Duration options with permission caps. - Blacklist with wildcards, names, lore, model data and plugin data; an optional whitelist; disabled worlds and game modes. - Matching rules for renamed, worn, enchanted and custom items, book levels, and custom-item ids (Nexo, Oraxen). - Same-address deliveries: off, alert staff and Discord, or block.

    Staff and integrations

    - Shift-right-click to cancel any order from the board (refunded, with an optional reason the buyer sees). - /orderadmin view, history, cancel, purge, info, freeze and unfreeze. - Server orders: unlimited or fixed demand paid by the server. - Discord webhooks (created, delivered, filled, cancelled, expired, suspicious). - PlaceholderAPI (17 placeholders, including best and average prices per material). - A developer API with cancellable events and sell routing for /sell plugins. - A daily transaction log and bStats. - MySQL or MariaDB for several servers, with optional Redis for instant updates. Every message is in messages.yml (MiniMessage, & codes, hex, optional small caps).

    Fixed from 1.x

    - Sellers were paid before the order was updated, so a race could pay twice. Payment now follows the database update. - Stash items beyond 54 slots were discarded. Delivered items are now stored without limit. - Expired orders refunded their money only when the buyer collected the stash. Expiry now refunds at once, and so do 1.x orders it imports. - Several delivery-menu and close-event paths could return items twice (issue #5 was fixed in 1.9.1). The new menu hands items over exactly once, through logouts, deaths and shutdowns.

    Upgrading from 1.x

    1. Back up plugins/DonutOrders/ (and your MySQL database). 2. Replace the jar and restart. 3. The plugin carries your data and settings over: - Orders and stash items are imported once. The 1.x tables are left untouched. - Open orders keep their held money. Expired orders whose money was never refunded are refunded once. - The 1.x config.yml, messages.yml and items.yml move to legacy-1.x/. Limits, rank limits, expiry, tax, broadcast, database and the item list (as whitelist.materials) are written into the new config.yml. - Messages start from the 2.0 defaults. 4. The permissions donutorders.use, donutorders.admin and donutorders.limit.<n> and the placeholder %donutorders_order_limit% keep working.
    40 downloads
  2. 1.9.24 weeks ago

    Patch notes

    1.9.2

    - Added Minecraft 26.3 support (Paper / Folia / Spigot / Purpur); existing 1.20.6, 1.21.x, 26.1.x, and 26.2 support is unchanged - Compiled against Paper API 26.3.build.49-alpha (latest published 26.3 API jar); plugin.yml api-version stays 1.20 so older servers still load - Tested against Paper 26.3 build #133 (ALPHA), Paper 26.2 build #129, and Paper 1.20.6 build #151

    1.9.1

    - Fixed delivery item duplication when cancelling after proceeding from the deliver-items box (GitHub #5): cancel and GUI close no longer both return the same snapshot - Delivery items are returned exactly once on cancel, ESC-close, disconnect, death, and plugin disable; double-click confirm/cancel cannot duplicate or lose the box contents

    1.9.0

    - Split commands: /order (your active orders), /order history, /orders (public market), /orderadmin (reload, history, simulate) - Order history GUI for completed, expired, cancelled, and claimed orders - /orderadmin reload works from console; admin history view for any player

    1.8.1

    - New-order chat input (amount, price, cancel keyword) now reads Paper's Adventure chat event so integers are accepted on 1.20.1–26.2 - Amount/price parsing ignores color codes and commas; whole values like 64.0 work - Folia no longer treats a retired entity callback as cancel while you are typing a number

    1.8.0

    - Added bStats metrics (plugin ID 33559) - Hardened Modrinth update check for [donut-orders](https://modrinth.com/plugin/donut-orders): pick newest release by date, strip version suffixes, warn in console, notify donutorders.admin on join (update-check.notify-ops-on-join) - Confirmed support matrix: Bukkit / Spigot / Paper / Purpur / Folia on Minecraft 1.20.1–26.2 - Relicensed to Apache-2.0; added OSS contributor docs; removed committed build/AI clutter

    1.7.0

    - New-order chat broadcast to other online players (orders.broadcast-on-create, order-created-broadcast) - Folia-safe: recipients messaged on their entity thread

    1.6.1

    - Fixed empty enchanted-book Select Enchant picker on modern Paper - Enchant list cache clears on /orders admin reload

    1.6.0

    - MySQL storage backend and cross-server order sync - updated_at tracking and optimistic updates to reduce duplicate payouts

    1.5.1

    - Folia enable crash fix (runAsync / scheduler hardening)

    1.5.0

    - Enchanted book orders, VIP order limits, New Order item search

    1.3.1

    - Fixed New Order picker Previous page always returning to page 1
    8083 downloads
  3. 1.9.14 weeks ago

    Patch notes

    1.9.1

    - Fixed delivery item duplication when cancelling after proceeding from the deliver-items box (GitHub #5): cancel and GUI close no longer both return the same snapshot - Delivery items are returned exactly once on cancel, ESC-close, disconnect, death, and plugin disable; double-click confirm/cancel cannot duplicate or lose the box contents

    1.9.0

    - Split commands: /order (your active orders), /order history, /orders (public market), /orderadmin (reload, history, simulate) - Order history GUI for completed, expired, cancelled, and claimed orders - /orderadmin reload works from console; admin history view for any player

    1.8.1

    - New-order chat input (amount, price, cancel keyword) now reads Paper's Adventure chat event so integers are accepted on 1.20.1–26.2 - Amount/price parsing ignores color codes and commas; whole values like 64.0 work - Folia no longer treats a retired entity callback as cancel while you are typing a number

    1.8.0

    - Added bStats metrics (plugin ID 33559) - Hardened Modrinth update check for [donut-orders](https://modrinth.com/plugin/donut-orders): pick newest release by date, strip version suffixes, warn in console, notify donutorders.admin on join (update-check.notify-ops-on-join) - Confirmed support matrix: Bukkit / Spigot / Paper / Purpur / Folia on Minecraft 1.20.1–26.2 - Relicensed to Apache-2.0; added OSS contributor docs; removed committed build/AI clutter

    1.7.0

    - New-order chat broadcast to other online players (orders.broadcast-on-create, order-created-broadcast) - Folia-safe: recipients messaged on their entity thread

    1.6.1

    - Fixed empty enchanted-book Select Enchant picker on modern Paper - Enchant list cache clears on /orders admin reload

    1.6.0

    - MySQL storage backend and cross-server order sync - updated_at tracking and optimistic updates to reduce duplicate payouts

    1.5.1

    - Folia enable crash fix (runAsync / scheduler hardening)

    1.5.0

    - Enchanted book orders, VIP order limits, New Order item search

    1.3.1

    - Fixed New Order picker Previous page always returning to page 1
    481 downloads
  4. 1.9.0Aug 28, 2026
    - Split commands: /order (your active orders), /order history, /orders (public market), /orderadmin (reload, history, simulate) - Order history GUI for completed, expired, cancelled, and claimed orders - /orderadmin reload works from console; admin history view for any player
    5721 downloads
  5. 1.8.1Aug 24, 2026

    DonutOrders v1.8.1

    New Features
    * None.
    Improvements
    * Order creation chat input uses Paper Adventure AsyncChatEvent (legacy Bukkit chat still used when that event is absent). * Amount and price parsing accepts trimmed values, commas, and whole decimals such as 64.0. * The chat-cancel-keyword from messages.yml is matched after stripping color codes.
    Bug Fixes
    * Typing an amount or price (or the cancel keyword) while creating an order is no longer ignored on modern Paper/Folia.
    Configuration
    * No config schema change. Existing chat-cancel-keyword still applies.
    Compatibility
    * Paper and Folia, Minecraft 1.20.1 through 26.2, Java 17.
    Upgrade Notes
    1. Replace the jar. Keep plugins/DonutOrders/ config and data. 2. Restart, open /orders, create an order, type a whole number for amount then a price.
    792 downloads
  6. 1.8.0Aug 21, 2026

    Patch notes

    1.8.0

    - Added bStats metrics (plugin ID 33559) - Hardened Modrinth update check for [donut-orders](https://modrinth.com/plugin/donut-orders): pick newest release by date, strip version suffixes, warn in console, notify donutorders.admin on join (update-check.notify-ops-on-join) - Confirmed support matrix: Bukkit / Spigot / Paper / Purpur / Folia on Minecraft 1.20.1–26.2 - Relicensed to Apache-2.0; added OSS contributor docs; removed committed build/AI clutter

    1.7.0

    - New-order chat broadcast to other online players (orders.broadcast-on-create, order-created-broadcast) - Folia-safe: recipients messaged on their entity thread

    1.6.1

    - Fixed empty enchanted-book Select Enchant picker on modern Paper - Enchant list cache clears on /orders admin reload

    1.6.0

    - MySQL storage backend and cross-server order sync - updated_at tracking and optimistic updates to reduce duplicate payouts

    1.5.1

    - Folia enable crash fix (runAsync / scheduler hardening)

    1.5.0

    - Enchanted book orders, VIP order limits, New Order item search

    1.3.1

    - Fixed New Order picker Previous page always returning to page 1
    641 downloads
  7. 1.7.01.7.0 · paperAug 12, 2026

    DonutOrders v1.7.0

    New Features
    New-order chat broadcast* — when a player creates a buy order, all other online players see a chat announce (item, amount, price). The creator still gets the private order-created confirmation only.
    Configuration
    * orders.broadcast-on-create (default true) — set to false to disable the public announce. * order-created-broadcast in messages.yml — {0} buyer, {1} item, {2} amount, {3} price per item. Missing keys fall back to jar defaults on /orders admin reload.
    Compatibility
    * Same loaders as 1.6.1 (Paper / Folia / Purpur family). Folia-safe: each recipient is messaged on their entity thread.
    Upgrade Notes
    1. Replace the DonutOrders jar with 1.7.0. Keep your existing plugins/DonutOrders/ folder. 2. Optional: add broadcast-on-create: true under orders: in config.yml, and order-created-broadcast to messages.yml, then /orders admin reload. If you skip this, in-code / jar defaults still enable the announce. 3. Confirm by creating an order on one account and checking chat on another.
    1726 downloads
  8. 1.6.1Aug 10, 2026

    DonutOrders v1.6.1

    Bug Fixes
    Empty enchant picker* — New Order → Enchanted Book no longer opens an empty Select Enchant GUI. Modern Paper returns false from Enchantment#canEnchantItem for enchanted books; the picker now builds the list via stored-enchant checks so vanilla (and storeable) enchants appear again.
    Improvements
    * Enchant list cache clears on /orders admin reload.
    Compatibility
    * Same loaders as 1.6.0 (Paper / Folia / Purpur family). Drop-in jar replace.
    Upgrade Notes
    1. Replace the DonutOrders jar with 1.6.1. 2. Restart or use your preferred hot-swap flow, then open New Order → Enchanted Book to confirm the enchant list populates.
    352 downloads
  9. 1.6.0Aug 7, 2026

    DonutOrders v1.6.0

    New Features
    MySQL storage backend* — set database.type: mysql in config.yml so multiple servers share one database Cross-server order sync* — orders created or fulfilled on one server appear on all servers sharing the MySQL database (polls every database.sync-interval-seconds, default 5)
    Improvements
    * updated_at column on orders for change tracking and safe multi-server merges * Optimistic DB updates on fulfill/collect prevent duplicate payouts when two servers race * Critical paths refresh the order from the database before mutating
    Bug Fixes
    * None
    Configuration
    database:
      type: mysql          # sqlite (default) or mysql
      sync-interval-seconds: 5
      mysql:
        host: localhost
        port: 3306
        database: donutorders
        username: donutorders
        password: ""
        pool-size: 10
    Compatibility
    * SQLite remains the default — no config change required for single-server setups * Existing SQLite databases auto-migrate (updated_at column added on startup) * Drop-in jar replacement; restart all network servers after switching to MySQL
    Upgrade Notes
    1. For cross-server: create a MySQL database, grant access, set database.type: mysql on every server 2. Replace the jar with DonutOrders-1.6.0.jar on all servers 3. Restart servers — console should show (MySQL backend) when configured correctly 4. Verify an order placed on server A appears in /orders on server B within a few seconds
    612 downloads
  10. 1.5.1Aug 4, 2026

    DonutOrders v1.5.1

    New Features
    * None
    Improvements
    * Folia async scheduling hardened — runAsync always uses Paper's AsyncScheduler on regionalised servers; legacy BukkitScheduler async calls are never used on Folia * Startup load falls back to synchronous DB read if async scheduling is unavailable, then continues enable on the global thread * Scheduled task failures are logged instead of crashing the server thread
    Bug Fixes
    Fixed Folia enable crash* (UnsupportedOperationException from CraftScheduler.runTaskAsynchronously during StorageManager.loadAll) on Folia 1.21.x * All scheduler entry points (runAtEntity, runGlobal, runGlobalRepeating, runAsync, etc.) now catch UnsupportedOperationException and route to the correct Paper/Folia scheduler as a safety net
    Configuration
    * None
    Compatibility
    * Drop-in update from 1.5.0 (and older 1.3.x / 1.4.x builds still on broken Folia async scheduling) * folia-supported: true unchanged in plugin.yml * No database migration required * Tested build target: Paper/Folia 1.20.6+ API; runtime tested on JDK 21
    Upgrade Notes
    1. Replace the jar with DonutOrders-1.5.1.jar 2. Restart the server (recommended over hot-reload for scheduler changes) 3. Confirm console shows Folia detected — using regionised schedulers. followed by Enabled successfully with no UnsupportedOperationException 4. Run /orders on a Folia 1.21.4 server to verify the marketplace opens
    605 downloads
  11. 1.5.0Donut Orders 1.5.0Jul 29, 2026

    DonutOrders v1.5.0

    New Features
    Enchanted book orders* — New Order → Enchanted Book opens an enchant picker, then a level picker (Sharpness, Efficiency, Unbreaking, and other vanilla book enchants). Listings show names like Sharpness V Enchanted Book; sellers must deliver the exact enchanted book VIP order limits* — per-rank and per-permission active order caps via OrderLimitManager (wired into order creation, join/quit cache, LuckPerms updates, and PlaceholderAPI) Item search in New Order picker* — compass button opens a chat search; filter persists across pagination; clear-search button when a filter is active
    Improvements
    * /orders admin reload refreshes cached order limits for all online players * New Order GUI title shows the active search filter when filtering * Order list / delivery / wrong-item messages use enchant-aware item names
    Configuration
    * ENCHANTED_BOOK added to default items.yml allowed list * orders.default-limit — default active order cap (default: 2) * orders.max-per-player — legacy alias kept in sync with default-limit * rank-limits — per-LuckPerms-group caps (e.g. default: 2, vip: 5) * Optional permission override: donutorders.limit.<n> (highest wins) * New messages.yml keys for enchant picker and New Order search UI
    Compatibility
    * Drop-in update from 1.3.x / 1.4.x * Folia-supported unchanged * No database migration required Soft-depends on LuckPerms and PlaceholderAPI* (optional; features degrade gracefully when absent) * Placeholder: %donutorders_order_limit%
    Upgrade Notes
    1. Replace the jar with DonutOrders-1.5.0.jar 2. Restart the server (or reload after reviewing config) 3. If upgrading an existing install, add ENCHANTED_BOOK under allowed-items in items.yml, then /orders admin reload 4. Review config.yml — add or adjust rank-limits if you use VIP ranks:
       rank-limits:
         default: 2
         vip: 5
       
    Or grant LuckPerms permission donutorders.limit.5 instead of/in addition to rank limits. 5. Ensure VIP players have LuckPerms group vip (maps to group.vip) or the permission node above. 6. Test /orders → New Order → Enchanted Book + Search (compass), and confirm VIP players can hold more active orders than default.
    1096 downloads
  12. 1.3.1Donut Orders 1.3.1Jul 28, 2026
    Improvements
    * New Order item picker Previous/Next now share the same Folia-safe open path
    Bug Fixes
    Fixed Previous* in the New Order item picker always returning to page 1 instead of the previous page
    249 downloads
  13. 1.3.0Donut Orders 1.3.0Jul 10, 2026
    New Features
    * Full translation support for the entire player-facing interface via messages.yml. * GUI titles, buttons, item names, lore, status labels, pagination text, chat prompts, success/error messages, and order expiry formatting are all configurable without recompiling. * New MessageHelper system with color codes (& and #RRGGBB), positional placeholders ({0}, {1}, …), and named placeholders ({item}, {buyer}, {price}, etc.). * Translable chat cancel keyword via chat-cancel-keyword (default: cancel).
    Improvements
    * Missing translation keys safely fall back to English defaults shipped in the jar. * /orders admin reload reloads messages.yml (and config) so translations update without a full restart. * Order cancel refund message now shows the correct refund amount.
    Configuration
    * Expanded plugins/DonutOrders/messages.yml with organized sections: general, chat, orders, delivery, collect, status, time, buttons, and all GUI screens. * Existing servers keep their current messages.yml; new keys fall back to jar defaults until added or the file is regenerated.
    2917 downloads
  14. 1.2.1Donut Orders 1.2.1Jun 18, 2026
    Bug Fixes
    * Fixed plugin failing to enable on Folia and Folia-based servers (e.g. Canvas) with UnsupportedOperationException during async database load. * Async database I/O and network tasks now use Paper's AsyncScheduler on Folia instead of the deprecated Bukkit async scheduler.
    571 downloads
  15. 1.2.0Donut Orders 1.2.0Jun 10, 2026
    New Features
    * Added Shulker Box delivery support — matching items inside shulkers count toward order fulfillment. * Shulker contents are scanned from shulkers placed in the delivery GUI and from shulkers anywhere in the seller's inventory. * Added items.yml for configuring allowed order materials separately from config.yml. * Added Modrinth update check on plugin startup (update-check.enabled in config.yml). * Added donutorders as a command alias for /orders.
    Improvements
    * Allowed materials are validated server-side when creating orders (prevents GUI bypass). * Invalid material names in items.yml log warnings instead of crashing the plugin. * /orders admin reload now reloads config.yml, messages.yml, and items.yml.
    4292 downloads
  16. 1.1.0Donut Orders 1.1.0Jun 8, 2026
    New Features
    * Added permission-based order limits via donutorders.limit.<n> nodes (e.g. donutorders.limit.5, donutorders.limit.10). * Added support for rank-specific maximum active orders through optional rank-limits configuration. * Added PlaceholderAPI support: %donutorders_order_limit% returns the player's currently applied limit. * Added /orders limit <player> admin command (alias: /donutorders limit <player>).
    Improvements
    * Added a caching system for permission-based limit lookups to avoid scanning permissions on every order creation. * Limit cache refreshes automatically on player join, config reload, and LuckPerms permission recalculation. * Order limit reached messages are now configurable via messages.yml.
    Configuration
    * Added orders.default-limit as an optional config key (takes priority over legacy orders.max-per-player when set). * Added optional rank-limits configuration section for group-based fallback limits. * Added messages.order-limit-reached with %limit% and %active_orders% placeholders.
    Permissions
    * donutorders.admin.limit — allows use of /orders limit <player>. * donutorders.limit.<n> — grants a custom maximum active order count.
    321 downloads
  17. 1.0.3Donut Orders 1.0.3May 22, 2026
    - Fixed Fill Order GUI item movement issue - Players can now manually move items into order fill slots - Improved Bedrock / Pocket Edition compatibility - Shift-click is no longer required to fill orders - Protected GUI slots still block invalid interactions - Kept server-side validation and anti-dupe protections intact

    Critical Security Patch

    - Item Duplication Exploit Fixed: Completely resolved a critical exploit where delayed or replayed ClickSlot inventory packets could trigger order collection multiple times before the server-side database state could update. - WaterTight Concurrency Protections: - Implemented an atomic, in-memory compare-and-set claim lock (tryLockClaim / unlockClaim) to guarantee that concurrent stash claims from replayed/spam packets fail immediately. - Added a state-based collection lifecycle: orders now transition to PENDING upon completion/cancellation/expiration and to CLAIMED immediately when collection starts in-memory, ensuring absolute claim idempotency. - Implemented automatic SQLite database schema migration (claimed_by and claimed_at columns) to persist claiming information and protect against exploits across server restarts or hot reloads. - Added tick-based packet rate-limiting at the listener level to reject rapid click spam (max 2 clicks per tick) and click replays targeting the exact same slot in a single tick.

    Improvements & Lifecycle Hardening

    - Safe Expiry Flow: Redesigned the order expiration checker to safely transition orders to PENDING (pending collection) rather than performing immediate, unsafe synchronous refunds. Players can now safely retrieve their expired order refunds from their personal stash GUI at any time. - Thread-Safety & Folia Compatibility: Guaranteed thread-safe SQLite operations by usingHikariCP WAL-mode queries dispatched asynchronously and synchronizing on player entity threads for Vault deposits and item insertions.

    Admin & Testing Command

    - Concurrency Simulator: Registered the /orders admin simulate command (requires donutorders.admin permission). This executes a live high-latency packet replay and concurrent race simulation in SQLite, spawning 10 concurrent threads racing to collect the exact same stash at the exact same millisecond. Reports back in chat showing exactly 1 successful claim and 9 rejections.
    1922 downloads
  18. 1.0.1Donut Orders 1.0.1May 3, 2026
    - Fixed a critical issue where items could duplicate when placing them in order slots - Resolved a bug causing items to return to the sender while still being delivered to the receiver - Improved inventory handling to prevent unintended item cloning - Fixed items being silently lost when clicking Cancel in the delivery confirmation screen - Fixed items being lost when pressing ESC to close the delivery confirmation screen
    1739 downloads
  19. 1.0.0Donut Orders 1.0.0Apr 8, 2026
    - init release
    1102 downloads

Similar projects

Plugin →