Всё, что украшает землю, - это объект (feature): рудные жилы, деревья, цветы, трава, валуны, источники, кораллы. Если это не основной рельеф и не моб, скорее всего, это объект.
Чтобы объект появился в мире, нужны два файла:
- Объект говорит, что ставить: рудную жилу, дерево, одиночный блок.
- Правило объекта говорит, где и как часто: в каких биомах, сколько раз на чанк, на какой высоте.
В этом гайде вы сделаете так, чтобы рубиновая руда появлялась под землёй во всех биомах верхнего мира.
Файлы
BP/
blocks/
ruby_ore.json
features/
ruby_ore_feature.json
feature_rules/
ruby_ore_rule.jsonШаг 1: блок руды
Сначала нужен блок, который будем ставить. Сделайте обычный свой блок wiki:ruby_ore с текстурой и таблицей добычи. Если вы ещё не делали блоки, пройдите гайд Ваш первый блок.
Шаг 2: объект
{
"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: правило объекта
Объект ничего не делает, пока правило объекта не привяжет его к биомам:
{
"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. Этот фильтр выбирает тёплые биомы верхнего мира, которые не являются океанами:
"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, чтобы объект попадал на поверхность:
"y": "query.heightmap(variable.worldx, variable.worldz)"Руда только в новых чанках
Объекты генерируются один раз, когда чанк создаётся впервые. Отправьтесь подальше или создайте новый мир, чтобы увидеть свою руду. Уже исследованные земли её никогда не получат.
Проверка
- Включите пакет в новом мире.
- Перейдите в режим наблюдателя командой
/gamemode spectatorи пролетите под землёй около Y 0. - Ищите рубиновую текстуру в камне. Слишком редко? Увеличьте
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 | Выбирает из списка один случайный объект. Объекты с большим весом выбираются чаще. |
Что дальше
- Сделайте дом для своей руды: Файл биома.
- Найдите теги биомов для фильтров: minecraft:tags.