Skip to content

pillar_processor

FinnSetchell edited this page Aug 15, 2026 · 2 revisions

pillar_processor

Extends a pillar from a trigger marker block until it reaches solid ground. You place a single marker block in your NBT (say lime stained glass), and at generation time the processor replaces the marker and grows a column of your chosen block down (or up) through air and liquids until it hits terrain. Use it for legs under stilted builds, chains hanging from a ceiling, or to extend the base of a structure down to the surface.

The pillar logic is ported from RepurposedStructures (TelepathicGrunt). The altitude-aware block randomizer is inspired by YUNG's API.

Minimal example

A marker of lime stained glass grows a chain pillar upward, up to 60 blocks:

{
  "processor_type": "moogs_structures:pillar_processor",
  "direction": "up",
  "pillar_length": 60,
  "pillar_trigger_and_replacements": [
    {
      "trigger":     { "Name": "minecraft:lime_stained_glass" },
      "replacement": { "Name": "minecraft:chain" }
    }
  ]
}

Fields

Field Type Required Default Notes
pillar_trigger_and_replacements array of {trigger, replacement} yes Each entry maps one marker block-state to the block the pillar fills with. Both are full block-state objects (Name + optional Properties).
direction direction string no down Axis the pillar grows along. down samples the terrain and stops at ground; up (and any other direction) skips terrain sampling.
pillar_length int no 1000 Max blocks from the marker before the pillar stops.
original_replaced_block block-state no (the trigger's replacement) What the marker position itself becomes. Set to minecraft:structure_void to make the marker vanish while the pillar still fills.
forced_placement bool no false false fills only through non-occluding blocks (air, liquids, plants) and stops at the first solid. true also carves through breakable solids, ignoring the terrain floor; stops only at unbreakable blocks, build height, or pillar_length.
pillar_processor_list resource location no minecraft:empty A registered processor_list run over every block the pillar places, in order. Use it to weather or decorate the fill.
pillar_state_randomizer object no (none) Vary the fill block by roll and altitude instead of a flat replacement. See below.

pillar_state_randomizer

When present, each pillar block is rolled from this instead of the flat replacement.

"pillar_state_randomizer": {
  "default": { "Name": "minecraft:deepslate" },
  "entries": [
    { "block": { "Name": "minecraft:magma_block" }, "probability": 0.35, "max_y": 32 },
    { "block": { "Name": "minecraft:cobbled_deepslate" }, "probability": 0.2 }
  ]
}
Field Type Required Default Notes
default block-state yes Used when no entry is picked, or a picked entry fails its altitude check.
entries array no [] Weighted candidates.
entries[].block block-state yes The candidate block.
entries[].probability float yes 0.0 to 1.0. Entries occupy probability bands in list order; leftover probability falls to default.
entries[].min_y / max_y int no (none) Inclusive altitude bounds. Outside the range, the entry is skipped and the roll falls to default.

Probabilities are cumulative bands, not independent chances: two entries at 0.35 and 0.2 leave 0.45 for default. If they sum past 1.0, later entries never get reached.

Gotchas

  • The marker block is consumed. If you leave original_replaced_block unset, the marker position becomes that trigger's replacement, not air. Use minecraft:structure_void if you want the marker gone.
  • down is the only direction that stops at terrain. up will run the full pillar_length unless it hits something solid, so set a sane length.
  • Multiple triggers in one processor share the pillar_state_randomizer and other settings. For different behaviour per marker, use multiple pillar_processor entries in the list.

See also

Clone this wiki locally