1. Вики
  2. /Предметы
  3. /Своя еда

Своя еда

Сделай рубиновое яблоко, которое игроки могут съесть в Minecraft Bedrock: голод, насыщение, время и анимация поедания, а также эффекты с помощью небольшого скрипта.

В этом гайде ты сделаешь рубиновое яблоко: перекус, который хорошо заполняет шкалу голода, его можно съесть даже на полный желудок, и он ненадолго даёт скорость. Ты узнаешь, как работают голод и насыщение и сколько длится поедание.

Этот гайд продолжает Твой первый предмет. Если ты ещё не делал предмет, начни оттуда: шаги с иконкой, текстурой и названием точно такие же.

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

В GodCraft есть объект "Еда" с ползунками для всего, о чём пойдёт речь ниже, и скрипт эффекта приложение напишет само.

  1. Открой Мастерскую и добавь в аддон объект Еда.
  2. Нарисуй иконку в пиксельном редакторе.
  3. Задай очки голода, насыщение и нужные эффекты.
  4. Нажми Экспорт и съешь яблоко в игре.

Хочешь посмотреть, какие файлы получаются? Вот они.

Вручную

Мы используем пространство имён myname. Везде замени его на своё.

Шаг 1: предмет-еда

Создай этот файл в пакете поведения:

BP/items/ruby_apple.json
{
  "format_version": "1.26.30",
  "minecraft:item": {
    "description": {
      "identifier": "myname:ruby_apple",
      "menu_category": {
        "category": "items"
      }
    },
    "components": {
      "minecraft:icon": {
        "textures": {
          "default": "myname_ruby_apple"
        }
      },
      "minecraft:display_name": {
        "value": "item.myname:ruby_apple.name"
      },
      "minecraft:max_stack_size": 16,
      "minecraft:food": {
        "nutrition": 6,
        "saturation_modifier": 0.8,
        "can_always_eat": true
      },
      "minecraft:use_modifiers": {
        "use_duration": 1.6,
        "movement_modifier": 0.35
      },
      "minecraft:use_animation": "eat",
      "minecraft:tags": {
        "tags": ["minecraft:is_food"]
      }
    }
  }
}

Новое здесь - последние четыре компонента. Разберём каждый.

Компонент еды

minecraft:food делает предмет съедобным.

  • nutrition - сколько очков голода он восстанавливает. Одна ножка на шкале голода - это 2 очка, так что 6 заполняет три ножки. Обычное яблоко даёт 4, стейк - 8.
  • saturation_modifier управляет скрытой "сытостью", которая не даёт шкале голода убывать. Игра добавляет nutrition x saturation_modifier x 2 насыщения. Низкие значения (примерно от 0.1 до 0.3) ощущаются как перекус, 0.6 - обычная еда, а 0.8 и выше - сытный обед.
  • can_always_eat позволяет съесть еду даже при полной шкале голода. Для обычной еды не добавляй его (по умолчанию он false).

Есть ещё одно поле, которое может пригодиться: using_converts_to. Оно выдаёт игроку другой предмет после еды, как миску после супа:

Внутри minecraft:food
"using_converts_to": "minecraft:bowl"

Сколько длится поедание

Еде нужен minecraft:use_modifiers, иначе игрок не сможет удерживать кнопку использования, чтобы её съесть.

  • use_duration - время поедания в секундах. Ванильная еда съедается за 1.6 секунды. Сушёная ламинария - примерно вдвое быстрее.
  • movement_modifier замедляет игрока, пока он ест. 0.35 - ванильное значение, а 1 значит, что замедления нет совсем.

Анимация и теги

  • minecraft:use_animation со значением "eat" показывает анимацию жевания и частицы крошек. Для зелья или смузи используй "drink".
  • minecraft:tags с minecraft:is_food помечает предмет как еду, так же как помечена ванильная еда.

Шаг 2: текстура и название

