1. Вики
  2. /Генерация мира
  3. /Объекты и правила объектов

Объекты и правила объектов

Добавляйте руды, растения, деревья и постройки в генерацию мира Minecraft Bedrock с помощью объектов (features) и правил объектов, с примером рубиновой руды и всеми типами объектов.

Всё, что украшает землю, - это объект (feature): рудные жилы, деревья, цветы, трава, валуны, источники, кораллы. Если это не основной рельеф и не моб, скорее всего, это объект.

Чтобы объект появился в мире, нужны два файла:

  • Объект говорит, что ставить: рудную жилу, дерево, одиночный блок.
  • Правило объекта говорит, где и как часто: в каких биомах, сколько раз на чанк, на какой высоте.

В этом гайде вы сделаете так, чтобы рубиновая руда появлялась под землёй во всех биомах верхнего мира.

Файлы

Пакет поведения
BP/
  blocks/
    ruby_ore.json
  features/
    ruby_ore_feature.json
  feature_rules/
    ruby_ore_rule.json

Шаг 1: блок руды

Сначала нужен блок, который будем ставить. Сделайте обычный свой блок wiki:ruby_ore с текстурой и таблицей добычи. Если вы ещё не делали блоки, пройдите гайд Ваш первый блок.

Шаг 2: объект

BP/features/ruby_ore_feature.json
{
  "format_version": "1.13.0",
  "minecraft:ore_feature": {
    "description": {
      "identifier": "wiki:ruby_ore_feature"
    },
    "count": 6,
    "replace_rules": [
      {
        "places_block": "wiki:ruby_ore",
        "may_replace": [
          "minecraft:stone",
          "minecraft:granite",
          "minecraft:diorite",
          "minecraft:andesite"
        ]
      }
    ]
  }
}
  • Корневой ключ, здесь minecraft:ore_feature, - это тип объекта. В каждом файле ровно один. Все они перечислены в таблице внизу страницы.
  • count - сколько блоков пытается поставить одна жила. У алмазов жилы маленькие, у угля большие.
  • replace_rules говорит, какой блок куда ставить. Руда заменяет только блоки из may_replace, поэтому никогда не висит в воздухе в пещерах и не проедает землю.

Глубинносланцевая версия

Добавьте в replace_rules вторую запись с "places_block": "wiki:deepslate_ruby_ore" и "may_replace": ["minecraft:deepslate"]. Тогда одна жила будет выглядеть правильно в обоих слоях, совсем как ванильные руды.

Правила имён

  • Один объект на файл.
  • Имя файла должно совпадать с частью идентификатора после двоеточия. wiki:ruby_ore_feature лежит в ruby_ore_feature.json. Пространство имён при сравнении не учитывается.
  • Если в двух пакетах один и тот же идентификатор, побеждает пакет, который выше в списке. Так можно заменить ванильный объект.

Шаг 3: правило объекта

Объект ничего не делает, пока правило объекта не привяжет его к биомам:

BP/feature_rules/ruby_ore_rule.json
{
  "format_version": "1.13.0",
  "minecraft:feature_rules": {
    "description": {
      "identifier": "wiki:ruby_ore_rule",
      "places_feature": "wiki:ruby_ore_feature"
    },
    "conditions": {
      "placement_pass": "underground_pass",
      "minecraft:biome_filter": [
        {
          "test": "has_biome_tag",
          "operator": "==",
          "value": "overworld"
        }
      ]
    },
    "distribution": {
      "iterations": 4,
      "coordinate_eval_order": "zyx",
      "x": {
        "distribution": "uniform",
        "extent": [0, 16]
      },
      "y": {
        "distribution": "triangle",
        "extent": [-48, 16]
      },
      "z": {
        "distribution": "uniform",
        "extent": [0, 16]
      }
    }
  }
}

В правиле три части.

description

  • identifier даёт правилу имя. Как и у объектов, часть после двоеточия должна совпадать с именем файла.
  • places_feature - объект, который ставит это правило. Одно правило управляет одним объектом.

conditions

minecraft:biome_filter выбирает биомы. Это список проверок фильтра, и почти всегда вы будете использовать has_biome_tag. Каждый биом проходит фильтр: те, что прошли, получают объект.

Проверки можно объединять через all_of и any_of. Этот фильтр выбирает тёплые биомы верхнего мира, которые не являются океанами:

Внутри conditions
"minecraft:biome_filter": [
  { "test": "has_biome_tag", "operator": "==", "value": "overworld" },
  {
    "any_of": [
      { "test": "has_biome_tag", "operator": "==", "value": "desert" },
      { "test": "has_biome_tag", "operator": "==", "value": "mesa" }
    ]
  },
  { "test": "has_biome_tag", "operator": "!=", "value": "ocean" }
]

Чтобы рубиновая руда была только в Рубиновой роще, проверяйте её собственный тег: "value": "ruby_grove".

placement_pass говорит, когда объект ставится по сравнению с другими. Проходы выполняются в таком порядке:

ПроходПодходит для
first_passТого, на чём должно строиться всё остальное.
before_underground_pass, underground_pass, after_underground_passРуд, комков земли или гравия, украшений пещер.
before_surface_pass, surface_pass, after_surface_passДеревьев, цветов, травы, валунов.
before_sky_pass, sky_pass, after_sky_passТого, что находится в воздухе.
final_passПоследних штрихов, после всего остального.
pregeneration_passТолько для вырезания пещер.

У объектов в одном проходе нет постоянного порядка между собой.

distribution

Эта часть решает, сколько копий пытаются появиться в каждом чанке и где.

