Функція

Матеріал з Minecraft Wiki
Перейти до: навігація, пошук
Information icon.svg
Тільки для Java Edition и Bedrock Edition

Функції дозволяють гравцям запускати списки команд, використовуючи текстові файли з розширенням .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.12pre1Фуекції додані до гри.
pre3Більше не дозволено починати писати команди з /.
Тепер коментарі можуть починатися тільки з #; використовувати // більше не дозволено.
pre4Додані аргументи [if|unless] [селектор] для команди /function.
pre6Запуск функції (наприклад, в командному блоці), умова якої не виконується, тепер вважається збоєм.
1.1317w43aФункції для переміщені в датапаки.
17w45aФункції тепер повністю аналізуються і кешуються при завантаженні.
17w49bДодана функція minecraft:tick