Skip to content

Configuration

plugins/EmakiStation/config.yml is the main configuration. Its version is a configuration-structure marker that the plugin uses to merge newly added default keys. It tracks separately from the module release version, so you do not need to edit it to match the plugin version.

Top-Level Keys

KeyDefaultDescription
version"1.0.8"Configuration-structure marker, maintained by default-resource sync. The internal migration constant is 1.0.2 and is not a release coordinate.
language"zh_CN"Language file name, resolving to lang/<language>.yml.
release_default_datatrueWhether to release example data on first start (the example files under stations/, gui/ and recipes/). Once false, existing files are not overwritten and missing examples are not restored.

queue — Queue Defaults

Every station may override these same keys in its own stations/<id>.yml.

KeyDefaultDescription
base_length3Base queue length. Only waiting / running occupy length; pending_claim does not.
permission_tierstrueWhether permission tiers apply. When enabled, the highest number among emakistation.queue.<n> wins.
max_length32Hard ceiling after tiers; no permission can exceed it.
progress_mode"offline"How the head advances: offline follows real time, online only accumulates while the player is online.
cancel_refund_rate1.0Fraction of materials refunded when cancelling an entry (0.0 – 1.0).
tick_interval20Interval of the queue advance task, in ticks. There is exactly one server-wide timer.
speed_multiplier1.0Global recipe duration multiplier. Values of 0 or below are treated as 1.0.
purchase.enabledtrueServer-wide master switch for paid queue slots.
purchase.cost_file"queue_costs.yml"Price tier file name, relative to the plugin data folder.

pending_claim not occupying queue length is deliberate: otherwise a player whose warehouse and inventory are both full would be deadlocked by their own undelivered output.

cancel_refund_rate is not prorated by progress. In a serial single-line queue only the head has progress, and introducing per-entry progress accounting for an almost non-existent case is not worth it. This is an intentional simplification.

progress_mode: offline only means "the timer keeps running", not "delivery while offline". EmakiStorage refuses any write for an offline player, so entries that come due while offline are merely "due"; settlement happens at the player's next login.

When the price file is missing, empty or carries no usable price, purchases are refused rather than granted for free.

limits — Capacity Ceilings

KeyDefaultDescription
max_pending_claim100How many unclaimed outputs one player may accumulate. New submissions are refused at the ceiling.
warn_material_types50Above this many material kinds in one recipe, only a warning is logged; loading is not blocked.
batch_multiplier_max0Maximum multiplier per submission. 0 means no extra limit, still bounded by material amounts.

Material kind count is not limited by GUI slot count; warn_material_types is only a typo guard.

storage — Warehouse Channel

KeyDefaultDescription
enabledtrueMaster switch. Once off, EmakiStation never calls EmakiStorage at all.
batch_max_ops200Maximum operations per batch, matching EmakiStorage's behavior.batch_max_ops.

Even with enabled true, the warehouse channel additionally requires EmakiStorage to provide the emakistorage:atomic_batch capability. Without that capability there is no fallback to withdrawing item by item: that would make materials flash through the player's inventory once, creating an exploitable window instead.

When materials come from both the inventory and the warehouse, the plugin prefers the emakistorage:reservation capability: place a reservation in the warehouse (without actually withdrawing), spend from the inventory, then commit the reservation. A mid-way failure only needs the reservation released, and releasing cannot fail on warehouse capacity. On older EmakiStorage versions lacking that capability, it degrades to "withdraw from the warehouse first, deposit back on failure", where the deposit itself may be refused for lack of capacity — hence inferior to the reservation path.

persistence

KeyDefaultDescription
autosave_interval_seconds60Autosave interval in seconds.
save_on_submittrueWhether to flush immediately after a successful submission instead of waiting for the next autosave.

Entries in the queue file correspond to materials that have already been deducted, so this interval is shorter than the warehouse's autosave.

The queue file and the warehouse file are two independent files, so a hard crash can still leave them inconsistent (materials deducted but the entry unsaved, or the entry saved but the deduction unflushed). Every entry records its full consumption list to make manual reconciliation possible. Eliminating this window entirely would require a cross-plugin two-phase commit, which costs too much.

gui

KeyDefaultDescription
click_throttle_ms200Minimum interval between two clicks in one session, in milliseconds.
refresh_interval_ticks20How often an open window repaints its progress display, in ticks.