English
EmakiStructure
EmakiStructure does two jobs for you: structure generation and multiblock interaction. First you select a region and export it as a .nbt structure template, then place it back later at any facing. You can also record a contraption built from blocks as a multiblock definition: once players assemble the shape, it runs the actions you configured. If generation is interrupted by a reload or a server stop, the plugin rolls the area back to its pre-generation state. You can swap vanilla structures (such as villages) for your own templates in not-yet-generated chunks, and furniture from ItemsAdder / Oraxen / Nexo / CraftEngine is identified on export and restored as-is on placement
Basics
| Item | Value |
|---|---|
| Module version | 1.0.5 |
| Build artifact | EmakiStructure-1.0.5.jar |
| API coordinate | emaki.jiuwu.craft:emaki-structure-api:1.0.1 (compileOnly only; never dropped into plugins/) |
| Root command | /emakistructure (aliases /ems, /estruct) |
| Hard dependency | EmakiCoreLib (required: true) |
| Soft dependencies | MythicMobs, EmakiMobs, ItemsAdder, Oraxen, Nexo, CraftEngine (all required: false; the matching capability degrades when absent) |
| Permission nodes | emakistructure.use, emakistructure.edit, emakistructure.reload, emakistructure.admin |
| Descriptor baseline | api-version: "26.1", folia-supported: true |
NOTE
EmakiStructure is a .key-gated private module: it takes part in the default build only when a .key file exists at the repository root. If you only install and use the plugin, just ignore this line
Pages
| Page | Contents |
|---|---|
| Commands & Permissions | Selection, export, placement, multiblock, and debug commands |
| Structure Templates | Selection highlight, .nbt import/export validation, spawn and furniture companion files |
| Multiblock Structures | multiblocks/*.yml definitions, triggers, and incremental detection |
| Configuration | Every config.yml key |
| API & Integration | The emaki-structure-api facade and MultiblockTriggerEvent |
Core capabilities
| Capability | Description |
|---|---|
| Two-corner selection | /ems select pos1/pos2 to set corners, adjust to nudge, clear to reset; the region is outlined by a continuous glowing wireframe |
| Structure templates | Export a selection to structures/<name>.nbt and place it by facing (including mirror variants); imports are validated per file for size, palette, and block-entity payload |
| Generation guardrails | Per-tick write cap, TPS-adaptive throttling, queue timeout, ground support policy (skip/keep/fill), and player-trapped detection |
| Transaction rollback | When generation is interrupted (reload / stop / timeout / limit), a delta snapshot restores the area to its pre-generation state; uncommitted transactions are cleaned up at startup |
| Vanilla structure replacement | replace_rules replaces vanilla structures (villages, etc.) in not-yet-generated chunks with your own template; already-generated chunks are never rewritten |
| Multiblock structures | Record a layout to multiblocks/<id>.yml; when a player assembles the shape, the configured actions run. Supports shape validation, cooldown, conditions, and incremental detection |
| Four-source furniture | Export recognizes ItemsAdder / Oraxen / Nexo / CraftEngine furniture into furniture/<template>.yml, restores it on placement by facing, and removes it during rollback |
| In-structure mobs | spawns/<template>.yml companion files spawn mobs from points/spheres/regions (minecraft: / mythicmobs: / emakimobs: prefixes) |
Default data directory
text
plugins/EmakiStructure/
├── config.yml
├── structures/ ← .nbt structure templates (structure export output)
├── multiblocks/ ← multiblock definitions (multiblock export output)
├── spawns/ ← in-structure mob spawn companion files
├── furniture/ ← furniture restoration companion files (written on export)
├── journal/ ← generation transaction rollback logs (runtime files)
├── replaced/ ← vanilla replacement markers (runtime files)
└── lang/structures/ and multiblocks/ usually come from in-game commands, but you may write them by hand; spawns/ and furniture/ are hand-written or produced on export; journal/ and replaced/ are generated by the plugin at runtime — do not edit them by hand. After you edit files such as spawns/ by hand, run /ems reload once to apply the changes
Typical workflow
- First run
/ems select pos1and/ems select pos2to outline a region, and note the reported size - Then run
/ems structure export <name>to writestructures/<name>.nbt - (Optional) Author
spawns/<name>.ymlto decide which mobs spawn in this structure; if the selection contained furniture-plugin blocks, the furniture record is written automatically during export - Run
/ems get <name> [facing]to preview in place, and once you are happy, run/ems structure place <name> <facing>to place it for real - Multiblocks: run
/ems multiblock export <id>to record the layout from the selection; the actions fire once players assemble the shape - For vanilla structure replacement, declare entries under
replace_rulesinconfig.yml
Relation to other modules
| Module | Collaboration |
|---|---|
| EmakiCoreLib | Hard dependency: dispatcher, debug command, messages, and config precheck infrastructure; multiblock trigger actions run through the CoreLib action pipeline |
| EmakiMobs / MythicMobs | The spawns/ companion file can spawn emakimobs: / mythicmobs: custom mobs (both optional) |
| ItemsAdder / Oraxen / Nexo / CraftEngine | Optional furniture and custom-block sources; matching entries are skipped with a warning when absent |