В этом гайде вы сделаете Зверька (Critter): маленького дружелюбного четвероногого моба, который бродит вокруг, смотрит на вас и убегает, если его ударить. У него есть 3D-модель, скин, яйцо призыва, и он умеет сам появляться на траве.
Мобы - самый большой вид объектов в аддоне, потому что они живут сразу в обоих пакетах: пакет поведения говорит, что моб делает, а пакет ресурсов - как он выглядит.
Быстрый способ: GodCraft
Чтобы сделать модель вручную, придётся вводить координаты кубов. В GodCraft вы лепите её прямо пальцами.
- Откройте Мастерскую и добавьте в аддон Моба.
- Соберите тело в редакторе 3D-моделей, а потом раскрасьте скин в редакторе раскраски модели.
- Задайте здоровье, скорость и поведение, и добавьте яйцо призыва.
- Нажмите Экспорт. Вы получите
.mcaddon, в котором уже есть все файлы ниже, включая манифесты, UUID и названия.
Вручную
Начните с пакета поведения (BP) и пакета ресурсов (RP) из гайда Настройка проекта. Мы используем пространство имён myname, поэтому наш моб называется myname:critter.
| Файл | Пакет | Что делает |
|---|---|---|
entities/critter.json | BP | Здоровье, движение и поведение |
spawn_rules/critter.json | BP | Где моб появляется сам |
entity/critter.entity.json | RP | Какие модель, скин и анимации использовать |
models/entity/critter.geo.json | RP | 3D-модель |
textures/entity/critter.png | RP | Скин |
texts/en_US.lang | RP | Названия моба и его яйца |
Шаг 1: файл поведения
{
"format_version": "1.26.50",
"minecraft:entity": {
"description": {
"identifier": "myname:critter",
"is_spawnable": true,
"is_summonable": true
},
"components": {
"minecraft:type_family": {
"family": ["critter", "mob"]
},
"minecraft:health": {
"value": 8,
"max": 8
},
"minecraft:physics": {},
"minecraft:collision_box": {
"width": 0.6,
"height": 0.7
},
"minecraft:movement": {
"value": 0.25
},
"minecraft:movement.basic": {},
"minecraft:navigation.walk": {
"avoid_water": true,
"avoid_damage_blocks": true
},
"minecraft:jump.static": {},
"minecraft:pushable_by_entity": {},
"minecraft:pushable_by_block": {},
"minecraft:breathable": {
"total_supply": 15,
"suffocate_time": 0
},
"minecraft:behavior.float": {
"priority": 0
},
"minecraft:behavior.panic": {
"priority": 1,
"speed_multiplier": 1.4
},
"minecraft:behavior.random_stroll": {
"priority": 4,
"speed_multiplier": 0.8
},
"minecraft:behavior.look_at_player": {
"priority": 5,
"look_distance": 6.0,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 6
}
}
}
}Блок description:
identifier- ID моба, его использует/summon myname:critter.is_spawnableразрешает мобу иметь яйцо призыва и появляться самому.is_summonableразрешает призывать его командой /summon.
Базовые компоненты:
minecraft:type_familyдаёт мобу метки, которые могут проверять другие мобы и команды, например@e[family=critter].minecraft:health:value- начальное здоровье,max- максимальное. Одно сердечко - это 2 единицы.minecraft:physicsдаёт гравитацию и столкновения. Без него моб висит в воздухе.minecraft:collision_box- невидимая коробка, которой моб упирается в предметы и стены, размер в блоках.
Тройка движения (для ходьбы нужны все три):
minecraft:movementзадаёт скорость. 0.25 - примерно скорость коровы.minecraft:movement.basic- тип движения: обычная ходьба по земле.minecraft:navigation.walkпозволяет прокладывать путь по суше. Здесь моб обходит воду и опасные блоки вроде огня.
minecraft:jump.static позволяет запрыгивать на один блок. Компоненты pushable_by_entity и pushable_by_block позволяют игрокам и поршням толкать моба, а minecraft:breathable управляет запасом воздуха под водой.
Поведение и приоритет
Компоненты, которые начинаются с behavior., - это «мозг» моба. У каждого есть priority: побеждает меньшее число. Когда Зверька ранят, panic (приоритет 1) перебивает random_stroll (приоритет 4).
behavior.float: всплывать в воде, чтобы не утонуть.behavior.panic: убегать быстрее после получения урона.behavior.random_stroll: бродить вокруг.behavior.look_at_player: поворачивать голову к ближайшим игрокам.behavior.random_look_around: оглядываться, когда нечего делать.
Шаг 2: модель
Модель состоит из костей, а в каждой кости лежат кубы. Единицы - пиксели: 16 пикселей составляют один блок.
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.myname.critter",
"texture_width": 64,
"texture_height": 32,
"visible_bounds_width": 2,
"visible_bounds_height": 1.5,
"visible_bounds_offset": [0, 0.5, 0]
},
"bones": [
{
"name": "body",
"pivot": [0, 4, 0],
"cubes": [{ "origin": [-3, 4, -4], "size": [6, 5, 8], "uv": [0, 0] }]
},
{
"name": "head",
"parent": "body",
"pivot": [0, 8, -4],
"cubes": [{ "origin": [-2.5, 6, -8.5], "size": [5, 5, 5], "uv": [0, 13] }]
},
{ "name": "leg0", "parent": "body", "pivot": [-2, 4, 3], "cubes": [{ "origin": [-3, 0, 2], "size": [2, 4, 2], "uv": [28, 0] }] },
{ "name": "leg1", "parent": "body", "pivot": [2, 4, 3], "cubes": [{ "origin": [1, 0, 2], "size": [2, 4, 2], "uv": [28, 0] }] },
{ "name": "leg2", "parent": "body", "pivot": [-2, 4, -3], "cubes": [{ "origin": [-3, 0, -4], "size": [2, 4, 2], "uv": [28, 0] }] },
{ "name": "leg3", "parent": "body", "pivot": [2, 4, -3], "cubes": [{ "origin": [1, 0, -4], "size": [2, 4, 2], "uv": [28, 0] }] }
]
}
]
}Кости названы head и leg0-leg3 не случайно: ванильные анимации ходьбы и взгляда двигают кости именно с такими именами, поэтому мы можем использовать их бесплатно.
Шаг 3: скин
Нарисуйте PNG размером 64x32 и сохраните его как RP/textures/entity/critter.png. Параметр uv каждого куба говорит игре, какая часть картинки на него натягивается. Раскрашивать UV-развёртку вручную довольно муторно, поэтому редактор раскраски модели так сильно помогает. Советы ищите в гайде Пиксельные текстуры.
Шаг 4: клиентская сущность
Этот файл связывает ID с моделью, скином, анимациями и яйцом призыва:
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "myname:critter",
"materials": { "default": "entity_alphatest" },
"textures": { "default": "textures/entity/critter" },
"geometry": { "default": "geometry.myname.critter" },
"animations": {
"walk": "animation.quadruped.walk",
"look_at_target": "animation.common.look_at_target"
},
"scripts": {
"animate": [
{ "walk": "query.modified_move_speed" },
"look_at_target"
]
},
"render_controllers": ["controller.render.default"],
"spawn_egg": {
"base_color": "#c98a4b",
"overlay_color": "#5a3a1e"
}
}
}
}materials:entity_alphatestделает полностью прозрачные пиксели скина действительно прозрачными.render_controllers:controller.render.default- ванильный контроллер, который рисует геометриюdefaultс текстурой и материаломdefault. Идеально для моба с одним скином.scripts.animate: анимация ходьбы играет с той же скоростью, с какой движется моб, через запрос Molangquery.modified_move_speed(см. Запросы Molang).spawn_egg: два цвета яйца. Вместо них можно указать"texture"с коротким именем изitem_texture.json.
Шаг 5: названия
entity.myname:critter.name=Critter
item.spawn_egg.entity.myname:critter.name=Critter Spawn EggШаг 6: естественное появление (необязательно)
Без этого файла моб появляется только из яйца или через /summon. С ним Зверьки появляются на траве днём небольшими группами:
{
"format_version": "1.8.0",
"minecraft:spawn_rules": {
"description": {
"identifier": "myname:critter",
"population_control": "animal"
},
"conditions": [
{
"minecraft:spawns_on_surface": {},
"minecraft:spawns_on_block_filter": "minecraft:grass_block",
"minecraft:brightness_filter": { "min": 7, "max": 15, "adjust_for_weather": false },
"minecraft:weight": { "default": 8 },
"minecraft:herd": { "min_size": 1, "max_size": 3 },
"minecraft:biome_filter": { "test": "has_biome_tag", "operator": "==", "value": "animal" }
}
]
}
}weight - как часто выбирается этот моб по сравнению с другими. population_control: animal включает его в общий лимит животных в мире, поэтому он не заполонит весь мир.
Проверьте моба
- Установите оба пакета (Экспорт и установка) и включите их в мире.
- Найдите Critter Spawn Egg в творческом инвентаре или выполните
/summon myname:critter. - Посмотрите, как он бродит и смотрит на вас. Ударьте его один раз: он должен убежать.
Моб невидимый или видна только тень
Игра нашла файл поведения, но не нашла модель или скин. Проверьте, что identifier одинаковый в обоих пакетах, что имя геометрии точно совпадает с geometry.myname.critter и что в пути к текстуре нет .png.
- Моб не двигается. Нужны все три части движения:
movement,movement.basicиnavigation.walk, плюс хотя бы одно поведение ходьбы. - Моб проваливается сквозь пол или висит в воздухе. Проверьте, что есть
minecraft:physics.
Больше подсказок в разделе Когда что-то сломалось.
Что дальше
- Изучите настоящих мобов в разделе Ванильные сущности, чтобы увидеть, как устроены коровы и свиньи.
- Добавьте больше поведения из справочника компонентов сущностей, например
behavior.panic. - Постройте для своего моба дом с помощью гайда Ваш первый блок.