ПолеЧто делает
iterationsСколько попыток на чанк. Здесь 4 жилы.
x, y, zКуда попадает каждая попытка. Число, диапазон или выражение Molang.
scatter_chanceНеобязательный шанс для всего чанка, например { "numerator": 1, "denominator": 4 } для 1 из 4 чанков. Если он не выпал, попыток не будет вовсе.
coordinate_eval_orderПорядок вычисления координат, например "xzy" (по умолчанию) или "zyx". Важен, когда одна координата использует другую.

В правиле объекта x и z отсчитываются от угла чанка, так что [0, 16] покрывает весь чанк. y - это высота в мире.

У каждого диапазона есть тип distribution, который задаёт, куда попадают значения:

ТипРезультат
uniformВсе значения одинаково вероятны.
triangleБольше всего значений в середине диапазона, меньше по краям. Отлично для руд.
gaussianЗначения скапливаются около середины, как колокол.
inverse_gaussianЗначения скапливаются на обоих краях, в середине мало.
fixed_gridРавномерные шаги, задаются через step_size и grid_offset.
jittered_gridСетка, где каждая точка немного случайно сдвинута.

Для того, что стоит на земле, например растений, задайте y через Molang, чтобы объект попадал на поверхность:

Внутри distribution
"y": "query.heightmap(variable.worldx, variable.worldz)"

Руда только в новых чанках

Объекты генерируются один раз, когда чанк создаётся впервые. Отправьтесь подальше или создайте новый мир, чтобы увидеть свою руду. Уже исследованные земли её никогда не получат.

Проверка

  1. Включите пакет в новом мире.
  2. Перейдите в режим наблюдателя командой /gamemode spectator и пролетите под землёй около Y 0.
  3. Ищите рубиновую текстуру в камне. Слишком редко? Увеличьте iterations или count.

Если ничего не появилось, откройте журнал контента. Обычные причины: имя файла не совпадает с идентификатором, неверное имя в places_feature или опечатка в имени блока в places_block.

Все типы объектов

Каждый файл объекта использует ровно один из них как корневой ключ. Одни ставят блоки, другие только выбирают между другими объектами, сдвигают или повторяют их. Большинство ванильных украшений связывают несколько в цепочку: например, объект рассеивания запускает объект поиска, а тот запускает дерево.

ТипЧто делает
minecraft:aggregate_featureСтавит список объектов в одно место, без постоянного порядка.
minecraft:beards_and_shaversНасыпает или срезает рельеф, чтобы получилась ровная свободная площадка для другого объекта, обычно постройки.
minecraft:cave_carver_featureПрорезает пещеры верхнего мира через этот чанк и соседние. Нужен pregeneration_pass.
minecraft:conditional_listПроверяет список объектов по порядку и ставит первый, чьё условие выполнено.
minecraft:fossil_featureСтроит закопанный скелет из костных блоков и выбранного вами блока руды.
minecraft:geode_featureСоздаёт круглую жеоду со слоистой оболочкой и внутренним наполнением, которое можно заменить.
minecraft:growing_plant_featureВыращивает столб растения вверх от пола или вниз от потолка, с телом и кончиком, как пещерные лозы.
minecraft:height_difference_filter_featureПозволяет другому объекту появиться, только если земля вокруг проходит проверки высоты.
minecraft:horizontal_tree_decoration_featureПрикрепляет блок сбоку к чему-то, повёрнутым в случайную сторону, как грибы-трутовики на бревне.
minecraft:multi_block_featureСтавит блок, состоящий из нескольких частей, при желании повёрнутый в случайную сторону.
minecraft:multiface_featureСтавит тонкие блоки, которые цепляются за пол, стены или потолок, как светящийся лишайник.
minecraft:multipart_block_column_featureСкладывает столб из до четырёх видов блоков (основание, середина, сужение и кончик) в любом направлении.
minecraft:nether_cave_carver_featureПрорезает пещеры в Нижнем мире. Нужен pregeneration_pass.
minecraft:ore_featureСтавит жилу блоков, которая заменяет только разрешённые вами блоки. Используется для всех руд.
minecraft:partially_exposed_blob_featureСтавит комок блока, почти целиком закопанный в землю, так что видна только одна сторона.
minecraft:rect_layoutЗаполняет поверхность чанка сеткой участков, в каждом по одному объекту, а часть места остаётся пустой.
minecraft:scan_surfaceПроходит по каждому столбцу поверхности чанка и пробует поставить объект на каждом.
minecraft:scatter_featureСтавит другой объект много раз вокруг точки, с такими же диапазонами x, y, z, как у правила объекта.
minecraft:sculk_patch_featureРаспространяет пятно скалка. Игра пока его не документирует.
minecraft:search_featureИщет в объёме пространства, слой за слоем, место, куда помещается другой объект.
minecraft:sequence_featureСтавит объекты один за другим, каждый начинается там, где закончился предыдущий.
minecraft:single_block_featureСтавит один блок или один случайный из взвешенного списка, с правилами, на чём он может стоять.
minecraft:snap_to_surface_featureПеремещает точку на ближайший пол, потолок или стену, прежде чем поставить другой объект.
minecraft:structure_template_featureСтавит сохранённый .mcstructure из папки structures пакета поведения.
minecraft:surface_relative_threshold_featureСтавит другой объект, только если точка достаточно глубоко под поверхностью.
minecraft:tree_featureСтроит дерево из ствола, кроны и необязательных корней, с множеством настроек формы.
minecraft:underwater_cave_carver_featureПрорезает пещеры ниже уровня моря. Нужен pregeneration_pass.
minecraft:vegetation_patch_featureПокрывает участок земли блоком, а затем выращивает на нём растения, как пятна мха.
minecraft:weighted_random_featureВыбирает из списка один случайный объект. Объекты с большим весом выбираются чаще.

Что дальше

We use cookies to improve your experience and analyse site traffic. Learn more