Repository navigation
Structure System
Requires Iskandert's Utilities 3.0.0.0.0 or newer (datapack load/ layout).
Multi-block structures defined in JSON: place with Structure Placer items, the Structure Placer Machine, monouse reward items, or OP commands. Patterns use a 3D character grid; each character maps to block alternatives in key.
| Topic | Page |
|---|---|
| Stages (gates on structures) | Home — Internal Stages |
| Stage actions | Stage-Actions |
Two JSON types, both under data/<namespace>/load/:
| Type |
"type" field |
Typical folder |
|---|---|---|
| Structure definitions | iska_utils:structure |
load/iska_utils_structure_definitions/ |
| Monouse items | iska_utils:structure_monouse_item |
load/iska_utils_structures_monouse/ |
Or data/<namespace>/load/<file>.json with the correct "type" (routed like other IskaUtils load files).
-
One file, many structures: the
structurearray can hold several definitions in the same JSON file. - Many files: all definitions from all matching files are loaded and merged.
Reload: /reload, /iska_lib_dev reload, or /iska_utils_structure reload.
| Value | Behaviour |
|---|---|
"overwritable": true |
Later packs / reloads may replace this definition when merging the same id |
"overwritable": false |
Protected from overwrite — use for pack content you want to keep |
{
"type": "iska_utils:structure",
"overwritable": false,
"structure": [
{
"id": "my_mod-my_structure",
"name": "My Custom Structure",
"description": "Tooltip text",
"icon": {
"type": "minecraft:item",
"item": "minecraft:diamond_block",
"count": 1
},
"pattern": [[["AAA"], ["ABA"], ["AAA"]]],
"key": {
"A": {
"display": "minecraft.stone",
"alternatives": [
{ "block": "minecraft:stone" },
{ "block": "minecraft:cobblestone" }
]
},
"B": {
"display": "minecraft.chest",
"alternatives": [{ "block": "minecraft:chest" }]
}
}
}
]
}| Field | Required | Default | Description |
|---|---|---|---|
id |
yes | — | Unique id: modid-name (used in commands and monouse place) |
name |
yes | — | Display name |
pattern |
yes | — | 3D layout (see Patterns) |
key |
yes | — | Maps pattern characters to blocks |
description |
no | — | Tooltip |
icon |
no | — | Item icon in machine GUI (type, item, count) |
can_force |
no | false |
Allow shift+place on placer item and place … force command |
can_replace |
no | [] |
Blocks/tags/tokens that may be overwritten (see Replacement) |
slower |
no | false |
5-tick delay between blocks |
place_like_player |
no | false |
Place as player (events, mod hooks) |
refresh |
no | false |
Schedule one block tick after each placement (redstone, observers) |
stages |
no | [] |
All listed stages required (/iska_lib_stage) |
machine |
no | true |
Show in Structure Placer Machine GUI |
hidden |
no | false |
Commands only; hidden from normal placement |
pattern is a 3D array [Y][Z][row] (each inner string is one row along X):
| Axis | Meaning |
|---|---|
| Y | Layer index (height), bottom to top |
| Z | Row index (north–south) |
| Characters in a row | West → east |
| Character | Meaning |
|---|---|
@ |
Structure center (anchor for placement / machine) |
| space | Skip (no block) |
| any other | Must exist in key
|
"pattern": [
[["AAA"], ["AAA"], ["AAA"]]
],
"key": {
"A": {
"display": "minecraft.stone",
"alternatives": [{ "block": "minecraft:stone" }]
}
}"pattern": [
[[" @ "], [" A "], [" B "], [" C "]]
],
"key": {
"A": { "display": "minecraft.stone", "alternatives": [{ "block": "minecraft:stone" }] },
"B": { "display": "minecraft.iron_block", "alternatives": [{ "block": "minecraft:iron_block" }] },
"C": { "display": "minecraft.gold_block", "alternatives": [{ "block": "minecraft:gold_block" }] },
"@": { "display": "minecraft.air", "alternatives": [{ "block": "minecraft:air" }] }
}"pattern": [
[["CCCCC"], ["WWWWW"], ["WWWWW"]],
[["CCCCC"], ["W W"], ["W W"]],
[["CC@CC"], ["W W"], ["W W"]],
[["CCCCC"], ["W W"], ["W W"]],
[["CCCCC"], ["WWWWW"], ["WWWWW"]]
],
"key": {
"C": { "display": "minecraft.cobblestone", "alternatives": [{ "block": "minecraft:cobblestone" }] },
"W": { "display": "minecraft.oak_planks", "alternatives": [{ "block": "minecraft:oak_planks" }] },
"@": { "display": "minecraft.cobblestone", "alternatives": [{ "block": "minecraft:cobblestone" }] }
}Each letter in the pattern points to:
| Field | Description |
|---|---|
display |
Tooltip/GUI label (minecraft.stone style) |
alternatives |
Ordered list; first valid block is preferred when placing |
Each alternative:
{ "block": "minecraft:oak_stairs", "properties": { "facing": "north", "half": "bottom" } }"W": {
"display": "minecraft.planks",
"alternatives": [
{ "block": "minecraft:oak_planks" },
{ "block": "minecraft:birch_planks" },
{ "block": "minecraft:spruce_planks" }
]
}A position is cleared only if the existing block matches an entry in can_replace (unless can_force / aggressive applies).
| Form | Example |
|---|---|
| Block id | "minecraft:dirt" |
| Tag | "#minecraft:flowers" |
| Token |
"$replaceable", "$air", "$fluids", "$plants", "$dirt", "$logs", "$stone", "$ores", … |
Match order: exact block → $ tokens → # tags. If nothing matches and can_force is false, placement stops at that cell.
{
"id": "my_mod-force_structure",
"name": "Bulldozer Structure",
"can_force": true,
"can_replace": [
"minecraft:dirt",
"minecraft:grass_block",
"$replaceable",
"#minecraft:flowers"
],
"pattern": ["..."],
"key": { "..." }
}-
Structure Placer item: shift + right-click (second click) to force within
can_replacerules. -
Command:
/iska_utils_structure place <id> <x> <y> <z> force— requirescan_force: true; overwrites every cell in the pattern.
| Flag | Effect |
|---|---|
refresh: true |
Tick each placed block once (redstone contraptions) |
slower: true |
5 ticks between blocks |
place_like_player: true |
Player placement semantics (slower, mod-compatible) |
{
"id": "my_mod-redstone_gadget",
"refresh": true,
"place_like_player": true,
"pattern": ["..."],
"key": { "..." }
}"stages": ["chapter_1_complete", "has_nether_star"]All listed stages must be satisfied for the player placing the structure. Empty array = no requirement.
Right-click consumable: gives items, places a structure, consumes the stack.
{
"type": "iska_utils:structure_monouse_item",
"overwritable": false,
"structure": [
{
"id": "iska_utils-wither_grinder",
"place": "iska_utils-wither_grinder",
"aggressive": false,
"give": [
{ "item": "minecraft:wither_skeleton_skull", "count": 3 },
{ "item": "minecraft:soul_sand", "count": 4 },
{ "item": "iska_utils:wither_proof_block", "count": 26 }
]
}
]
}| Field | Description |
|---|---|
id |
Entry id in this file |
place |
Structure id to place (must exist in a structure definition) |
give |
Items granted on use |
aggressive |
If true, place over any existing block (can destroy builds). Unlike can_force, no can_replace filter |
| Method | Notes |
|---|---|
| Structure Placer item | Manual placement at targeted block |
| Structure Placer Machine | Automated; RF/FE per block (server config); pulls materials; respects stages
|
| Monouse item | One-shot reward + place |
| Commands | OP — see below |
| Topic | Detail |
|---|---|
| Energy | RF/FE per block placed (configurable; 0 disables consumption) |
| Materials | Uses alternatives order from key
|
| Redstone | Ignore / low / high / pulse modes |
| GUI | Lists structures with machine: true and met stages
|
| Command | Description |
|---|---|
/iska_utils_structure list |
List loaded structure ids |
/iska_utils_structure reload |
Reload definitions and sync clients |
/iska_utils_structure info <id> |
Size, center, flags |
/iska_utils_structure place <id> <x> <y> <z> |
Place respecting can_replace
|
/iska_utils_structure place <id> <x> <y> <z> force |
Overwrite all pattern cells (can_force: true required) |
{
"type": "iska_utils:structure",
"overwritable": false,
"structure": [
{
"id": "example-simple_house",
"name": "Simple Wooden House",
"description": "Starter house",
"icon": { "type": "minecraft:item", "item": "minecraft:oak_planks" },
"can_replace": ["$replaceable", "$air", "$plants"],
"pattern": [
[["WWWWW"], ["W W"], ["W @ W"], ["W W"], ["WWWWW"]],
[["WWWWW"], ["W W"], ["W W"], ["W W"], ["WWWWW"]],
[["WWWWW"], ["W W"], ["W W"], ["W W"], ["WWWWW"]],
[["RRRRR"], ["RRRRR"], ["RRRRR"], ["RRRRR"], ["RRRRR"]]
],
"key": {
"W": {
"display": "minecraft.oak_planks",
"alternatives": [
{ "block": "minecraft:oak_planks" },
{ "block": "minecraft:birch_planks" },
{ "block": "minecraft:spruce_planks" }
]
},
"R": {
"display": "minecraft.oak_slab",
"alternatives": [
{ "block": "minecraft:oak_slab", "properties": { "type": "bottom" } }
]
}
}
}
]
}{
"type": "iska_utils:structure",
"overwritable": false,
"structure": [
{
"id": "example-redstone_machine",
"name": "Automated Redstone Machine",
"description": "Pistons and dispensers",
"icon": { "type": "minecraft:item", "item": "minecraft:redstone" },
"can_force": true,
"slower": true,
"place_like_player": true,
"can_replace": ["$replaceable", "$air", "$dirt"],
"stages": ["redstone_engineer"],
"pattern": [
[["SSSSS"], ["S S"], ["S@RRS"], ["S S"], ["SSSSS"]],
[[" "], [" P "], [" D "], [" H "], [" "]]
],
"key": {
"S": {
"display": "minecraft.stone",
"alternatives": [
{ "block": "minecraft:stone" },
{ "block": "minecraft:cobblestone" }
]
},
"R": {
"display": "minecraft.redstone_wire",
"alternatives": [{ "block": "minecraft:redstone_wire" }]
},
"P": {
"display": "minecraft.piston",
"alternatives": [{ "block": "minecraft:piston", "properties": { "facing": "up" } }]
},
"D": {
"display": "minecraft.dispenser",
"alternatives": [{ "block": "minecraft:dispenser", "properties": { "facing": "up" } }]
},
"H": {
"display": "minecraft.hopper",
"alternatives": [{ "block": "minecraft:hopper", "properties": { "facing": "down" } }]
}
}
}
]
}| Symptom | Likely cause |
|---|---|
| Structure not in list | JSON syntax error, wrong "type", or failed load — check log |
| Blocks skip / stop mid-build | Block not in can_replace and can_force false |
| Wrong block state | Fix properties on the alternative |
| “Cannot place” with stages | Player missing a stage in stages
|
force command fails |
Structure lacks can_force: true
|
After editing datapacks: /iska_lib_dev reload or /iska_utils_structure reload.