| Только для Java Edition и Bedrock Edition |
| Эту статью нужно срочно обновить!
Вы можете помочь, обновив содержимое статьи в соответствии с последними версиями Minecraft.
|
Функции позволяют запускать список команд с помощью текстовых файлов с расширением .mcfunction. Рекомендуется использовать для файлов кодировку UTF-8 (без BOM) во избежание проблем.
Использование
Чтобы использовать функции, текстовые файлы должны быть помещены в папку <мир>/data/functions/<пространство имён>. Под пространством имён подразумевается название папки, которое будет использовано в команде. Если назвать папку minecraft, то использовать пространство имён в команде не обязательно.
Таким образом, запущенная функция custom:example/test будет ссылаться на файл functions/custom/example/test.mcfunction.
Функции, находящиеся в текстовых файлах, изменяются намного легче, чем команды в командных блоках, которые могут вызвать задержку, если используются в больших количествах. Если функция изменена или добавлена, следует использовать команду /reload для её обновления. Это позволяет игре распознавать изменения в файлах без необходимости повторного захода в мир.
После успешного выполнения функции в чате появится сообщение: «Выполнено <кол-во> команд функции «функция». Успешность выполнения команд внутри функции не может быть измерена с помощью компаратора.
Синтаксис функции
В файле .mcfunction каждая команда помещается в отдельную строку без использования косой черты (/). В файл можно написать комментарий, добавив знак решётки (#) в начало строки с комментарием.
Отдельные команды в функции могут быть больше, чем 32500 символов в командном блоке, а общее количество команд подчиняется игровому правилу maxCommandChainLength, которое составляет 65536 команд по умолчанию; любые команды, превышающие этот лимит, будут игнорироваться.
Запуск функции
Функции будут выполнять все свои команды за один игровой такт, и функции, вызывающиеся из других функций, также будут выполнять свои команды за игровой такт, как и вызывающие их функции.
Относительные координаты запоминаются функцией, и поэтому изменение порядка команд, которое используют относительные координаты, не влияет на результат их выполнения. Команда /execute обходит это ограничение.
Например:
tp @s ~ ~5 ~ execute @s ~ ~ ~ setblock ~ ~-1 ~ diamond_block setblock ~ ~-1 ~ emerald_block
Выполнение этих команд внутри функции переместит игрока (если он является её исполнителем) на 5 блоков вверх, поместив изумрудный блок на один блок ниже относительно его исходного положения и алмазный блок на один блок ниже относительно его нового положения.
Существует несколько способов запуска функции в игре:
Команды
- Позволяет игрокам запускать функцию единожды.
- Команды в функции запускаются относительно сущностей или командного блока.
- Необязательные аргументы
ifиunlessпозволят запустить функцию, только когда селектор был найден или не найден в мире соответственно. - Использование:
/function <функция> (<режим:[if|unless]> <селектор>)
/gamerule gameLoopFunction
- Запускает функцию каждый такт.
- Команды в функции выполняются через сервер.
- Использование:
/gamerule gameLoopFunction <функция>
Достижения
Достижение может выполнить функцию в качестве награды за его получение. Команды в функции выполняются через игрока, который получил это достижение.
Награждающие функции могут быть вызваны внутри JSON файлов достижений, использующих следующий формат:
{
"rewards": {
"function": "пространство_имён:путь/к/функции/файл"
}
}
Теги
Функции можно объединять вместе с помощью тегов в наборах данных. Эти теги могут быть вызваны для запуска функции, находящихся внутри них, с помощью команды /function #(пространство имён):(тег).
Функции тега minecraft:tick автоматически запускаются в начале каждого игрового такта. Функции тега minecraft:load запускаются после (пере)загрузки набора данных.
История
| Официальный выпуск Java Edition | |||||
|---|---|---|---|---|---|
| 1.12 | pre1 | Функции добавлены в игру. | |||
| pre3 | Больше не разрешено начинать писать команды с /.
| ||||
Теперь комментарии могут начинаться только с #; использовать // больше не разрешено. | |||||
| pre4 | Добавлены аргументы [if|unless] [селектор] для команды /function. | ||||
| pre6 | Запуск функции (например, в командном блоке), условие которой не выполняется, теперь считается сбоем. | ||||
| 1.13 | 17w43a | Пользовательские функции перемещены в датапаки. | |||
| 17w45a | Функции теперь полностью анализируются и кэшируются при загрузке. | ||||
| 17w49b | Добавлена функция minecraft:tick | ||||
Проблемы
Отчёты об ошибках, связанных с «Функция», поддерживаются в системе отслеживания ошибок Mojira. Сообщайте о найденных ошибках там (на английском языке).