Hi Gamepedia users and contributors! Please complete this survey to help us learn how to better meet your needs in the future. We have one for editors and readers. This should only take about 7 minutes!

Функция

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Функции позволяют игрокам запускать списки команд, используя текстовые файлы с расширением .mcfunction. При их написании рекомендуется использовать кодировку UTF-8 (без последовательностей), чтобы предотвратить возможные проблемы. На этой странице объясняется использование функций в Java Edition.

Использование[править | править код]

Для использования, текстовый файл должен сначала быть помещён в папку по пути [НАЗВАНИЕ_МИРА]/datapacks/[НАЗВАНИЕ_НАБОРА_ДАННЫХ]/data/[ПРОСТРАНСТВО_ИМЁН]/functions/[ПУТЬ_К_ФУНКЦИИ]. Пространство имён и путь к функции будут использованы при обращении к ней в игре.

Например, запуск функции custom:example/test обратится к файлу, находящемуся по пути data/custom/functions/example/test.mcfunction. Пространство имён, используемое по умолчанию - minecraft:. Использование собственного пространства имён рекомендуется, чтобы предотвратить неожиданное поведение в случае будущих изменений в основном пространстве имён.

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

При успешном выполнении /function, в чате появится сообщение: Выполнено [количество] команд функции '[путь к файлу функции]'. Встроенные функции не будут отображены в этом сообщении. Успешность выполнения команд нельзя проверить с помощью компаратора (хотя этого можно добиться с помощью команды /execute store).

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

Синтаксис функции[править | править код]

Тестирование системы функций. Три сообщения /tellraw и одна команда /give были использованы в этой простой функции.

В файле .mcfunction допускается одна команда в каждой строке, без обычно предшествующего слэша (/). Игроки могут добавлять комментарии в файлы с функциями, добавляя перед ними знак #.

Отдельные команды в функции могут превышать ограничение в 32.500 знаков для командных блоков, но общее количество команд внутри одной функции должно быть не более значения /gamerule maxCommandChainLength, которое по умолчанию равно 65.536. Последующие команды будут проигнорированы.

Запуск функции[править | править код]

Функции запустят все свои команды в течение одного такта, а функции, запущенные изнутри других функций, выполнятся в тот же тик, что и вызывающая функция. Функции будут использовать то окружение, в котором они были вызваны (Оно определяет исполнителя команды, его местонахождение, угол поворота и др.)

Изменени окружения, происходящие изнутри функции не отразятся на других командах внутри неё (или внутри дочерних функций) до следующего запуска, несмотря на порядок команд. Единственным исключением является команда /execute: она обновит окружение дочерних функций.

Например:

execute as @a at @s run function foo:bar

foo:bar

teleport @s ~ ~5 ~
setblock ~ ~-1 ~ emerald_block
execute at @s run setblock ~ ~-1 ~ diamond_block

При вызове игроком, эта функция телепортирует его на 5 блоков вверх, поставит изумрудный блок под его изначальной позицией до телепортации и поставит алмазный блок под его новой позицией после телепортации. Это поведение не влияет на селекторы.

рекомендуется использовать селектор @s для наиболее часто используемой сущности в фуцкнции и /execute as при вызове этой функции для изменения этой целевой сущности. Это может упростить функцию и улучшить производительность в общем, благодаря отсутствию перебора сущностей всего мира.

Существует несколько способов запуска функций в игре:

Команды[править | править код]

/function
  • Позволяет игрокам запускать одну или несколько функций одновременно
  • Использует окружение того, что вызвало данную команду
  • Изначальное окружение может быть изменено с помощью команды /execute
  • Использование: /function <пространство_имён:путь/к/файлу/функции>

Достижения[править | править код]

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

Функции-награды вызываются в 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