What Gavel does
An auction house that tells players what an item is actually worth — and refuses to let a market be manipulated.
Gavel v1.0.0Paper · Folia supported1.21 – 1.21.x
Gavel is a full auction house: buy-it-now listings, timed auctions with proxy bidding, offers, a mailbox that never eats items, and real cross-server support. What makes it different from every other auction plugin is the two systems underneath it.
A weighted median of completed sales — not asking prices — with three suggestions instead of one number.
Market integrityWash-trading and alt-account detection. Flagged trades never touch the price statistics.
The pricing problem
Every auction plugin that shows a "suggested price" derives it from active listings. Active listings are asking prices: they are what optimists want, not what anybody paid. The result is a number that drifts upward forever, because each new seller anchors on the last one's fantasy.
Gavel only counts completed sales, and then does four things to that sample:
- Time decay — a sale from today counts twice as much as one from five days ago.
- IQR trimming — samples more than 1.5 interquartile ranges from the median are dropped.
- Seller cap — no single seller may contribute more than 30% of the sample.
- Confidence tiers — below 25 samples the estimate is labelled medium, below 10 it is low.
Then, instead of one authoritative number, it offers three: quick (25th percentile), fair (median) and patient (75th percentile), each with the sell-through rate for that price band. The player answers "will it sell?", not just "what is it worth?".
Why three numbers matter
A single suggested price becomes self-fulfilling: everyone lists at it, so every sale happens at it, so the median never moves. Three percentiles keep the sample spread out and the market alive.
Market integrity
Price data is only as good as the trades feeding it. Gavel scores seller/buyer pairs for wash trading — repeated trades between the same two accounts, unusual volume between them, or a price ten times the item's median — and checks for shared IP addresses and self-trades through alts.
Flagged trades are excluded from pricing by default, so a coin-laundering ring cannot poison the market data even if you never notice them. Blocking the transaction outright is available but off by default: a false positive that blocks a legitimate trade costs more than a logged flag does.
What players get
| Feature | Notes |
|---|---|
| Buy it now | /ah sell <price> [hours] |
| Timed auctions | Proxy bidding, anti-snipe extension, instant refund on outbid |
| Offers | Propose a price on a BIN listing; the seller accepts or declines |
| Watchlist | Alerts when a matching listing appears under your price |
| Mailbox | Expired, cancelled and won items land here — nothing is ever deleted |
| Price checker | /ah price with sell-through rates and a 14-day sparkline |
| Market tab | Trends, movers and the cheapest listings right now |
| Grand auctions | Server-wide live auction with a bossbar countdown |
| Featured listings | Paid promotion that sorts above everything else |
What operators get
- SQLite or MySQL, with real cross-server sync over Redis pub/sub.
- Vault economy out of the box, and a public
EconomyProviderinterface for CoinsEngine, PlayerPoints or item currencies. - Fees and taxes with a choice of sink or destination account.
- A blacklist that actually works: materials, name matching, enchantment level caps and suspicious attribute modifiers — the 32k-sword filter, built in.
- Custom-item support for ItemsAdder, Nexo, Oraxen, MMOItems, ExecutableItems and EcoItems.
- Every string in
lang/<code>.yml, every menu layout ingui/<name>.yml.
Item safety
Two design decisions worth knowing about, because they are the difference between an auction house and an item-duplication bug:
- Menus never contain real items. What you see in a GUI is a rendered copy; clicking resolves to a listing ID. The sell flow takes the item by inventory slot, not by value.
- Money moves before the row does. A purchase debits the buyer first, then does a compare-and-set on the listing row. If somebody else won the race, the money is refunded. Doing it the other way round produces sold listings that were never paid for.
Items are stored via ItemStack#serializeAsBytes, which runs through Mojang's DataFixerUpper — so
listings survive the format changes that broke other plugins on 1.20.5 and 1.21.5.
Requirements
| Server software | Paper 1.21 or newer · Folia supported |
| Java | 21 |
| Required | Vault + an economy plugin |
| Optional | Redis (cross-server), PlaceholderAPI, custom item plugins |
Next: install it.