1. Вики
  2. /Команды
  3. /Функции и командные блоки

Функции и командные блоки

Собирайте команды Minecraft Bedrock в файлы .mcfunction, запускайте их через /function или каждый тик и используйте импульсные, цепные и повторяющиеся командные блоки.

Вводить одни и те же десять команд снова и снова быстро надоедает. Функция - это текстовый файл с командами, которые выполняются все сразу одним вызовом /function. А ещё функции могут запускаться сами на каждом игровом тике: так многие аддоны делают так, чтобы что-то происходило постоянно.

Если вы раньше не работали с командами, сначала прочитайте Основы команд.

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

В GodCraft есть объект Функция, который сам пишет файлы и список тиков.

  1. Откройте Мастерскую и добавьте в свой аддон Функцию.
  2. Пишите по одной команде на строку. Подсказки предлагают команды и аргументы прямо по ходу.
  3. Выберите, как она запускается: каждый тик, один раз при загрузке мира или только через /function.
  4. Экспортируйте. Файл .mcfunction, tick.json, манифесты и UUID будут записаны за вас.

Вручную

Шаг 1: создайте файл функции

Функции живут в пакете поведения (BP), в папке functions. Файл заканчивается на .mcfunction и представляет собой обычный текст: его можно писать в любом текстовом редакторе.

BP/functions/myname/starter_kit.mcfunction
# Gives whoever runs this function a starter kit
give @s minecraft:stone_sword
give @s minecraft:bread 8
give @s minecraft:torch 16
effect @s minecraft:speed 60 0
say Your starter kit is ready!

Правила простые:

  • Одна команда на строку. Команду нельзя разбить на две строки.
  • Без слеша. Пишите give, а не /give.
  • Строки, начинающиеся с #, - это комментарии. Игра их пропускает. Объясняйте в них, что делает функция.
  • Пустые строки допустимы и помогают читать длинные файлы.

Папка с вашим именем

Если положить файлы в папку вроде functions/myname/, они не будут конфликтовать с другими аддонами, в которых тоже может быть функция starter_kit.

Шаг 2: запустите её

Загрузите мир с включённым пакетом поведения и разрешёнными читами, затем введите:

Чат
/function myname/starter_kit

Имя - это путь внутри папки functions, с / между папками и без окончания .mcfunction. Смотрите /function.

Внутри функции @s и ~ ~ ~ означают того, кто выполнил /function, и место, где он стоит. Поэтому, когда вы запускаете стартовый набор, предметы получаете вы.

Вложенные папки

Раскладывайте функции по любому количеству папок:

Структура папок
BP/functions/
  tick.json
  myname/
    starter_kit.mcfunction
    tick.mcfunction
    arena/
      start.mcfunction
      reset.mcfunction

Вложенную функцию запускают так: /function myname/arena/start.

Функции могут вызывать другие функции. Это удобно, чтобы разбить большую задачу на маленькие части:

BP/functions/myname/arena/start.mcfunction
# Clean up, then teleport everyone in
function myname/arena/reset
tp @a 0 80 0
title @a title Fight!

Не вызывайте саму себя

Функция, которая вызывает саму себя, напрямую или через другую функцию, создаёт бесконечный цикл. Игра обрывает его после слишком большого числа команд, и результат будет совсем не тем, что вы ждали.

Шаг 3: запуск каждый тик через tick.json

Minecraft обновляет мир 20 раз в секунду. Каждое обновление называется тиком. Чтобы запускать функцию каждый тик, укажите её в tick.json прямо в папке functions:

BP/functions/tick.json
{
  "values": [
    "myname/tick"
  ]
}

Каждая запись в values - это путь к функции, записанный так же, как в /function. Теперь напишите функцию тика:

BP/functions/myname/tick.mcfunction
# Players standing on a gold block get Speed
execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run effect @s minecraft:speed 1 1 true

Она проверяет каждого игрока 20 раз в секунду. Любой, кто стоит на золотом блоке, получает короткое ускорение, которое обновляется, пока он там стоит. true в конце прячет частицы эффекта.

Кто такой @s в функции тика?

Функции тика запускает сама игра, а не игрок, поэтому @s ни на кого не указывает. Используйте /execute с as @a или as @e[...], чтобы выполнять команды для каждого игрока или моба, как в примере выше.

Делайте функции тика лёгкими. То, что выполняется 20 раз в секунду для каждого игрока, быстро накапливается. Сужайте селекторы аргументами вроде type, r или tag.

Перезагрузка изменений

После правки файла функции перезапускать игру не нужно. Выполните /reload, чтобы загрузить новые версии функций и скриптов. Если в функции есть сломанная команда, может не загрузиться весь файл, так что проверяйте журнал контента на ошибки. Смотрите Когда что-то сломалось.

Командные блоки

Командные блоки выполняют команду, когда получают сигнал, прямо в вашем мире. Они отлично подходят для карт, мини-игр и тестов. Для аддонов лучше функции, потому что они путешествуют вместе с пакетом, а не живут в одном мире.

Как получить

В творческом инвентаре командных блоков нет. Используйте:

Чат
/give @s minecraft:command_block

Поставьте его, затем нажмите на него или кликните правой кнопкой, чтобы открыть настройки. Введите команду в поле, без слеша.

Три типа

ТипЦветЧто делает
ИмпульсныйОранжевыйСрабатывает один раз при каждой подаче сигнала
ЦепнойЗелёныйСрабатывает сразу после блока, который на него указывает
ПовторяющийсяФиолетовыйСрабатывает каждый тик, пока на него подан сигнал

Главные настройки

  • Тип блока: Импульсный, Цепной или Повторяющийся.
  • Условие: Безусловный срабатывает всегда. Условный срабатывает, только если блок позади него выполнился успешно.
  • Редстоун: Нужен редстоун ждёт сигнала от кнопки, рычага или редстоуна. Всегда активен работает без него.
  • Задержка в тиках: ждёт столько тиков перед запуском.

Пример: кнопка телепорта

  1. Поставьте Импульсный командный блок с режимом Нужен редстоун и командой: tp @p 0 100 0
  2. Прикрепите к нему каменную кнопку.
  3. Нажмите кнопку: ближайший игрок перенесётся на 0 100 0.

Пример: цепочка

На боках командных блоков есть стрелка, которая показывает, куда они направлены. Цепной блок, поставленный туда, куда указывает стрелка, сработает следующим.

  1. Повторяющийся, Всегда активен: testfor @a[r=5]
  2. Перед ним Цепной блок, Условный, Всегда активен: effect @a[r=5] minecraft:regeneration 2 0 true

Теперь любой игрок в радиусе 5 блоков лечится, но только пока кто-то рядом. /testfor выполняется успешно, если кого-то находит, а условный цепной блок срабатывает только при успехе.

Функция или командный блок?

Командный блок может запустить и целую функцию: напишите в нём function myname/arena/start. Тогда логика живёт в вашем аддоне, а блок служит просто кнопкой.

Что дальше

  • Изучите селекторы и координаты, которые нужны любой команде, в разделе Основы команд.
  • Освойте /execute, команду, на которой построено большинство функций.
  • Сделайте свой блок, на котором можно стоять вместо золотого, по гайду Ваш первый блок.

Команды: Гайды

Основы команд ·Функции и командные блоки

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