1.0.0
Compatibility
Changes
๐ DonutOrders
A player-driven buy order marketplace. No chest shops. No admin setup. Just a clean GUI and automatic economy.
Paper ยท Purpur ยท Folia ยท Spigot โ 1.20.x / 1.21.x ยท Java 17+ ยท Requires Vault
How it works
- A buyer opens
/ordersโ New Order โ picks a material โ types quantity and price-per-unit in chat. - Funds are escrowed immediately โ buyers can't spend money they don't have.
- Sellers browse the marketplace, pick an order, drop items into the 45-slot delivery GUI โ paid on the spot.
- Partially-filled orders keep delivered items in a virtual stash until the buyer collects them.
- Orders expire automatically after a configurable number of days; any unspent funds are refunded.
Features
Buyer side
- Post buy orders for any material on the server's allowed list
- Escrow system โ funds are withdrawn on order creation, preventing double-spending
- Status tracking โ Active, Completed, Expired, or Cancelled
- Virtual stash โ delivered items are stored server-side even when your inventory is full
- Overflow protection โ items that don't fit on collection are dropped at your feet
- Cancel & refund โ cancel any active order and receive the unspent balance back
Seller side
- Browse all active orders in a paginated marketplace GUI
- 45-slot delivery grid โ only the correct material is accepted
- Wrong-item rejection โ the GUI refuses incompatible items immediately with a clear message
- Partial fills โ deliver as many or as few items as you want; payment is per-item
- Anti-duplication lock โ concurrent delivery attempts on the same order are serialised server-side
- Excess item return โ items beyond what the order needs are automatically returned to your inventory
Economy
- Vault-powered โ works with EssentialsX, CMI, and any Vault-compatible economy plugin
- Optional seller tax as an economy sink (disabled by default)
- Refunds are always exact โ no rounding errors
Technical
- Full Folia support โ all scheduling uses regionalised entity/global schedulers; also works on standard Paper/Spigot
- SQLite + HikariCP โ orders persisted to a local WAL-mode database; no external DB required
- Fully async I/O โ database reads and writes never block the main thread
- Shaded & relocated dependencies โ no classpath conflicts with other plugins
GUI screens
| Screen | Purpose |
|---|---|
| Main menu | Your orders / Browse market / Collect stash |
| Your orders | View active orders, cancel, collect stash |
| New order | Pick material, set amount and price via chat |
| Browse market | Paginated list of all active orders |
| Deliver items | 45-slot grid accepting only the correct material |
| Order detail | Progress, price, expiry, stash status, cancel button |
Commands
| Command | Description | Permission |
|---|---|---|
/orders |
Open the orders menu (alias: /order, /market) |
donutorders.use |
/orders admin reload |
Reload config and messages | donutorders.admin |
Permissions
| Permission | Description | Default |
|---|---|---|
donutorders.use |
All /orders commands and GUI features |
Everyone |
donutorders.admin |
Access admin sub-commands | OP |
Configuration
orders:
max-per-player: 10 # Max simultaneous active orders per player
default-expiry-days: 7 # Days before an unfilled order expires
tax-percent: 0.0 # % of seller payout taken as economy sink (0 = off)
database:
filename: donutorders.db
allowed-materials:
- DIAMOND
- EMERALD
- GOLD_INGOT
# ... any Bukkit Material name
All player-facing strings are in messages.yml โ supports & colour codes and #RRGGBB hex colours.
Installation
- Drop
DonutOrders.jarinto yourplugins/folder. - Make sure Vault and an economy plugin (e.g. EssentialsX) are installed.
- Start the server โ
config.ymlandmessages.ymlare generated automatically. - Edit
allowed-materialsand other options to your liking. - Run
/orders admin reloadto apply changes without a restart.
Requirements
| Requirement | Version |
|---|---|
| Paper / Purpur / Folia / Spigot | 1.20.x or 1.21.x |
| Java | 17+ |
| Vault | Any compatible release |
| Economy plugin | EssentialsX, CMI, or any Vault economy |
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:BiZvsac9:kr3s355Z"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:BiZvsac9:kr3s355Z"
}

