# hbm:stratum

Forms a wavy horizontal replacement layer around `y_level`.

## Fields

| Field | Meaning and default | Range |
| - | - | - |
| `density` | Chance of placing each eligible block; use `[0, 1]`. | finite `f32` |
| `domain` | Noise-domain ID used to shape the layer. | |
| `max_range` | Upper range before the layer thickness folds back. | `i32` |
| `range_mult` | Converts noise above the threshold into vertical half-thickness. | `i32` |
| `replaceable` | Vanilla rule test selecting blocks the layer can replace. | |
| `replaceable.predicate_type` | Vanilla rule-test type. | |
| `replaceable.tag` (Optional) | Block tag for tag_match. | |
| `replaceable.block` (Optional) | Block ID for block_match. | |
| `scale` | Horizontal noise sampling scale. | finite `f64` |
| `state` | Block state placed in the layer. | |
| `state.id` | Registered block ID. | |
| `state.properties` (Optional) | Block-state property names and string values. | |
| `threshold` | Minimum noise value for a column to enter the layer. | `i32` |
| `y_level` | Centre Y of the layer. | `i32` |

The top-level `type` selects this feature; the remaining fields belong beside it.

## Example

Source path: `data/hbm/worldgen/feature/stratum_gneiss.json`

```json
{
  "type": "hbm:stratum",
  "density": 1.0,
  "domain": "hbm:noise/stratum_gneiss",
  "max_range": 4,
  "range_mult": 3,
  "replaceable": {
    "predicate_type": "minecraft:tag_match",
    "tag": "minecraft:stone_ore_replaceables"
  },
  "scale": 0.01,
  "state": "hbm:stone_gneiss",
  "threshold": 5,
  "y_level": 30
}
```
