AT-AuctionHouse logoAT-AuctionHouse

Configuration

A walk through config.yml section by section, plus how the self-updating version keys work.

config.yml holds behaviour, storage, limits and sounds. Menus live in gui.yml and chat text lives in lang/. The split is deliberate: restyling a menu means editing one file, not three.

/ah reload

re-reads all three files. The one exception is DATABASE.TYPE, which needs a full server restart.

A reload closes every open menu first. Any item a player had handed to a menu is given back before the files are re-read.

Config versions

At the top of each file sits a version key: CONFIG-VERSION in config.yml, GUI-VERSION in gui.yml and LANG-VERSION in each language file.

When you install a newer build, the copy bundled in the jar is compared against yours. New keys and their explanatory comments are merged into your file, your values are kept exactly as you set them, and keys that no longer exist are removed. Then the version number is written back.

Do not edit a version key by hand. Lowering it forces the old layout to be re-applied.

Two things follow from this that are worth knowing:

  • A deleted key is not a broken key. Defaults are served from the jar's own copy, so a key you removed resolves to the shipped value instead of nothing.
  • You can force a re-merge by lowering the version number deliberately, if you ever need to.

GENERAL

GENERAL:
  LANGUAGE: english
  METRICS: true
KeyWhat it doesDefault
LANGUAGEWhich file inside lang/ supplies player-facing text, without the .ymlenglish
METRICSAnonymous usage reporting to ArrowStatstrue

LANGUAGE accepts english, spanish, french, japanese or the name of any file you drop into lang/ yourself. An unknown name falls back to English with a warning rather than failing startup. See Languages.

METRICS reports server and player count, Minecraft version, server software and plugin version once every 30 minutes on a background thread. No player data, no IPs, nothing identifying. Turning it off is fine and has no effect on anything else.

DATABASE

DATABASE:
  TYPE: SQLITE
ValueUse it for
SQLITEA single server. One file, zero setup
MYSQLA shared server, required if several servers share listings
MONGODBA shared server, document storage

An unknown TYPE falls back to SQLITE with a warning.

Changing TYPE needs a full restart and does not migrate existing data. See Storage for the full breakdown of each backend, including the MySQL TLS keys.

CROSS-SERVER

CROSS-SERVER:
  ENABLED: false
  SERVER-ID: "auction-server-1"

Off by default. When you turn it on, every server must share one database and one Redis, and every server needs a unique SERVER-ID.

The REDIS block and the four SYNC switches are covered in full on Cross-server.

SERVER-ID is used even with cross-server mode off. It is attached to every listing and every payout, and it shows up in /ah about.

AUCTION

This is the section most servers actually tune.

AUCTION:
  DEFAULT-DURATION-SECONDS: 86400
  MIN-PRICE: 10.0
  MAX-PRICE: 1000000.0
  MAX-LISTINGS-PER-PLAYER: 10
  BROADCAST-PRICE-THRESHOLD: 500000.0
  BUY-CONFIRMATION: true
  COMPACT-PRICE-INPUT: false
  EXPIRY-SWEEP-INTERVAL-SECONDS: 60
  BLACKLIST:
    - "AIR"
    # ...
KeyWhat it doesDefault
DEFAULT-DURATION-SECONDSHow long a new listing stays up before it expires and returns to the seller86400 (24 hours)
MIN-PRICELowest price accepted when creating a listing10.0
MAX-PRICEHighest price accepted1000000.0
MAX-LISTINGS-PER-PLAYERBaseline active listings per player, raised per rank by permission10
BROADCAST-PRICE-THRESHOLDListings at or above this price are announced server-wide500000.0
BUY-CONFIRMATIONShow a confirm screen before money changes handstrue
COMPACT-PRICE-INPUTAccept 1.5k, 10k, 1m, 2.5b as pricesfalse
EXPIRY-SWEEP-INTERVAL-SECONDSHow often the server sweeps for expired listings60
BLACKLISTBukkit material names that may never be listedSee below

Useful durations: 3600 is one hour, 86400 is a day, 604800 is a week.

EXPIRY-SWEEP-INTERVAL-SECONDS is clamped to a minimum of 5 seconds internally. Below 20 is not useful in practice, since a listing expiring a few seconds late costs nobody anything.

If MIN-PRICE ends up above MAX-PRICE, the plugin swaps them at load time and logs a warning, so listings stay possible.

The shipped BLACKLIST covers bundles, command blocks, structure blocks, barriers, light blocks, debug sticks, knowledge books and AIR. Add your own custom-item materials to it. Matching is on the Bukkit material name and is case-insensitive. See Selling.

FORMATTING

How prices are written wherever the plugin shows one: {price} in gui.yml, {min} and {max} in your language file, and the broadcast line.

