| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
| title | Procedural Objects |
|---|---|
| description | Iris documentation: Procedural Objects |
| published | true |
| date | 2026-10-04 13:00:54 UTC |
| tags | iris |
| editor | markdown |
| dateCreated | 2026-08-09 00:00:00 UTC |
Procedural objects are structures Iris builds from JSON parameters instead of loading from .iob files. Six families exist, all under proceduralObjects on a biome or a region: trees, fungi, coral, crystals, formations, ruins.
Trees have their own page: 17b - Procedural Trees. This page covers the shared model, the other five families, and sapling overrides.
Related: 12 - Regions, 13 - Biomes, 15 - Caves & Carving, 16 - Surfaces, Decorators & Deposits, 18 - Structures Overview, 19 - Objects, 20 - Object Placement, 35 - Vanilla Passthrough.
Each entry generates variants different shapes from its settings and seed. Increase variants for more shapes, or change seed for a different set.
With unchanged settings and the same Iris build, each variant retains its shape, accents, and attachments across server restarts and parallel generation.
chance controls how often an entry places in a chunk. density is the number of attempts in a chunk that passes. chance: 0.5, density: 4 gives four attempts in half the chunks.
Surface biome, region, and cave biome lists all contribute. A biome-owned CARVING_ONLY entry places only in that cave biome. Region-owned entries apply throughout the region. Use the object placement settings to control terrain support and anchoring.
Snippet key: procedural-objects. Valid on biomes and regions.
| Field | Type | Family |
|---|---|---|
| trees | IrisProceduralTree[] | Trunk plus canopy, optionally branches, roots and forks. See 17b |
| fungi | IrisFungus[] | Stem plus cap, or sideways shelf brackets |
| coral | IrisCoral[] | Waterlogged reef structures in five forms |
| crystals | IrisCrystal[] | Budding base with tapered shards. Cave-first |
| formations | IrisFormation[] | Natural rock landmarks with strata and erosion |
| ruins | IrisRuin[] | Man-made shapes with weathering, erosion and burial |
{
"proceduralObjects": {
"trees": [ { "...": "..." } ],
"crystals": [ { "...": "..." } ]
}
}Every family supports these placement fields. Defaults differ per family and are noted where they diverge.
| Field | Default | What it does |
|---|---|---|
| name | family name | Used in logs and as the variant load key. Must be unique within a pack if you want to identify variants in debug output |
| chance | 0.4 (trees, fungi, coral), 0.2 (crystals), 0.05 (ruins), 0.02 (formations) | Probability the entry attempts anything at all in a given chunk. 0 never attempts. 1 attempts every chunk |
| density | 1 | Attempts once the chance roll passes. Raising this clusters objects. Raising chance spreads them |
| variants | 8 (trees), 6 (all others) | Number of distinct shapes, 1 to 64 |
| seed | 1337 | Bake seed. Change it to get an entirely different set of shapes from identical settings |
| mode | CENTER_HEIGHT, except ruins MIN_HEIGHT | Terrain anchor mode. MIN_HEIGHT plants the lowest footprint corner, good for slabs and rubble on slopes. CENTER_HEIGHT averages, good for tall pillars |
| rotation | identity | Rotates placements so variants do not all face the same direction |
| clamp | unlimited | Min and max terrain height at which the entry may place |
| carvingSupport | SURFACE_ONLY, except crystals CARVING_ONLY | SURFACE_ONLY places on terrain. CARVING_ONLY searches carved cave space. ANYWHERE uses the surface path without the surface-only rejection |
| underwater | false, except coral true | Anchors on terrain height ignoring the water surface, so the object grows from the seafloor instead of the waterline |
| translate | zero | XYZ offset. A negative Y sinks the object into the ground |
| stiltSettings | unset | Configuration for STILT, MIN_STILT, FAST_STILT, FAST_MIN_STILT, CENTER_STILT, ERODE_STILT, ORGANIC_STILT |
| vacuumSettings | unset | Configuration for VACUUM, VACUUM_HIGH, VACUUM_FAST, VACUUM_ORGANIC, VACUUM_WAVY |
| surfaceSupportBuffer | 3 (formations only) | Solid ground required around the footprint. Iris uses the larger of this and the dimension objectSurfaceSupportBuffer |
Only CARVING_ONLY entries take the cave path. Those search the chunk for an anchor using the active cave profile's defaultObjectAnchor, anchorScanStep, anchorSearchAttempts, and objectMinDepthBelowSurface; an entry that finds no anchor is skipped for that attempt. Dry entries reject water, explicit lava, and ordinary carved cells at or below the dimension cave-lava height. Set underwater: true only when a procedural object is intentionally allowed to anchor in cave fluid. The profile's defaultObjectPlaceMode overrides the entry mode, but only when the entry left mode at the default CENTER_HEIGHT. See 15 - Caves & Carving.
plausible is a tree-only field. Every other family places with decay prevention active.
Snippet key: fungus. A stem column with a cap grown on top, or a sideways shelf bracket.
| Field | Default | What it does |
|---|---|---|
| stem / stemPalette | minecraft:mushroom_stem | Stem material. Palette wins |
| cap / capPalette | minecraft:red_mushroom_block | Cap material. Palette wins |
| stemHeightMin / stemHeightMax | 5 / 9 | Stem height range spread over the variant pool |
| stemWidth | 1 (1–3) | 1 is a single column, 3 a chunky trunk |
| stemCurve | 0 | Degrees of lean off vertical |
| stemLeanAzimuth | 0 | Direction of that lean |
| stemWaveAmplitude | 0.4 | Blocks of sideways wobble up the stem, so it is not a ruler |
| stemWavePeriods | 1 | Full sine wobbles over the stem height |
| capShape | DOME | DOME, FLAT, FUNNEL, CONICAL, FLAT_WIDE |
| capRadiusMin / capRadiusMax | 3 / 5 | Cap radius from center to rim |
| capThickness | 1 (1–3) | Shell thickness. 1 is a thin skin, 3 a fleshy slab |
| capSquish | 0.4 | Vertical flatten, 0 full height and 1 a flat disc |
| capDroop | 20 | Degrees the rim curls toward the ground |
| capOverhang | 2 | Blocks the cap extends past the stem before the rim begins |
| gillBlock / gillPalette | unset | Underside layer — gills, or shroomlight for a glowing cap |
| gillChance | 0.85 | Share of underside blocks replaced when a gill block is set |
| spotBlock / spotPalette | unset | Speckles across the cap top |
| spotChance | 0.18 | Share of top blocks replaced, selected by value noise so spots cluster |
| shelf | false | Switches to a bracket polypore: a flat sideways fan off a very short or absent stem |
| shelfRadius | 3 | Fan radius in shelf mode |
Snippet key: coral. Defaults to underwater: true and waterlogged: true, so it grows from the seafloor and stays alive.
| Field | Default | What it does |
|---|---|---|
| waterlogged | true | Requests waterlogging for waterloggable blocks submerged in actual water. Dry placements and lava clear wet states; set false for dry coral |
| form | BRANCHING | BRANCHING, FAN, BRAIN, PILLAR, TENDRIL. Each runs a different generator |
| block / blockPalette | minecraft:tube_coral_block | Structural body. A palette mixes tube/brain/bubble/fire/horn tones across one reef |
| tipBlock / tipPalette | unset | Placed at branch tips and the top. FAN uses the highest occupied cell in each column, keeping tips on its silhouette |
| tipChance | 0.6 | Per eligible tip position |
| heightMin / heightMax | 4 / 8 | Overall height |
| spread | 3 | Horizontal reach. Arm length for BRANCHING, base footprint for the others |
| sway | 0.5 | Lateral wobble, 0 ruler-straight and 1 heavily wandering |
| branchCount | 4 (1–12) | BRANCHING: arms off the central stalk |
| branchLength | 3 | BRANCHING: arm length before the tip |
| branchElevation | 55 | BRANCHING: degrees up from horizontal. 90 is straight up |
| branchAzimuth | GOLDEN_ANGLE | BRANCHING: GOLDEN_ANGLE, EVEN, or RANDOM distribution around the stalk |
| subBranches | true | BRANCHING: split each arm once for a bushier reef |
| subBranchCount | 2 (1–5) | Sub-arms per arm |
| subBranchScale | 0.5 | Sub-arm length as a fraction of the parent |
| tipClusterRadius | 1 (0–4) | BRANCHING and PILLAR: tip cluster size |
| brainRadius | 3 (1–8) | BRAIN: blob radius |
| brainRoughness | 0.35 | BRAIN: surface wrinkling. 0 is a smooth dome |
| pillarRadius | 1 (1–12) | PILLAR: column radius |
| fanWidth | 3 (1–8) | FAN: half-width of the upright plane |
| tendrilCount | 4 (1–12) | TENDRIL: number of thin wavy stalks |
Snippet key: crystal. A budding base blob with tapered shards radiating from it. Defaults to carvingSupport: CARVING_ONLY and chance: 0.2, so it needs carved cave space to place at all. See 15 - Caves & Carving for the anchor settings that govern it.
| Field | Default | What it does |
|---|---|---|
| growthSurface | FLOOR | FLOOR points shards up, CEILING down, WALL outward. This orients the baked geometry only. Use the cave anchor mode to actually land it on a ceiling |
| block / blockPalette | minecraft:amethyst_block | Shard body. A palette mixes amethyst, calcite and tinted glass into one prismatic cluster |
| tipBlock / tipPalette | unset | Different block at the very point of each shard |
| tipChance | 0.6 | Per shard |
| glow | false | With no tip block set, sprinkles glowBlock among the tips instead |
| glowBlock | minecraft:glowstone | The light source used by glow |
| baseBlock / basePalette | minecraft:budding_amethyst | The blob the shards grow from |
| baseRadius | 1.6 | Blob radius. 0 makes shards spring from a single point |
| baseNoise | 0.35 | Surface lumpiness of the blob, so it is not a clean sphere |
| shardCountMin / shardCountMax | 5 / 11 | Shards per cluster |
| shardLengthMin / shardLengthMax | 3 / 8 | Shard length from base to tip |
| shardBaseRadius | 1.4 | Thickness at the shard base end |
| shardTaper | 0.85 | How aggressively it narrows. 0 is a near-constant column, 1 a sharp spike. Every shard ends in a single block regardless |
| spreadAngle | 45 | Half-angle of the cone the shards fan within. 0 makes them all parallel. Large values give a starburst |
| distribution | GOLDEN_ANGLE | GOLDEN_ANGLE for an evenly spaced rosette, RANDOM for a chaotic clump |
| jitter | 0.25 | Angular randomness on top of the distribution, so the cluster never looks mechanical |
Snippet key: formation. Natural and magical landmarks. Default chance: 0.02 — these are meant to be rare, and they are the family most likely to widen the pack's mantle radius.
| Field | Default | What it does |
|---|---|---|
| form | SPIRE | SPIRE, HOODOO, ARCH, SEA_STACK, BOULDER, BASALT_COLUMN, ICEBERG, FISSURE, SPIRAL, OVERHANG |
| block / blockPalette | minecraft:stone | Main rock body |
| capBlock / capPalette | unset | Caprock on the crown, and the overhanging cap for HOODOO. Unset means the main rock everywhere |
| strataPalette | unset | Horizontal color bands. Every strataThickness blocks the palette advances, which is what produces the badlands look |
| strataThickness | 3 (1–32) | Band thickness |
| heightMin / heightMax | 14 / 26 | Total height when roomHeightFraction is zero |
| roomHeightFraction | 0 (0..1) | In an authored subterrain cave room, sizes the formation to this fraction of the available vault. Zero uses heightMin / heightMax |
| baseWidthMin / baseWidthMax | 3 / 6 | Base radius |
| topWidth | 0 | Radius at the very top before the profile applies. 0 tapers to a point |
| profile | TAPER | CONSTANT, LINEAR, TAPER, PARABOLIC, BULGE — how the radius changes with height |
| profileWaist | 0.55 | Normalized height of the pinch for PARABOLIC, used by hoodoos |
| profileWaistFloor | 0.35 | Minimum radius fraction at that waist. Lower pinches tighter |
| lean | 0 | Degrees off vertical. The whole body is sheared |
| leanAzimuth | 0 | Lean direction |
| roughness | 0.3 | 3D noise perturbation of the radius, 0 clean and 1 heavily eroded. This is the main "does it look like rock" control |
| jitter | 0.15 | Per-block surface noise that adds and removes isolated edge blocks |
| surfaceSupportBuffer | 3 (0–16) | Solid ground required beyond the lowest footprint blocks. Iris takes the larger of this and the dimension objectSurfaceSupportBuffer |
| hoodooCapRadius | 3 | HOODOO: extra cap radius for the mushroom overhang. 0 disables it |
| hoodooCapHeight | 3 (1–6) | HOODOO: cap slab thickness |
| archSpan | 10 | ARCH: gap width between the legs |
| archThickness | 3 | ARCH: leg and span thickness |
| archAsymmetry | 0.35 (0–1) | ARCH: deterministic variation in leg steepness, crown position, depth bow and tube width. 0 mirrors the two sides. 1 is strongly organic |
| basaltColumns | 5 (2–12) | BASALT_COLUMN: columns per cluster |
| basaltColumnRadius | 1 | BASALT_COLUMN: radius of each column |
| basaltHeightVariance | 0.45 | BASALT_COLUMN: how much column heights differ, 0 all equal and 1 highly varied |
| icebergPeaks | 3 (1–12) | ICEBERG: irregular tapered summits above the broad faceted body |
| fractureCount | 3 (2–8) | FISSURE: separated shards divided by open cracks |
| fractureSeparation | 2 (1–16) | FISSURE: clear-air gap between neighboring shards |
| spiralTurns | 1.5 (0.25–6) | SPIRAL: complete turns from the grounded base to the curled tip |
| spiralRadius | 4 (1–32) | SPIRAL: starting distance from the open center. The radius tightens toward the tip |
| spiralThickness | 2 (1–8) | SPIRAL: radius of the swept tube |
| overhangReach | 8 (1–32) | OVERHANG: horizontal reach of the hooked cantilever |
| overhangDrop | 3 (0–16) | OVERHANG: downward curl at the free tip |
When a procedural cave placement resolves to FLOOR, its lowest occupied block rests in the first open cell above the supporting floor. Alignment accounts for rotation; configured translate and random Y offsets still apply afterward. Ceiling, CENTER and surface placements keep their own anchor behavior.
For room-scaled formations, set carvingSupport: "CARVING_ONLY" and roomHeightFraction, for example 0.25. The selected room supplies the local floor and ceiling after anchoring; placements still respect its protected solids and passage. A formation that cannot fit is skipped. Feature-owned continuous pillars are configured separately with pillarSpacing in Authored Subterrain Features.
ICEBERG combines a low, wide body with independently varied summits. FISSURE keeps its shards disconnected so the cracks remain real negative space. SPIRAL sweeps a tightening helix with an open center. OVERHANG grows vertically before curling outward and down. ARCH sweeps one connected bridge between independently shaped feet, its configured height is the actual top bound, and the opening stays traversable. A pointed SPIRE always retains its final tip even at a zero-width top.
Snippet key: ruin. Man-made shapes that are weathered, eroded, and partly buried. Default chance: 0.05 and mode: MIN_HEIGHT.
| Field | Default | What it does |
|---|---|---|
| form | PILLAR | PILLAR broken column, WALL gapped segment, ARCH two legs and a span, FLOOR_SLAB foundation patch, RUBBLE low scattered pile |
| block / blockPalette | minecraft:cobblestone | Bulk material before weathering |
| heightMin / heightMax | 4 / 9 | Structure height, or slab thickness and mound height for the flat forms |
| widthMin / widthMax | 1 / 3 | Footprint along X |
| lengthMin / lengthMax | 3 / 7 | Footprint along Z |
| weatheredBlock | minecraft:mossy_cobblestone | The weathered swap, used when no palette is set |
| weatheringPalette | unset | Palette of weathered variants, overriding the single block |
| mossiness | 0.45 | Share of the structure that weathers. The mask is noise-driven and biased toward lower rows, so moss climbs from the ground |
| weatheringScale | 1.0 (0–8) | Weathering noise scale. Higher gives busy speckles. Lower gives broad mossy zones |
| erosion | 0.25 | How crumbled it is. Blocks below this noise threshold are deleted. The bottom row and core legs are never eroded, so the shape does not collapse into confetti |
| erosionScale | 1.5 (0–8) | Erosion noise scale. Higher knocks out small holes. Lower carves large missing chunks |
| buriedFraction | 0.2 | Fraction of the height that sits below the surface, so the ruin reads as settled |
| accents | [] | IrisRuinDecorator entries applied after erosion |
Snippet key: ruin-decorator.
| Field | Default | What it does |
|---|---|---|
| target | TOP | TOP sits on the highest block of each column. SURFACE clings to air-facing vertical faces. BASE_SCATTER rings the ground around the base |
| block | required | Block id. Ignored when palette is set |
| palette | unset | Noise palette, wins over block |
| chance | 0.4 | Per candidate position |
| scatterRadius | 2 | For BASE_SCATTER, how far beyond the footprint the ring extends |
IrisTree lives on object placements (IrisObjectPlacement.trees), not under proceduralObjects. It maps a grown sapling to that placement's objects. This is a gameplay growth replacement, not worldgen scatter, and it never touches procedural trees.
| Field | What it does |
|---|---|
| treeTypes | Bukkit TreeType names this placement replaces, matched case-insensitively |
| sizes | IrisTreeSize entries (width by depth) describing the sapling footprints it applies to. Width and depth are matched either way round, so a 1x2 entry also matches 2x1 |
| anyTree | Removed. It was never read at runtime. Matching is by treeTypes only |
| anySize | Removed. It was never read at runtime. Matching is by sizes only |
Vanilla sapling growth continues until this is on. The enable recipe is 35 - Vanilla Passthrough Task 4.
Dimension treeSettings gates the whole feature:
| Field | Default | What it does |
|---|---|---|
| enabled | false | Off by default. Nothing replaces grown trees until this is true |
| mode | FIRST | FIRST uses biome matches and only falls back to region matches when the biome has none. ALL pools biome and region matches and picks randomly from the combined list. Dimension-level object placements are not consulted in either mode |
| Back | FazBrowse Home | New Git URL |