Skip to content

Configuration ​

The main configuration is plugins/EmakiStructure/config.yml; after you edit it, run /ems reload to apply the changes. If you write a top-level key the plugin does not know, the config precheck logs a WARN (config.yml.<key>); an illegal value is reported as error.config.invalid and replaced with a legal one so the plugin keeps running

The shipped defaults live in EmakiStructure/src/main/resources/config.yml; version is 1.0.5 and maintained by resource sync — do not edit it by hand

generate ​

FieldTypeDefaultRangeDescription
generate.size_limitlist<int>[128, 128, 128]each item 8–512Per-axis size limit [X, Y, Z]; selections and imported templates share it, anything larger is rejected
generate.max_blocks_per_tickint30001–200000Global block writes per tick shared by all generation tasks; the excess queues for the next tick
generate.entity_policystringallall / passive / nonePolicy for template entities and spawns/ point entries: spawn all / filter hostile and boss entities / spawn none; with none the point companion file does not run either
generate.ground_modestringskipskip / keep / fillGround fallback: skip aborts when any column under the structure bottom lacks solid support (never drops it in mid-air); keep ignores support and follows the terrain; fill extends unsupported columns downward with stone for up to 16 blocks, still aborting if nothing is found
generate.adaptive_throttlingbooleantruetrue / falseLinearly reduces the per-tick write cap to one quarter when TPS falls below the threshold, warning once per trigger
generate.queue_timeoutduration60splain seconds or 30s/5m/1h/1dMaximum time a generation task may wait in the queue; exceeding it aborts that generation

cache ​

FieldTypeDefaultRangeDescription
cache.max_entriesint128≥ 1Cache entry cap; metadata stays resident, block data loads on demand
cache.max_bytesint268435456≥ 1Estimated byte cap; an entry above it is not cached and a warning is logged (console.cache_rejected)

selection ​

FieldTypeDefaultRangeDescription
selection.session_timeoutduration30m1m–24hIdle selection-session lifetime; on timeout the highlight is destroyed and the session released

template ​

FieldTypeDefaultRangeDescription
template.import_max_file_bytesint33554432> 0Raw .nbt file size cap; larger files are rejected on import
template.legacy_policystringrejectreject / skipBlock states the current version cannot parse: reject rejects the whole file; skip drops the entry with a warning and places air at that coordinate
template.palette_limitint4096> 0Palette entry cap; exceeding it rejects the import
template.block_entity_max_bytesint65536> 0Per block-entity NBT payload cap; exceeding it rejects the import

spawn ​

Point files live at spawns/<template>.yml, one-to-one by name with structures/<template>.nbt; fields, coordinates, and a full example are covered in Structure Templates · Mob spawn companion file

FieldTypeDefaultRangeDescription
spawn.enabledbooleantruetrue / falseMaster switch; when off, spawns/ companion files are ignored entirely (no load, no warning)
spawn.max_per_generationint321–256Total mobs per generation; exceeding it rejects that companion file
spawn.batch_per_tickint81–64Mob spawn batch cap per tick
spawn.respect_entity_policybooleanfalsetrue / falseWhether third-party mobs whose hostility cannot be determined statically follow the conservative policy: false lets them through for feature completeness; true skips them

detection ​

FieldTypeDefaultRangeDescription
detection.sweep_intervalduration00 or ≥ 30sLow-frequency fallback sweep interval; 0 disables it and an enabled value must be at least 30s. Scans only the in-progress instance set — no world-wide traversal
detection.max_cold_checksint2568–4096Anchor candidate groups allowed per cold hit; after a restart or reload, clicking an existing structure is truncated at this budget and the remainder is dropped with a debug record
detection.instance_limitint8≥ 1In-progress instances per definition per player; the oldest is evicted first
detection.instance_ttlduration10m≥ 1mHow long an in-progress instance may stay unchanged before the sweep clears it
detection.debounceduration500ms≥ 0, accepts ms/30s/5mMerge window for changes to the same chunk coordinates
detection.retrigger_on_reformbooleanfalsetrue / falseWhether a destroyed structure re-fires when reassembled; false only restores the active instance, preventing farming
detection.sample_recheckbooleanfalsetrue / falseWhether the sweep does low-frequency sampled re-verification of active instances; off by default

cooldown ​

FieldTypeDefaultRangeDescription
cooldown.globalduration00 or e.g. 30s/5mGlobal cooldown (shared across players for the same structure); 0 means none. A definition's own cooldown node wins
cooldown.per_playerduration0samePer-player cooldown (tracked per structure and player)

replace_rules ​

The replace_rules set applies only to not-yet-generated chunks. The plugin checks rules in order and the first match wins and short-circuits; a miss lets the vanilla structure generate normally. Already-generated chunks and their structures are never rewritten

yaml
replace_rules:
  - structure: "minecraft:village_plains"   # only matches the minecraft: namespace
    template: "village_hub_a"               # replacement template (same name in structures/)
    chance: 0.5                             # probability [0.0, 1.0]
    worlds: ["world"]                       # world whitelist; absent/empty = all worlds
    biomes: ["plains"]                      # biome whitelist; absent/empty = no biome limit
    enabled: true                           # false = this rule does not participate
    apply_to_existing: false                # always false; a true value rejects the rule with a warning
  • A marker is written to replaced/<world>.marker for idempotency; replaced chunks are not replaced again
  • A missing referenced template logs a warning and lets the vanilla structure generate (console.replace_template_missing)
  • Known limitation: multi-piece structures (villages, etc.) may leave partial vanilla tail pieces

rollback ​

FieldTypeDefaultRangeDescription
rollback.enabledbooleantruetrue / falseMaster switch; turning it off restores the old semantics (an interrupted generation keeps its placed blocks) — debugging only
rollback.journal_max_bytesint67108864≥ 1048576Per-transaction delta snapshot cap; exceeding it aborts and rolls back that generation, never leaving a half-generated state

furniture ​

FieldTypeDefaultRangeDescription
furniture.enabledbooleantruetrue / falseMaster switch; when off the furniture/ companion file is ignored entirely (not loaded, not validated, not restored, no warning)

Recognized top-level keys ​

The precheck accepts 12 top-level keys: version, language, generate, cache, selection, template, spawn, detection, cooldown, replace_rules, rollback, furniture; any other top-level key is unknown to it