#### Specs

| Field              | Type                                 | Required | Description                              |
|--------------------|--------------------------------------|----------|------------------------------------------|
| `id`               | string                               | ✅ Yes   | Unique identifier                        |
| `dimensionId`      | string                               | ✅ Yes   | Dimension ID                             |
| `biomeWhiteList`   | string[]                             | ❌ No    | Biome whitelist (empty = all biomes)     |
| `spawnRate`        | number                               | ✅ Yes   | Average number of veins per chunk        |
| `placementHeight`  | [RandomInt](RandomInt.md)            | ✅ Yes   | Height distribution                      |
| `shapeBuilder`     | [ShapeBuilder](ShapeBuilder.md)      | ✅ Yes   | Shape generator                          |
| `composition`      | [ChanceMapping[]](ChanceMapping.md)  | ✅ Yes   | Vein composition                         |
| `variables`        | object                               | ❌ No    | Variables for substitution               |

```json
{
  "specs": [
    {
      // Unique ID
      "id": "nether-ore",
      // Game dimension
      "dimensionId": "minecraft:nether",
      // Biome list (optional)
      // Absence of the field or an empty array = all biomes
      "biomeWhiteList": [
        "minecraft:birch_forest"
      ],
      // Frequency per chunk
      // 1.5 => On average, 1.5 veins will be generated per chunk (excluding vein size)
      // Uses Poisson distribution
      "spawnRate": 1.5,
      // Vein height generator (see RandomInt)
      "placementHeight": {
        // In this case, a "uniform" distribution from 20 to 100 is used
        "type": "Uniform",
        "min": 20,
        "max": 110
      },
      // Vein shape generator (see ShapeBuilder)
      "shapeBuilder": {
        // In this case, a "potato" shape is used
        "type": "Potato",
        // Vein radius generator (see RandomInt)
        "radius": {
          // In this case, a "volume-balanced" distribution from 2 to 48 is used (see RandomInt)
          "type": "VolumeBalanced",
          "min": 2,
          "max": 48
        }
      },
      // Vein composition
      // The vein consists of components (see ChanceMapping)
      // The higher the component's chance, the more often it is used when building the vein
      // For example, with two components having chances 2 and 4, out of 6 vein blocks, 2 will be from the first component and 4 from the second
      "composition": [
        {
          // Chance for this component
          // Currently 2
          "chance": 2,
          "mapping": {
            // Stone is replaced with gold
            "minecraft:stone": "minecraft:gold_ore",
            // Deepslate is replaced with deepslate gold
            "minecraft:deepslate": "minecraft:deepslate_gold_ore"
          }
        },
        {
          // Chance for this component
          // Currently uses the variable %VAR
          // Variables always start with %
          "chance": "%VAR",
          "mapping": {
            // Stone is replaced with... (uses the variable %CUSTOM_ORE)
            "minecraft:stone": "%CUSTOM_ORE"
          }
        },
        ...
      ],
      "variables": {
        // You can now specify variable values
        "%VAR": 4,
        "%CUSTOM_ORE": "minecraft:gold_ore"
      }
    },
    ...
  ]
}
```