# hbm:stratum_3d

Places blocks where three noise fields form a sparse 3D deposit.

## Fields

| Field | Meaning and default | Range |
| - | - | - |
| `domain_x` | Noise domain sampled on the Y/Z plane. | |
| `domain_y` | Noise domain sampled on the X/Z plane. | |
| `domain_z` | Noise domain sampled on the X/Y plane. | |
| `replaceable` | Vanilla rule test selecting blocks to 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_h` | Horizontal noise sampling scale. | finite `f64` |
| `scale_v` | Vertical noise sampling scale. | finite `f64` |
| `state` | Block state placed in the deposit. | |
| `state.Name` | Registered block ID. | |
| `state.Properties` (Optional) | Block-state property names and string values. | |
| `threshold` | Minimum product of the three noise values for placement. | finite `f64` |

The top-level `type` selects this feature; `config` supplies the fields above.

> **since NTM 1.0.3**
>
> ## Domain validation
>
> Each domain used by `domain_x` or `domain_z` must keep the same axis and the same `scale_h`/`scale_v` pair across all loaded 3D-stratum definitions. `domain_x` and `domain_z` use distinct IDs, including when both scales are equal. Reusing a domain on the same axis with the same scales is supported.
>
> Conflicts fail worldgen registry loading when the world opens. The error names the domain, both configured features, their axis fields and their sampling scales. `domain_y` may reuse a domain independently of these axis and scale restrictions.

## Example

Source path: `data/hbm/worldgen/configured_feature/stratum_bauxite.json`

*NTM 1.0.0:*

```json
{
  "type": "hbm:stratum_3d",
  "config": {
    "domain_x": "hbm:noise/stratum_bauxite/x",
    "domain_y": "hbm:noise/stratum_bauxite/y",
    "domain_z": "hbm:noise/stratum_bauxite/z",
    "replaceable": {
      "predicate_type": "minecraft:tag_match",
      "tag": "minecraft:stone_ore_replaceables"
    },
    "scale_h": 0.03,
    "scale_v": 0.15,
    "state": {
      "Name": "hbm:stone_resource_bauxite"
    },
    "threshold": 300.0
  }
}
```

*NTM 1.0.1–1.0.4:*

```json
{
  "type": "hbm:stratum_3d",
  "config": {
    "domain_x": "hbm:noise/stratum_bauxite/x",
    "domain_y": "hbm:noise/stratum_bauxite/y",
    "domain_z": "hbm:noise/stratum_bauxite/z",
    "replaceable": {
      "predicate_type": "minecraft:tag_match",
      "tag": "minecraft:base_stone_overworld"
    },
    "scale_h": 0.03,
    "scale_v": 0.15,
    "state": {
      "Name": "hbm:stone_resource_bauxite"
    },
    "threshold": 300.0
  }
}
```
