Configuration
A guided tour of Gavel's config.yml — fees, bidding, offers, blacklist, notifications and performance.
Gavel v1.0.0Paper · Folia supported1.21 – 1.21.x
plugins/Gavel/config.yml holds behaviour only. Strings live in lang/<code>.yml, menu layouts in
gui/<name>.yml. Apply changes with /aha reload.
Two sections need a restart
storage and sync are read once at startup. Everything else reloads.
general
general: server-name: "survival-1" default-language: "en" follow-client-locale: true timezone: "system" date-format: "dd.MM.yyyy HH:mm" debug: falseserver-name is stored on every listing so you can tell where it came from — keep it unique per
server. follow-client-locale gives players the language matching their Minecraft client if a
matching lang/ file exists; /ah lang beats both.
economy
economy: provider: VAULT currency-format: "%amount%$" thousands-separator: "," decimal-separator: "." number-pattern: "#,##0.##" compact-numbers: true compact-threshold: 1000000VAULT is the only bundled provider. EconomyProvider is public API, so CoinsEngine, PlayerPoints or
an item currency can be wired in.
compact-numbers shortens large figures in tight GUI spots (1.2M instead of 1,234,567.00).
Confirmation screens always show the exact number regardless — nobody should ever agree to a
rounded price.
auction
auction: durations: [ 6, 12, 24, 48, 72 ] default-duration-hours: 24 listing-limits: default: 5 price-bounds: minimum: 1.0 maximum: 1000000000.0 max-multiple-of-median: 0 listing-fee: percent: 1.0 flat: 0.0 minimum: 0.0 maximum: 10000.0 sales-tax-percent: 5.0 tax-destination: NOTHING tax-account: "" cancel-fee-percent: 0.0 list-cooldown-seconds: 3| Key | Default | Notes |
|---|---|---|
durations | 6–72h | Offered in the sell menu. Gated by gavel.duration.<hours>. |
listing-limits.default | 5 | Fallback when a player has no gavel.limit.<n>. |
price-bounds.max-multiple-of-median | 0 | Rejects listings priced absurdly above the market median. A hard stop against coin laundering via nonsense listings. 0 disables. |
listing-fee | 1% | Charged on creation, never refunded. Discourages spam listing. |
sales-tax-percent | 5.0 | Deducted from the seller's payout. Overridden by gavel.tax.<percent>. |
tax-destination | NOTHING | NOTHING removes the money from the economy (a sink). ACCOUNT pays tax-account. |
cancel-fee-percent | 0.0 | Cost of cancelling an active listing. |
list-cooldown-seconds | 3 | Stops chat-spam listing. |
The blacklist
auction: allow-shulker-boxes: true allow-written-books: true allow-damaged-items: true blacklist: materials: - "BEDROCK" - "COMMAND_BLOCK" - "BARRIER" - "DEBUG_STICK" name-contains: [ ] max-enchant-levels: "*": 10 "minecraft:sharpness": 5 "minecraft:protection": 4 reject-suspicious-attributes: truemax-enchant-levels is the classic 32k-sword filter — "*" sets the cap for anything not listed
individually. reject-suspicious-attributes refuses items carrying attribute modifiers beyond
vanilla ranges.
name-contains matches plain display names and lore case-insensitively, which is useful against
renamed dupe markers you have already identified.
bidding
bidding: enabled: true min-increment-percent: 5.0 min-increment-flat: 1.0 anti-snipe: enabled: true trigger-window-seconds: 15 extend-seconds: 15 max-extensions: 20 proxy-bidding: true refund-on-outbid: true broadcast-above: 100000The minimum raise is the larger of the percent and the flat amount. Anti-snipe pushes the end time out when somebody bids in the last 15 seconds, capped at 20 extensions so an auction cannot run forever.
Leave refund-on-outbid on
With it off, nothing is escrowed and everything settles at the end — which means the winning bid can fail because the money is gone. See Auctions & offers.
offers
offers: enabled: true min-percent-of-price: 40.0 expire-hours: 24 max-open-per-player: 5 escrow: trueBuyers propose a price on a buy-it-now listing. min-percent-of-price stops lowball spam; 40% is a
reasonable floor. Money is held in escrow while the offer is open.
featured
featured: enabled: true cost-flat: 5000.0 cost-percent-of-price: 0.0 duration-hours: 6 max-concurrent: 10 highlight: truePaid promotion. max-concurrent is the important one — with no cap, the front page becomes
entirely featured listings and the promotion stops being worth paying for.
mailbox
mailbox: purge-after-days: 0 notify-on-join: trueItems from expired, cancelled and won listings land here. 0 means never purge, which is the
recommended setting: this is the anti-item-loss guarantee, and a purge turns it into a deadline.
watchlist
watchlist: enabled: true max-per-player: 5 check-interval-seconds: 30 notify-once-per-listing: true actionbar: trueAlerts also fire immediately when a matching listing is created on this server; the interval is the sweep that catches listings created elsewhere on a network.
notifications and discord
notifications: sale-message: true deliver-on-join: true broadcast-listings-above: 0 discord: enabled: false webhook-url: "" post: rare-listings: true grand-auction: true integrity-flags: false rare-listing-threshold: 250000.0 username: "Gavel" weekly-report: enabled: false day: "MONDAY" hour: 12Send integrity flags to a private channel
If you turn on post.integrity-flags, use a staff-only webhook. The flags name accounts, and a
public accusation based on an automated heuristic is a bad look.
performance
performance: listing-cache-seconds: 30 price-cache-seconds: 120 expiry-check-seconds: 20Browse pages are served from a cache invalidated on every write, locally and across the network when
sync is on. listing-cache-seconds is the ceiling for how stale a page can get if an invalidation
is ever missed — not the normal refresh interval.
The rest
storageandsync→ Cross-serverpricing→ Price intelligenceintegrity→ Market integritygrand-auction→ Auctions & offers