
CoinOp
A dynamic order-book economy plugin where players trade items at player-driven prices. Features instant buy/sell, lore-based price tooltips, multi-server sync, optional GUI, and anvil cost rework.
CoinOp
A dynamic, order-book-based economy plugin for Minecraft servers.
What This Plugin Does
This plugin creates a marketplace where players can trade items with each other. Instead of fixed prices, the market determines prices based on supply and demand - similar to how stock markets or Hypixel's Bazaar works.
Key Features:
- Players can place buy orders ("I want to buy 100 diamonds for $50 each")
- Players can place sell orders ("I want to sell 100 diamonds for $50 each")
- When prices match, trades happen automatically
- Instant buy/sell at current market price
- Item tooltips show current market prices
- Works across multiple servers (using Redis)
- Optional GUI for easier trading
- Anvil cost rework (no more "Too Expensive!")
Requirements
Before installing, make sure you have:
- A Minecraft Server running Paper or Spigot (versions 1.19.x - 1.21.x)
- Java 17+ for Minecraft 1.19-1.20, or Java 21+ for Minecraft 1.21+
- An economy plugin like EssentialsX, CMI, or PlayerPoints
- Vault (will auto-download if missing)
Server Compatibility
CoinOp works with all major Minecraft server software:
| Server | Status | Notes |
|---|---|---|
| Paper | ✅ Full | Primary target - uses Paper API |
| Spigot | ✅ Full | Compatible via Spigot API |
| Bukkit | ✅ Full | Basic Bukkit API |
| Purpur | ✅ Full | Paper fork, 100% compatible |
| Pufferfish | ✅ Full | Paper fork, 100% compatible |
| Airplane | ✅ Full | Paper fork, 100% compatible |
| TacoSpigot | ✅ Full | Paper/Spigot fork, compatible |
| Akarin | ✅ Full | Paper fork, compatible |
Minecraft Versions:
- 1.19.x (1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4)
- 1.20.x (1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6)
- 1.21.x (1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, etc.)
Installation
- Download the JAR file for your Minecraft version from the releases
- Put it in your server's
pluginsfolder - Start the server
- The plugin will create a
plugins/CoinOp/folder with configuration files - Edit
config.ymlto customize the plugin - Restart the server or run
/coa reload
Configuration Guide
The main configuration file is config.yml located in plugins/CoinOp/. Here's a detailed explanation of each section:
Economy Settings
economy:
tax-rate: 0.0
tax-rate: A percentage taken from each trade. Set to0.0for no tax,0.05for 5% tax. The tax money disappears from the economy (it's not collected by anyone).
Example: If you set 0.05 and a player sells diamonds for $100, they only receive $95.
Order Settings
orders:
min-amount: 1
max-amount: 2304
expiration-minutes: -1
min-amount: Minimum items per order. Default is 1.max-amount: Maximum items per order. Default is 2304 (36 stacks = one double chest). Set to-1for unlimited.expiration-minutes: How long orders stay active. Default-1means orders never expire. Set to1440for 24 hours,10080for 1 week.
Commodities Configuration
commodities:
allowed: []
categories:
ores:
- DIAMOND
- IRON_INGOT
- GOLD_INGOT
crops:
- WHEAT
- CARROT
allowed: Leave empty[]to allow all items. Or list specific items like[DIAMOND, IRON_INGOT]to only allow those.categories: Groups items together for the GUI. You can add your own categories.
Adding a new category:
commodities:
categories:
nether:
- NETHERITE_INGOT
- QUARTZ
- GLOWSTONE_DUST
Trade Limits
limits:
global-daily-limit: 0
daily-limits:
DIAMOND: 1000
global-daily-limit: Maximum total items a player can trade per day.0means unlimited.daily-limits: Per-item limits. The example limits players to 1000 diamonds per day.
Why use limits? Prevents players from manipulating the market or laundering money.
Price Bounds
price-bounds:
enabled: true
global-min: 0.01
global-max: 1000000000
commodities:
DIAMOND:
min: 10.0
max: 10000.0
enabled: Turn price bounds on/offglobal-min: Minimum price for any item (default: $0.01)global-max: Maximum price for any item (default: $1 billion)commodities: Set specific limits per item
Why use price bounds? Prevents players from:
- Selling items for $0.01 to transfer money between accounts
- Buying items for extreme prices to manipulate the market
Example scenario: You want diamonds to trade between $10 and $10,000:
price-bounds:
enabled: true
commodities:
DIAMOND:
min: 10.0
max: 10000.0
Now if someone tries to place a buy order for $5, it will be rejected. If someone tries to sell for $15,000, it will be rejected.
Multi-Server Sync (Redis)
If you run multiple servers and want them to share the same market:
sync:
enabled: true
redis:
host: localhost
port: 6379
password: ""
database: 0
enabled: Turn sync on/offhost: Redis server IP addressport: Redis port (default 6379)password: Redis password (leave empty if none)database: Redis database number (0-15)
How it works: When a player places an order on Server A, it instantly appears on Server B. Trades are synchronized across all connected servers.
Do I need Redis? Only if you run multiple servers. For a single server, leave enabled: false.
Database Configuration
database:
type: sqlite
host: localhost
port: 3306
name: CoinOp
user: root
password: ""
type: Eithersqliteormysqlsqlite: Stores data in a local file. Good for single servers.mysql: Connects to a MySQL server. Good for multi-server setups.
host,port,name,user,password: MySQL connection details (ignored if using SQLite)
When to use MySQL: If you run multiple servers and want them to share order history and player data.
Lore Display Settings
lore:
enabled: true
update-interval: 20
show-history: true
history-points: 5
enabled: Show market prices in item tooltipsupdate-interval: How often to refresh prices (in ticks, 20 ticks = 1 second)show-history: Show price trend in tooltiphistory-points: How many price points to show
What players see: When they hover over a diamond in their inventory, they'll see:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CoinOp Market Data
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Buy Price: $50.00 each
Sell Price: $48.50 each
24h Volume: 125,300
Trend: ▲ Up
Anvil Rework Settings
anvil-rework:
enabled: true
enchantment-extraction: true
max-cost: 0
material-costs:
NETHERITE_INGOT: 15
DIAMOND: 10
enabled: Turn the anvil rework on/offenchantment-extraction: Allow moving enchants to booksmax-cost: Maximum anvil cost.0means unlimited (no "Too Expensive!")material-costs: Base costs for different materials
How it works: Instead of exponential costs (2^n - 1), the anvil uses linear costs based on material rarity. This means you can combine many enchantments without hitting the "Too Expensive!" limit.
Enchantment Extraction: Put an enchanted item in the left slot and a book in the right slot. The enchantments will transfer to the book.
GUI Settings
gui:
enabled: true
open-on-command: true
title: "&6CoinOp &8- &7Market"
main-menu-size: 54
sounds:
open: "BLOCK_CHEST_OPEN"
click: "UI_BUTTON_CLICK"
icons:
ores: "DIAMOND"
crops: "WHEAT"
enabled: Turn the GUI on/offopen-on-command: Open GUI when player runs/CoinOpwithout argumentstitle: GUI title (supports color codes:&6= gold,&8= dark gray,&7= gray)main-menu-size: GUI size (must be multiple of 9, max 54)sounds: Sound effects for different actionsicons: Which items represent each category
Color Codes:
&0- Black&1- Dark Blue&2- Dark Green&3- Dark Aqua&4- Dark Red&5- Dark Purple&6- Gold&7- Gray&8- Dark Gray&9- Blue&a- Green&b- Aqua&c- Red&d- Light Purple&e- Yellow&f- White
Commands
Player Commands
| Command | Aliases | Description | Example |
|---|---|---|---|
/coinop | /co, /market | Open the CoinOp menu | /coinop |
/coinop buy <item> <amount> <price> | /coinbuy | Place a buy order | /coinbuy DIAMOND 100 50 |
/coinop sell <item> <amount> <price> | /coinsell | Place a sell order | /coinsell DIAMOND 100 50 |
/coinop instant buy <item> <amount> | /coininstant | Buy at market price | /coininstant buy DIAMOND 64 |
/coinop instant sell <item> <amount> | /coininstant | Sell at market price | /coininstant sell DIAMOND 64 |
/coinop orders | /coinorders | View your active orders | /coinorders |
/coinop orders cancel <item> <id> | - | Cancel an order | /coinop orders cancel DIAMOND 12345 |
/coinop price <item> | /coinprice | Check current prices | /coinprice DIAMOND |
/coinop history <item> | - | View recent trades | /coinop history DIAMOND |
Admin Commands
| Command | Aliases | Description |
|---|---|---|
/coinadmin reload | /coa reload | Reload configuration |
/coinadmin bounds list | /coa bounds list | List all price bounds |
/coinadmin bounds set <item> <min> <max> | /coa bounds set | Set price bounds |
/coinadmin bounds remove <item> | /coa bounds remove | Remove price bounds |
/coinadmin limits list | /coa limits list | List all trade limits |
/coinadmin limits set <item> <limit> | /coa limits set | Set daily trade limit |
/coinadmin stats [item] | /coa stats | View trading statistics |
/coinadmin cleanup | /coa cleanup | Remove inactive orders |
/coinadmin sync status | /coa sync status | Check Redis connection |
Permissions
| Permission | Description | Default |
|---|---|---|
CoinOp.use | Basic CoinOp usage | Everyone |
CoinOp.buy | Place buy orders | Everyone |
CoinOp.sell | Place sell orders | Everyone |
CoinOp.instant | Use instant buy/sell | Everyone |
CoinOp.orders | View own orders | Everyone |
CoinOp.cancel | Cancel own orders | Everyone |
CoinOp.admin | Admin commands | OPs only |
CoinOp.admin.bounds | Set price bounds | OPs only |
CoinOp.admin.limits | Set trade limits | OPs only |
CoinOp.admin.reload | Reload config | OPs only |
CoinOp.admin.sync | Manage sync settings | OPs only |
CoinOp.bypass.limit | Bypass trade limits | OPs only |
CoinOp.bypass.bounds | Bypass price bounds | OPs only |
How Trading Works
Order Book System
The CoinOp uses an order book - the same system used by real stock markets:
-
Buy Orders (Bids): Players say "I want to buy X items at $Y each"
- Highest prices are matched first
- Example: If someone is willing to pay $55 and another $50, the $55 order trades first
-
Sell Orders (Asks): Players say "I want to sell X items at $Y each"
- Lowest prices are matched first
- Example: If someone is selling at $45 and another at $50, the $45 order trades first
-
Matching: When a buy order's price meets or exceeds a sell order's price, a trade happens at the sell order's price.
Example Trade:
- Alice places a buy order: "I want to buy 100 diamonds at $50 each"
- Bob places a sell order: "I want to sell 50 diamonds at $48 each"
- Since $50 ≥ $48, they trade: Bob sells 50 diamonds to Alice for $48 each
- Alice's order now has 50 diamonds remaining at $50 each
Instant Buy/Sell
For players who want immediate trades:
- Instant Buy: Buys at the lowest available sell price
- Instant Sell: Sells at the highest available buy price
If no matching orders exist, the trade is rejected.
Troubleshooting
"Vault not found" error
The plugin will auto-download Vault on first run. If it fails:
- Download Vault from https://www.spigotmc.org/resources/vault.34315/
- Put it in your
pluginsfolder - Restart the server
"No economy plugin found" error
You need an economy plugin. Install one of these:
- EssentialsX (recommended): https://essentialsx.net/ or /plugins/essentialsx
- CMI: https://www.spigotmc.org/resources/cmi.3742/ or if you want to stay on modrinth SunLight
- PlayerPoints: https://www.spigotmc.org/resources/playerpoints.1997/ or /plugins/playerpoints
"Price outside allowed bounds" error
The price is outside the limits set in config.yml. Either:
- Change the price bounds in the config
- Give the player
CoinOp.bypass.boundspermission
"Daily trade limit reached" error
The player has traded too much of that item today. Either:
- Wait until tomorrow (limits reset daily)
- Increase the limit in config.yml
- Give the player
CoinOp.bypass.limitpermission
GUI not opening
Check these settings in config.yml:
gui:
enabled: true
open-on-command: true
Redis connection failed
- Make sure Redis is installed and running
- Check the connection details in config.yml
- Test with
/coa sync status
Building from Source
If you want to modify the plugin:
- Install Java 17 or Java 21
- Clone or download the source code
- Run
./gradlew build(Linux/Mac) orgradlew.bat build(Windows) - Find the JARs in
versions/*/build/libs/
Support
- Report bugs on the issue tracker
- For questions, ask in the discussion forum
License
Credits
Developer: APPLEPIE6969
Inspired by Hypixel's Bazaar system and the Minecraft community's requests for a dynamic economy plugin.
