Без правила появления моб появляется только из яйца призыва или через /summon. Правило появления (spawn rule) говорит игре, где и когда моб может появиться сам: в каких биомах, насколько темно должно быть, сколько мобов сразу и как часто по сравнению с другими мобами.
На этой странице используется Рубиновый голем из гайда Файл сущности. Чтобы сделать моба целиком, начните с гайда Ваш первый моб.
Файлы
BP/
entities/
ruby_golem.json
spawn_rules/
ruby_golem.jsonИмя файла не важно. Правило связывается с мобом через identifier внутри файла.
Моб должен уметь появляться
Правила появления работают, только если в description файла поведения моба есть "is_spawnable": true.
Первое правило появления
Рубиновые големы появляются в пустынях и пустошах (бесплодных землях) небольшими группами, на песке или красном песке, при дневном свете:
{
"format_version": "1.8.0",
"minecraft:spawn_rules": {
"description": {
"identifier": "wiki:ruby_golem",
"population_control": "animal"
},
"conditions": [
{
"minecraft:spawns_on_surface": {},
"minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
"minecraft:brightness_filter": {
"min": 7,
"max": 15,
"adjust_for_weather": false
},
"minecraft:weight": { "default": 6 },
"minecraft:herd": { "min_size": 1, "max_size": 2 },
"minecraft:biome_filter": {
"any_of": [
{ "test": "has_biome_tag", "value": "desert" },
{ "test": "has_biome_tag", "value": "mesa" }
]
}
}
]
}
}Почти все ванильные правила появления до сих пор используют "format_version": "1.8.0", так что и вы можете.
Блок description
| Поле | Что делает |
|---|---|
identifier | ID моба. Должен точно совпадать с файлом сущности. |
population_control | В какой пул засчитывается моб. У каждого пула свой лимит, поэтому ваш моб не сможет заполонить весь мир. |
Пулы, которые вам понадобятся чаще всего:
| Пул | Кто его использует |
|---|---|
animal | Сухопутные животные, например коровы, свиньи и овцы |
water_animal | Рыбы, спруты, дельфины и аксолотли |
monster | Враждебные мобы, например зомби и скелеты |
ambient | Маленькие фоновые мобы, например летучие мыши |
В ванильной игре есть и несколько особых пулов, например cat и pillager, для отдельных мобов.
Условия
conditions - это список. Каждая запись - полный набор правил. Если игра находит место, которое подходит хотя бы под одну запись, моб может там появиться.
Внутри одной записи должен пройти каждый компонент. Поэтому правило выше означает «на поверхности И на песке И при дневном свете И в биоме пустыни или пустошей».
Хотите, чтобы моб появлялся в двух совсем разных местах, например ночью в пещерах и днём на пляжах? Добавьте в список вторую запись, а не запихивайте всё в одну.
Где: на поверхности, под землёй или в воде
Нужен хотя бы один из этих компонентов, иначе мобу негде появиться. Это пустые объекты: достаточно их указать, и они включаются.
| Компонент | Где появляется моб |
|---|---|
minecraft:spawns_on_surface | На земле под открытым небом |
minecraft:spawns_underground | В пещерах, с блоками над головой |
minecraft:spawns_underwater | В воде |
minecraft:spawns_lava | В лаве, как лавомерки |
Их можно сочетать. Ванильные аксолотли используют сразу spawns_underground и spawns_underwater, чтобы появляться в пещерной воде.
На каких блоках
"minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
"minecraft:spawns_on_block_prevented_filter": ["minecraft:cactus"]spawns_on_block_filter: блок под мобом должен быть одним из этих. Один блок можно записать просто строкой.spawns_on_block_prevented_filter: на этих блоках моб никогда не появится.
В каких биомах
minecraft:biome_filter - это обычный фильтр, обычно с проверкой has_biome_tag. У каждого биома есть несколько тегов, например desert, forest, ocean, frozen, overworld или nether. Проверять тег лучше, чем перечислять биомы по одному, потому что так вы захватите и варианты биомов, и биомы из других аддонов.
"minecraft:biome_filter": [
{ "test": "has_biome_tag", "value": "overworld" },
{ "test": "has_biome_tag", "operator": "not", "value": "ocean" }
]Обычный список работает как all_of: здесь это «в Верхнем мире, но не в океане». Какие теги есть у каждого биома, смотрите в разделе Ванильные биомы, а как биомы получают теги - в разделе теги биомов.
Теги animal и monster
У большинства сухопутных биомов есть теги animal и monster. Ванильные коровы используют has_biome_tag с animal, а зомби - с monster. Это простой способ сказать «везде, где может жить обычный моб».
Уровень освещения
"minecraft:brightness_filter": {
"min": 0,
"max": 7,
"adjust_for_weather": true
}Освещение бывает от 0 (полная темнота) до 15 (яркий дневной свет). Животные обычно используют от 7 до 15, монстры от 0 до 7. Если adjust_for_weather равен true, в дождь и грозу считается темнее, поэтому монстры могут появиться и в пасмурный день.
Как часто: вес
"minecraft:weight": { "default": 6 }Когда игра выбирает, какого моба создать в каком-то месте, мобы с большим весом выбираются чаще. Для понимания масштаба: у ванильных коров 8, у летучих мышей 10, а у зомби 100. Для редкого моба начните с малого и повышайте вес во время тестов.
Сколько: стая (herd)
"minecraft:herd": {
"min_size": 2,
"max_size": 4,
"event": "minecraft:entity_born",
"event_skip_count": 2
}min_sizeиmax_size: сколько мобов появляется вместе.event(необязательно): событие, которое вызывается у мобов группы при появлении.event_skip_count: сколько мобов появится до того, как событие начнёт срабатывать.
Пример выше - ванильный приём для семей: первые 2 появляются обычными взрослыми, а остальные получают minecraft:entity_born. В файлах сущностей этих мобов это событие добавляет группу детёныша, поэтому остальные оказываются детёнышами. Лисы и аксолотли делают именно так.
Насколько тесно: ограничение плотности
"minecraft:density_limit": {
"surface": 4,
"underground": 2
}Лимит только для этого моба, поверх лимита пула. Когда рядом уже столько мобов, новые больше не появляются на поверхности (или под землёй). Полезно для сильных или редких мобов, которые никогда не должны приходить толпой.
Сложность
"minecraft:difficulty_filter": {
"min": "easy",
"max": "hard"
}Уровни сложности: peaceful, easy, normal и hard. Враждебные мобы обычно начинают с easy, поэтому на Мирной сложности они не появляются.
Другие условия
| Компонент | Что проверяет |
|---|---|
minecraft:height_filter | Диапазон высот (min, max), где может появиться моб |
minecraft:distance_filter | На каком расстоянии от игрока он должен быть (min, max) |
minecraft:world_age_filter | Сколько должно быть миру, чтобы моб мог появиться (min) |
minecraft:disallow_spawns_in_bubble | Запрещает появление в пузырьковых столбах |
minecraft:permute_type | Иногда вместо этого моба создаёт другого, с учётом веса. Зомби так создают немного зомби-жителей. |
Ночная версия
Хотите, чтобы злые Рубиновые големы жили и в пещерах? Добавьте второе условие с другими правилами:
"conditions": [
{
"minecraft:spawns_on_surface": {},
"minecraft:spawns_on_block_filter": ["minecraft:sand", "minecraft:red_sand"],
"minecraft:brightness_filter": { "min": 7, "max": 15, "adjust_for_weather": false },
"minecraft:weight": { "default": 6 },
"minecraft:herd": { "min_size": 1, "max_size": 2 },
"minecraft:biome_filter": { "test": "has_biome_tag", "value": "desert" }
},
{
"minecraft:spawns_underground": {},
"minecraft:brightness_filter": { "min": 0, "max": 4, "adjust_for_weather": false },
"minecraft:height_filter": { "min": -64, "max": 0 },
"minecraft:weight": { "default": 2 },
"minecraft:herd": { "min_size": 1, "max_size": 1, "event": "wiki:become_angry" },
"minecraft:density_limit": { "underground": 2 },
"minecraft:biome_filter": { "test": "has_biome_tag", "value": "overworld" }
}
]Вторая запись создаёт одиноких големов глубоко под землёй и сразу вызывает у них wiki:become_angry. Это событие взято со страницы События сущностей.
Как тестировать правила появления
Естественное появление тестировать долго, так что упростите себе задачу:
- Создайте новый мир в Творческом режиме и поставьте сложность Лёгкая или выше, если ваш моб враждебный.
- На время тестов сильно поднимите
weight(например до100), а потом верните обратно. - Полетайте над нужным биомом. Мобы появляются только на некотором расстоянии от игрока.
- Используйте
/kill @e[type=wiki:ruby_golem], чтобы убрать их, и смотрите, как появляются новые.
Если что-то пошло не так
| Что вы видите | Скорее всего, причина |
|---|---|
| Моб никогда не появляется | is_spawnable равен false, identifier не совпадает или в условии нет компонента «где», например spawns_on_surface |
| Моб никогда не появляется в каком-то биоме | У биома нет этого тега. Проверьте Ванильные биомы. |
| Мобов слишком много | Уменьшите weight или max_size или добавьте density_limit |
| Враждебный моб не появляется на Мирной сложности | Это difficulty_filter делает свою работу |
| Монстры появляются днём | adjust_for_weather включён, и идёт дождь |
Больше помощи в разделе Когда что-то сломалось. Дальше: Фильтры.