
Donut Orders
A player-driven buy-order marketplace.
- Загрузки
- 17K
- Подписчики
- 12
- Обновлён
- 21 августа 2026 г.
- Лицензия
- Apache-2.0
Опубликован 8 апреля 2026 г.
DonutOrders is a standalone buy-order marketplace plugin for Paper and Folia servers running Minecraft 1.20+. Players can post orders for items they want to buy, escrow the required funds automatically, and let other players fulfill those orders for instant payment. No chest shops and no admin-created marketplace are required — everything is handled through a clean GUI with Vault-compatible economy integration.
Features
| Feature | Description |
|---|---|
| Player Buy Orders | Players can create public buy orders for allowed materials with custom quantities and prices |
| Escrow System | Funds are withdrawn when an order is created so buyers cannot spend money already committed to an order |
| Marketplace Browser | Sellers can browse active orders through a clean paginated GUI |
| Instant Seller Payments | Sellers receive payment immediately when valid items are delivered |
| Partial Order Fills | Orders can be fulfilled gradually by one or multiple deliveries |
| Virtual Stash | Purchased items are stored safely until the buyer is ready to collect them |
| Vault Economy Support | Works with Vault-compatible economy plugins such as EssentialsX, CMI, and other supported providers |
| Configurable Tax | Optional seller payout tax can be used as an economy sink |
| SQLite & HikariCP | Persistent local SQLite storage with HikariCP connection management |
| Paper & Folia Support | Designed for modern Paper and Folia servers with region-aware scheduling |
| Async Database Operations | Database reads and writes are handled asynchronously to avoid blocking server threads |
| Customizable Experience | Configure order limits, expiry duration, allowed materials, messages, colors, and marketplace behavior |
How It Works
DonutOrders creates a player-driven marketplace centered around buy orders rather than traditional chest shops or item listings.
The process is simple:
- Buyer opens
/orders, selects New Order, chooses an item, and enters the quantity and price-per-unit through chat prompts. - The required funds are immediately placed into escrow.
- Sellers browse active orders, select one, and deliver matching items through the delivery GUI.
- Sellers are paid instantly for accepted items.
- Purchased items are stored in the buyer's personal stash until collected.
- Unfilled orders expire automatically after the configured duration, refunding any remaining escrow balance.
Buyer Experience
Buyers can create and manage orders directly through the GUI.
Buyer Features
- Post buy orders for materials allowed by the server
- Choose the desired quantity
- Set a price per item
- Track Active, Completed, Expired, and Cancelled orders
- View order progress and remaining quantity
- Cancel active orders
- Receive exact refunds for unspent escrow funds
- Collect delivered items from a personal virtual stash
- Keep delivered items safe even when the player's inventory is full
When collecting stash items, anything that cannot fit in the player's inventory is safely dropped at their feet.
Seller Experience
Sellers can browse active demand across the server and fulfill orders without creating their own shop.
Seller Features
- Browse all active orders in a paginated marketplace
- Select an order to view its requirements
- Deliver items through a dedicated 45-slot input GUI
- Receive payment per accepted item
- Partially fulfill orders
- Deliver only as much as they want
- Automatically receive excess items back
- Receive immediate feedback when an incompatible item is inserted
The delivery interface only accepts the material requested by the selected order.
Escrow & Economy
DonutOrders integrates with Vault and a compatible economy provider.
When a buyer creates an order, the required funds are withdrawn immediately and reserved for that order.
This provides:
- Reliable seller payouts
- Protection against buyers spending committed funds
- Exact cancellation refunds
- Exact expiry refunds
- Per-item seller payments
- Optional configurable seller tax
- Support for common Vault-compatible economy providers
The optional tax is disabled by default and can be used as an economy sink when enabled.
Order Management
Orders move through several states during their lifecycle.
Order States
- Active — Available for sellers to fulfill
- Completed — Requested quantity has been fully delivered
- Expired — Order reached its configured expiry time
- Cancelled — Buyer manually cancelled the order
Buyers can view order details, progress, price, expiry information, and stash status from the GUI.
Virtual Stash
Delivered items do not require the buyer to be online or have free inventory space.
Instead, DonutOrders stores purchased items in a personal virtual stash.
The stash system provides:
- Safe server-side item storage
- Collection at the buyer's convenience
- Protection when the player's inventory is full
- Overflow handling during collection
- Persistent access to items from completed or partially fulfilled orders
Marketplace GUI
DonutOrders uses inventory-based interfaces to keep marketplace interaction simple.
| Screen | Purpose |
|---|---|
| Your Orders | View personal buy orders, status, stash, and cancellation options |
| New Order | Choose an item and begin creating a new buy order |
| Browse Market | Browse active orders posted by players |
| Deliver Items | Place requested items into a 45-slot delivery grid |
| Confirm Delivery | Review items before completing a delivery |
| Order Detail | View progress, price, expiry, and collection options |
| Collect Stash | Collect delivered items stored for the buyer |
Performance & Safety
DonutOrders is designed around modern server performance and safe marketplace transactions.
The plugin includes:
- Asynchronous database reads and writes
- Region-aware Folia scheduling
- Main-thread-safe Paper operation
- Server-side delivery serialization
- Anti-duplication protection
- Safe excess-item returns
- Escrow-backed transactions
- Persistent SQLite storage
- HikariCP connection management
- Shaded and relocated dependencies to reduce plugin conflicts
Concurrent delivery attempts against the same order are serialized server-side to help prevent duplication and transaction conflicts.
Configuration
DonutOrders can be customized for different server economies and marketplace styles.
Configurable options include:
- Maximum active orders per player
- Default order expiry duration
- Seller tax percentage
- SQLite database filename
- Allowed materials
- Player-facing messages
- GUI text
- Color formatting
All player-facing strings are stored in messages.yml and support traditional & color codes as well as #RRGGBB hex colors.
Example configuration:
orders:
max-per-player: 10
default-expiry-days: 7
tax-percent: 0.0
database:
filename: donutorders.db
allowed-materials:
- DIAMOND
- EMERALD
- GOLD_INGOT
- IRON_INGOT
- NETHERITE_INGOT
- COAL
- LAPIS_LAZULI
- REDSTONE
- QUARTZ
- AMETHYST_SHARD
- GLOWSTONE_DUST
- BLAZE_ROD
- ENDER_PEARL
- GHAST_TEAR
- NETHER_STAR
- ELYTRA
- TOTEM_OF_UNDYING
- SHULKER_SHELL
- HEART_OF_THE_SEA
- TRIDENT
- OAK_LOG
Commands
| Command | Description | Permission |
|---|---|---|
/orders |
Open the orders interface. Aliases: /order, /market |
donutorders.use |
/orders admin reload |
Reload config.yml and messages.yml without restarting the server |
donutorders.admin |
Permissions
| Permission | Default | Description |
|---|---|---|
donutorders.use |
Everyone | Access /orders and the marketplace GUI |
donutorders.admin |
OP | Access DonutOrders administrative commands |
Installation
- Place
DonutOrders-1.0.0.jarinside your server'splugins/directory. - Install Vault and a compatible economy plugin.
- Start the server.
- DonutOrders automatically generates
config.ymlandmessages.yml. - Configure your allowed materials, limits, expiry duration, and other options.
- Run
/orders admin reloadafter making configuration changes.
Why Choose DonutOrders?
- Player-Driven Economy — Players create real demand by posting exactly what they want to purchase.
- No Chest Shops — The entire marketplace works through clean inventory interfaces.
- Secure Escrow — Money is reserved when an order is created, providing reliable payments and refunds.
- Flexible Fulfillment — Sellers can completely or partially fill orders and receive payment immediately.
- Safe Item Storage — The virtual stash keeps delivered items secure until buyers collect them.
- Modern Performance — Async storage and Folia-aware scheduling help keep marketplace activity away from critical server threads.
- Highly Configurable — Server owners control tradeable materials, order limits, expiry, taxes, and messages.
Compatibility
- Paper 1.20+
- Folia 1.20+
- Java 17+
- Vault
- Vault-compatible economy providers
- EssentialsX Economy
- CMI Economy
- SQLite
- Standard Paper servers
- Folia regionized servers
Requirements
DonutOrders requires a supported Paper or Folia Minecraft server running version 1.20 or newer.
Required dependencies:
- Java 17+
- Vault
- A Vault-compatible economy plugin
No external database is required because SQLite is supported out of the box.
Community & Support
- Discord: https://discord.gg/TJc3CxR4jK
- GitHub: https://github.com/MeherBenSalem
- Website: https://nightbeam.dev
- Store: https://nightbeam.dev/store
- CurseForge: https://www.curseforge.com/members/nightbeamstudio/projects
- Modrinth: https://modrinth.com/organization/nightbeam
If you encounter a bug or have a feature request, please join the Discord community or report it through the appropriate project page.
License
DonutOrders is licensed under the Apache License 2.0.
You are free to use, modify, and redistribute DonutOrders in accordance with the terms of the Apache License 2.0.
Ченджлог
1.8.0Релиз26.1.1, 26.1.2, 26.2 · 21 августа 2026 г.
Patch notes
1.8.0
- Added bStats metrics (plugin ID 33559)
- Hardened Modrinth update check for donut-orders: pick newest release by date, strip version suffixes, warn in console, notify
donutorders.adminon 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_attracking 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
1.7.0Релиз26.1.1, 26.1.2, 26.2 · 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-createdconfirmation only.
Configuration
orders.broadcast-on-create(defaulttrue) — set tofalseto disable the public announce.order-created-broadcastinmessages.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
- Replace the DonutOrders jar with 1.7.0. Keep your existing
plugins/DonutOrders/folder. - Optional: add
broadcast-on-create: trueunderorders:inconfig.yml, andorder-created-broadcasttomessages.yml, then/orders admin reload. If you skip this, in-code / jar defaults still enable the announce. - Confirm by creating an order on one account and checking chat on another.
1.6.1Релиз1.21.6, 1.21.7, 1.21.8 · 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
falsefromEnchantment#canEnchantItemfor 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
- Replace the DonutOrders jar with 1.6.1.
- Restart or use your preferred hot-swap flow, then open New Order → Enchanted Book to confirm the enchant list populates.
1.6.1Релиз26.1.1, 26.1.2, 26.2 · 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
falsefromEnchantment#canEnchantItemfor 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
- Replace the DonutOrders jar with 1.6.1.
- Restart or use your preferred hot-swap flow, then open New Order → Enchanted Book to confirm the enchant list populates.
1.6.0Релиз26.1.1, 26.1.2, 26.2 · 7 августа 2026 г.
DonutOrders v1.6.0
New Features
- MySQL storage backend — set
database.type: mysqlinconfig.ymlso 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_atcolumn 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_atcolumn added on startup) - Drop-in jar replacement; restart all network servers after switching to MySQL
Upgrade Notes
- For cross-server: create a MySQL database, grant access, set
database.type: mysqlon every server - Replace the jar with
DonutOrders-1.6.0.jaron all servers - Restart servers — console should show
(MySQL backend)when configured correctly - Verify an order placed on server A appears in
/orderson server B within a few seconds
1.5.1Релиз26.1.1, 26.1.2, 26.2 · 4 августа 2026 г.
DonutOrders v1.5.1
New Features
- None
Improvements
- Folia async scheduling hardened —
runAsyncalways uses Paper'sAsyncScheduleron regionalised servers; legacyBukkitSchedulerasync 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 (
UnsupportedOperationExceptionfromCraftScheduler.runTaskAsynchronouslyduringStorageManager.loadAll) on Folia 1.21.x - All scheduler entry points (
runAtEntity,runGlobal,runGlobalRepeating,runAsync, etc.) now catchUnsupportedOperationExceptionand 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: trueunchanged inplugin.yml- No database migration required
- Tested build target: Paper/Folia 1.20.6+ API; runtime tested on JDK 21
Upgrade Notes
- Replace the jar with
DonutOrders-1.5.1.jar - Restart the server (recommended over hot-reload for scheduler changes)
- Confirm console shows
Folia detected — using regionised schedulers.followed byEnabled successfullywith noUnsupportedOperationException - Run
/orderson a Folia 1.21.4 server to verify the marketplace opens
1.5.0Релиз26.1.1, 26.1.2, 26.2 · 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 reloadrefreshes 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_BOOKadded to defaultitems.ymlallowed listorders.default-limit— default active order cap (default:2)orders.max-per-player— legacy alias kept in sync withdefault-limitrank-limits— per-LuckPerms-group caps (e.g.default: 2,vip: 5)- Optional permission override:
donutorders.limit.<n>(highest wins) - New
messages.ymlkeys 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
- Replace the jar with
DonutOrders-1.5.0.jar - Restart the server (or reload after reviewing config)
- If upgrading an existing install, add
ENCHANTED_BOOKunderallowed-itemsinitems.yml, then/orders admin reload - Review
config.yml— add or adjustrank-limitsif you use VIP ranks:
Or grant LuckPerms permissionrank-limits: default: 2 vip: 5donutorders.limit.5instead of/in addition to rank limits. - Ensure VIP players have LuckPerms group
vip(maps togroup.vip) or the permission node above. - Test
/orders→ New Order → Enchanted Book + Search (compass), and confirm VIP players can hold more active orders than default.
1.3.1Релиз26.1.1, 26.1.2, 26.2 · 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
Комментарии
Загружаем…