1. Вики
  2. /Сущности
  3. /Ваш первый моб

Ваш первый моб

Создайте простого мирного моба для Minecraft Bedrock, который бродит по миру, смотрит на игроков и имеет своё яйцо призыва.

В этом гайде вы сделаете Зверька (Critter): маленького дружелюбного четвероногого моба, который бродит вокруг, смотрит на вас и убегает, если его ударить. У него есть 3D-модель, скин, яйцо призыва, и он умеет сам появляться на траве.

Мобы - самый большой вид объектов в аддоне, потому что они живут сразу в обоих пакетах: пакет поведения говорит, что моб делает, а пакет ресурсов - как он выглядит.

Быстрый способ: GodCraft

Чтобы сделать модель вручную, придётся вводить координаты кубов. В GodCraft вы лепите её прямо пальцами.

  1. Откройте Мастерскую и добавьте в аддон Моба.
  2. Соберите тело в редакторе 3D-моделей, а потом раскрасьте скин в редакторе раскраски модели.
  3. Задайте здоровье, скорость и поведение, и добавьте яйцо призыва.
  4. Нажмите Экспорт. Вы получите .mcaddon, в котором уже есть все файлы ниже, включая манифесты, UUID и названия.

Вручную

Начните с пакета поведения (BP) и пакета ресурсов (RP) из гайда Настройка проекта. Мы используем пространство имён myname, поэтому наш моб называется myname:critter.

ФайлПакетЧто делает
entities/critter.jsonBPЗдоровье, движение и поведение
spawn_rules/critter.jsonBPГде моб появляется сам
entity/critter.entity.jsonRPКакие модель, скин и анимации использовать
models/entity/critter.geo.jsonRP3D-модель
textures/entity/critter.pngRPСкин
texts/en_US.langRPНазвания моба и его яйца

Шаг 1: файл поведения

BP/entities/critter.json
{
  "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).

Шаг 2: модель

Модель состоит из костей, а в каждой кости лежат кубы. Единицы - пиксели: 16 пикселей составляют один блок.

RP/models/entity/critter.geo.json
{
  "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 с моделью, скином, анимациями и яйцом призыва:

RP/entity/critter.entity.json
{
  "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: анимация ходьбы играет с той же скоростью, с какой движется моб, через запрос Molang query.modified_move_speed (см. Запросы Molang).
  • spawn_egg: два цвета яйца. Вместо них можно указать "texture" с коротким именем из item_texture.json.

Шаг 5: названия

RP/texts/en_US.lang
entity.myname:critter.name=Critter
item.spawn_egg.entity.myname:critter.name=Critter Spawn Egg

Шаг 6: естественное появление (необязательно)

Без этого файла моб появляется только из яйца или через /summon. С ним Зверьки появляются на траве днём небольшими группами:

BP/spawn_rules/critter.json
{
  "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 включает его в общий лимит животных в мире, поэтому он не заполонит весь мир.

Проверьте моба

  1. Установите оба пакета (Экспорт и установка) и включите их в мире.
  2. Найдите Critter Spawn Egg в творческом инвентаре или выполните /summon myname:critter.
  3. Посмотрите, как он бродит и смотрит на вас. Ударьте его один раз: он должен убежать.

Моб невидимый или видна только тень

Игра нашла файл поведения, но не нашла модель или скин. Проверьте, что identifier одинаковый в обоих пакетах, что имя геометрии точно совпадает с geometry.myname.critter и что в пути к текстуре нет .png.

  • Моб не двигается. Нужны все три части движения: movement, movement.basic и navigation.walk, плюс хотя бы одно поведение ходьбы.
  • Моб проваливается сквозь пол или висит в воздухе. Проверьте, что есть minecraft:physics.

Больше подсказок в разделе Когда что-то сломалось.

Что дальше

  • Изучите настоящих мобов в разделе Ванильные сущности, чтобы увидеть, как устроены коровы и свиньи.
  • Добавьте больше поведения из справочника компонентов сущностей, например behavior.panic.
  • Постройте для своего моба дом с помощью гайда Ваш первый блок.

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