Здесь всё как в первом гайде. Добавь текстуру в свой item_texture.json (внутрь texture_data, рядом с остальными записями):

RP/textures/item_texture.json
"myname_ruby_apple": {
  "textures": "textures/items/ruby_apple"
}

Сохрани PNG 16x16 в RP/textures/items/ruby_apple.png, а потом добавь название:

RP/texts/en_US.lang
item.myname:ruby_apple.name=Ruby Apple

Теперь введи /give @s myname:ruby_apple и откуси кусочек. Если нужно освежить память, загляни в /give.

Эффекты после еды

В старых аддонах эффекты еды задавались списком effects внутри minecraft:food. Этого поля больше нет в текущем формате предметов. Если добавить его в файл с современным format_version, игра его проигнорирует и покажет предупреждение в журнале контента.

Сейчас это делается через свой компонент: предмет указывает компонент, который ты придумал сам, а небольшой скрипт решает, что он делает. Звучит страшно, но это примерно 15 строк.

Шаг 1: добавляем компонент в предмет

Добавь это в components файла ruby_apple.json. Название выбираешь ты, а в объекте хранятся твои собственные настройки:

BP/items/ruby_apple.json (внутри components)
"myname:eat_effect": {
  "effect": "speed",
  "seconds": 10,
  "amplifier": 1
}

Шаг 2: пишем скрипт

Для этого в манифесте пакета поведения должен быть модуль скриптов. Как его добавить, рассказано в гайде Настройка проекта. Потом создай скрипт:

BP/scripts/main.js
import { system } from "@minecraft/server";

system.beforeEvents.startup.subscribe(({ itemComponentRegistry }) => {
  itemComponentRegistry.registerCustomComponent("myname:eat_effect", {
    onConsume(event, { params }) {
      event.source.addEffect(params.effect, params.seconds * 20, {
        amplifier: params.amplifier,
      });
    },
  });
});

Как это работает:

  1. Когда мир запускается, скрипт сообщает игре, что означает myname:eat_effect.
  2. onConsume срабатывает каждый раз, когда игрок доедает предмет с этим компонентом.
  3. params - это объект, который ты написал в файле предмета, поэтому один скрипт можно использовать для многих видов еды с разными эффектами.
  4. Длительность эффектов в скриптах указывается в тиках, а в одной секунде 20 тиков. Поэтому seconds умножается на 20.
  5. amplifier 0 - это уровень I, 1 - уровень II и так далее.

Названия эффектов

Используй те же ID эффектов, что и в команде /effect, например speed, regeneration, night_vision, absorption или fire_resistance.

GodCraft делает всю эту часть за тебя: выбери эффекты в редакторе еды, и при экспорте приложение добавит компонент и скрипт.

Советы по балансу еды

  • Ориентируйся на ваниль. Перекус - от 2 до 4 сытости, обед - от 6 до 8. Слишком большие числа делают всю остальную еду бесполезной.
  • Эффекты должны чего-то стоить. Мощный эффект хорош на редкой еде, а не на той, что крафтится из земли. Привяжи её к сложному рецепту (смотри Рецепты крафта и печи).
  • Используй can_always_eat только для особой еды. В ванили так сделаны только вещи вроде золотых яблок, поэтому это ощущается как награда.
  • Размер стака важен. Маленькие стаки (16) не дают запасать сильную еду в больших количествах.

Если что-то не работает

Что ты видишьСкорее всего, причина
Съесть вообще не получаетсяНет minecraft:use_modifiers или use_duration равен 0
Съесть можно, но только когда голоденЭто нормально. Добавь can_always_eat, чтобы это изменить
После еды нет эффектаМодуля скриптов нет в манифесте, или название компонента в предмете и в скрипте не совпадает
Предупреждение про effectsТы использовал старое поле: перейди на свой компонент, как описано выше

Больше помощи в гайде Когда что-то сломалось. Дальше: Оружие и инструменты.

Предметы: Гайды

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