FORMATTING:
  CURRENCY-SYMBOL: "$"
  MAGNITUDE-SUFFIXES:
    - ""
    - "K"
    - "M"
    - "B"
    - "T"
    - "Q"
KeyWhat it doesDefault
CURRENCY-SYMBOLWritten in front of every price"$"
MAGNITUDE-SUFFIXESShort forms for thousands, millions and up"", K, M, B, T, Q

CURRENCY-SYMBOL

Set it to "" for bare numbers. A player may type it or leave it out, so $1500 and 1500 are both accepted at the price prompt. Only a leading symbol is stripped. Anywhere else in the number it is treated as a typo and the price is refused.

MAGNITUDE-SUFFIXES

The list is positional. Each entry is one step of 1000.

PositionStands forExample
1Ones. Leave it empty500 renders as $500
2Thousands1000 renders as $1K
3Millions1000000 renders as $1M
4Billions1000000000 renders as $1B

Add as many entries as you like. A price above the last entry stops scaling, so keep the list long enough for your economy. The shipped list reaches a quadrillion.

The list needs at least two entries, the empty ones slot plus one more. A shorter list is refused with a warning and the built-in list is kept, because the entries are positional and half a list would misread what players type.

Whatever you put here is also what the price prompt understands, so renaming K to mil makes 2.5mil a valid thing for a player to type. Matching ignores case, and the longest suffix wins, so a short m never shadows a longer mil.

Suffixes are only accepted as input when AUCTION.COMPACT-PRICE-INPUT is on. Display always uses them. See Selling.

Why these two are not in the language files

The currency symbol and the magnitude suffixes are read back when a player types a price, so they are part of what the plugin accepts rather than only how it displays.

Time unit labels are the other way round. Nothing ever parses a duration back from a player, so they are display only and genuinely translatable. They live in the TIME block of your language file instead. See Languages.

SEARCH:
  METHOD: ANVIL
  CHAT-TIMEOUT-SECONDS: 60
KeyWhat it doesDefault
METHODHow the in-menu Search button asks for text: ANVIL, SIGN or CHATANVIL
CHAT-TIMEOUT-SECONDSCHAT method only. Seconds to wait before the prompt expires. 0 waits indefinitely60

An unknown METHOD falls back to ANVIL with a warning. /ah search <query> works regardless of this setting. The three methods are compared side by side on Auction house.

SOUNDS

SOUNDS:
  BUY-SUCCESS: "ENTITY_EXPERIENCE_ORB_PICKUP|1.0|1.0"

The format is SOUND_NAME|volume|pitch.

  • SOUND_NAME is any sound key your server version knows. Both the Bukkit constant name (ENTITY_VILLAGER_NO) and the namespaced key (minecraft:entity.villager.no) work.
  • volume is 1.0 for normal. Above 1.0 increases the audible range.
  • pitch runs from 0.5 (low) through 1.0 (normal) to 2.0 (high).

Set any entry to "" to play nothing.

KeyPlays whenDefault
BUY-SUCCESSA purchase completedENTITY_EXPERIENCE_ORB_PICKUP
LISTING-COLLECTAn item was taken out of the collection boxUI_LOOM_TAKE_RESULT
LISTING-SUCCESSA listing was createdUI_CARTOGRAPHY_TABLE_TAKE_RESULT
ERROR-SOUNDAny refusal: no funds, blacklisted item, listing goneENTITY_VILLAGER_NO
MENU-INTERACTIONGeneric button pressUI_BUTTON_CLICK
MENU-REFRESHListings were re-pulled from the databaseUI_TOAST_IN
MENU-NEXT-PAGEPaging forwardITEM_BOOK_PAGE_TURN
MENU-BACK-PAGEPaging backITEM_BOOK_PAGE_TURN
COMMAND-HELP/ah help was shownENTITY_EXPERIENCE_ORB_PICKUP
SALE-NOTIFYPlayed to the seller when their item sellsENTITY_PLAYER_LEVELUP

An unknown sound name is skipped and logged exactly once, not once per click. Sounds are read live, so an edit takes effect on the next click without a reload.

Colours

Anywhere text is configurable, in config.yml, gui.yml and lang/, you can use:

FormExample
Legacy codes&a, &b, &l
Hex&#ff8800
Hex tag<#ff8800>text</#ff8800>
Gradient<gradient:#ff0000:#0000ff>text</gradient>
Rainbow<rainbow>text</rainbow>

There is also a named palette of 125 colours.

Dead keys

There are none. Every key shipped in config.yml, gui.yml and lang/english.yml is read by the plugin at runtime. Nothing in the shipped configuration is decorative.

On this page