English
Paid Queue Slots
You can buy extra queue slots right on the queue page. Price tiers live in plugins/EmakiStation/queue_costs.yml, and queue.purchase.cost_file in config.yml tells the plugin where to find it
Treat it as a business data file: release_default_data drops it in once when it is missing, and version upgrades never overwrite what an administrator changed
Three Switches
Purchasing is blocked if any one of them is off:
| Switch | Location |
|---|---|
queue.purchase.enabled | config.yml, server-wide master switch |
queue.allow_purchase | stations/<id>.yml, whether this station sells slots |
emakistation.purchase | Player permission, default true |
Shipped Defaults
yaml
tiers:
- count_range: "1-2"
currency:
type: vault
amount: 5000
- count_range: "3-4"
currency:
type: vault
amount: 20000
- count_range: "5-6"
currency:
type: vault
amount: 50000
item:
source: "diamond"
amount: 8
fallback:
currency:
type: vault
amount: "100000 * 1.15 ^ (%count% - 7)"
max_amount: 500000000
batch:
enabled: true
options:
- 1
- 2
- 5Fields
| Field | Type | Required | Default | Accepted range | Description |
|---|---|---|---|---|---|
tiers | list | No | [] | list of maps | Price tier list. An invalid tier is skipped with a [station] WARN |
tiers[].count_range | string | No | — | "N" or "min-max", positive integers | Which slot numbers this tier covers, such as "1-2". An unparsable value, a non-positive number, or max < min skips the tier |
tiers[].currency | section | No | — | see the next two rows | Currency price; when both it and item are missing or invalid the tier is skipped |
tiers[].currency.type | string | No | "vault" | vault, excellent (excellenteconomy is equivalent) | Economy provider. An unrecognised value logs Unrecognised queue cost currency type and counts as no currency price |
tiers[].currency.amount | double | string | No | — | a number >0, or a non-blank expression string | Currency amount. A number ≤0 counts as no currency price; a string is evaluated by the CoreLib ExpressionEngine, where %count% is the ordinal of the slot being bought |
tiers[].item | section | No | — | see the next two rows | Additional item price |
tiers[].item.source | string | No | — | a CoreLib ItemSource token | The additional item required. Empty or blank counts as no item price |
tiers[].item.amount | integer | No | 1 | >0 | Item amount; ≤0 counts as no item price |
fallback | section | No | disabled | see the next three rows | Fallback tier. With no usable currency or item the whole fallback is disabled |
fallback.currency.type | string | No | "vault" | same as tiers[].currency.type | Fallback currency type |
fallback.currency.amount | double | string | No | — | same as tiers[].currency.amount | Fallback amount; expressions are supported |
fallback.item.source / fallback.item.amount | string / integer | No | — / 1 | same as tiers[].item | Fallback item price |
fallback.max_amount | double | Yes (when fallback is enabled) | — | >0 | Price ceiling for a single queue slot. When missing or non-positive the whole fallback tier is disabled and slots beyond tiers become unpurchasable |
batch.enabled | boolean | No | true | true, false | Whether batch purchasing is allowed |
batch.options | list<integer> | No | [1, 5] | positive integers | Selectable batch sizes; non-positive entries are ignored and an all-invalid list falls back to [1, 5]. The effective batch choices always include 1 and keep only explicit values greater than 1 |
Make sure fallback.max_amount is set: if it is missing or non-positive, the whole fallback tier is disabled and slots beyond tiers cannot be bought. It exists to stop an exponential expression from overflowing to Infinity
yaml
# Example: sell only the first 4 slots and nothing beyond (no fallback)
tiers:
- count_range: "1"
currency:
type: vault
amount: 2000
- count_range: "2-4"
currency:
type: vault
amount: 8000Pricing Rules
When you buy your Nth queue slot, the count_range containing N decides the price. N is the count you have already bought at this station plus one, and each station counts separately. Earlier tiers win; unmatched numbers fall back to fallback
Batch purchases are settled by pricing each slot and summing, not "unit price × quantity" -- otherwise you could buy a large batch entirely at the cheapest tier
No price means refusal: when a slot matches neither a tier nor fallback, the purchase is refused instead of being granted for free. If the file is missing or unusable as a whole, paid queue slots are disabled entirely
Relationship to the Ceiling
Purchased slots stack on top of the base length or permission tier, but queue.max_length on the station still clamps the result. At quoting time the plugin already refuses purchases that the clamp would swallow, so you never pay first and find out afterwards that the slot was useless
When you cancel a queue entry, currency already paid is refunded at the station's cancel_refund_rate -- the same rate as materials
unlocks.yml — Purchased-Slot Save Data
Your purchased queue slots are recorded in plugins/EmakiStation/data/<player UUID>/unlocks.yml. This is plugin state, not configuration: stop the server before editing it by hand. The plugin reads it when you join and writes it on purchase, on shutdown and on autosave; if you have no purchased slots, the file is never created
| Field | Type | Required | Default | Accepted range | Description |
|---|---|---|---|---|---|
player | string | Yes | — | player UUID | The player this file belongs to |
stations | map | Yes | — | <station id> → record | Purchased slots, tracked per station |
stations.<station id>.purchased_slots | integer | No | 0 | ≥0 | How many queue slots this player bought at that station; 0 or missing means no extra slots (values ≤0 are read as 0) |
yaml
player: "0f1e2d3c-4b5a-6978-8796-a5b4c3d2e1f0"
stations:
blacksmith:
purchased_slots: 3