#### Specs

| Поле | Тип                                 | Обязательно | Описание |
|------|-------------------------------------|-------------|----------|
| `id` | string                              | ✅ | Уникальный идентификатор |
| `dimensionId` | string                              | ✅ | ID размерности |
| `biomeWhiteList` | string[]                            | ❌ | Белый список биомов (пусто = все) |
| `spawnRate` | number                              | ✅ | Среднее количество жил на чанк |
| `placementHeight` | [RandomInt](RandomInt.md)           | ✅ | Распределение высоты |
| `shapeBuilder` | [ShapeBuilder](ShapeBuilder.md)     | ✅ | Генератор формы |
| `composition` | [ChanceMapping[]](ChanceMapping.md) | ✅ | Состав жилы |
| `variables` | object                              | ❌ | Переменные для подстановки |

```json
{
  "specs": [
    {
      // Уникальный ИД
      "id": "nether-ore",
      // Размерность игры
      "dimensionId": "minecraft:nether",
      // Список биомов (опционально)
      // Отсутствие поля или пустой массив = все биомы
      "biomeWhiteList": [
        "minecraft:birch_forest"
      ],
      // Популярность в чанке 
      // 1.5 => Значит, что в среднем будет создаваться 1.5 жилы в чанке (без учета размеров жилы)
      // Используется распределение пуассона
      "spawnRate": 1.5,
      // Генератор высоты жилы (см RandomInt)
      "placementHeight": {
        // В данном случае используется "равномерное" распределение от 20 до 100
        "type": "Uniform",
        "min": 20,
        "max": 110
      },
      // Генератор формы жилы (см ShapeBuilder)
      "shapeBuilder": {
        // В данном случае используется "картошка"              
        "type": "Potato",
        // Генератор радиуса жилы (см RandomInt)
        "radius": {
          // В данном случае используется "распределение по объему" от 2 до 48. (см RandomInt)
          "type": "VolumeBalanced",
          "min": 2,
          "max": 48
        }
      },
      // Состав жилы
      // Жила состоит из компонентов (см ChanceMapping)
      // Чем больше chance компонента, тем чаще он используется при построении жилы
      // Например есть два компонента с шансами 2 и 4, это значит что из 6 блоков жилы 2 будут из первого компонента, 4 из второго
      "composition": [
        {
          // Шанс для данного компонента
          // сейчас 2
          "chance": 2,
          "mapping": {
            // Камень меняется на золото
            "minecraft:stone": "minecraft:gold_ore",
            // "глубокий-камень" меняется на "глубокое"-золото
            "minecraft:deepslate": "minecraft:deepslate_gold_ore"
          }
        },
        {
          // Шанс для данного компонента
          // Сейчас используется переменная %VAR
          // Переменные всегда начинаются с %
          "chance": "%VAR",
          "mapping": {
            // Камень меняется на... (используется переменная %CUSTOM_ORE)
            "minecraft:stone": "%CUSTOM_ORE"
          }
        },...
      ],
      "variables" : {
        // Теперь можно указать значения переменных 
        "%VAR" : 4,
        "%CUSTOM_ORE" : "minecraft:gold_ore"
      }
    },...
  ]
}
```