Функції дозволяють гравцям запускати списки команд, використовуючи текстові файли з розширенням .mcfunction
. При їх написанні рекомендується використовувати кодування UTF-8 (Без послідовностей), щоб запобігти можливим проблемам. На цій сторінці пояснюється використання функцій в Java Edition.
Використання[]
Для використання, текстовий файл повинен спочатку бути поміщений в папку шляхом [НАЗВА_СВІТУ]/datapacks/[НАЗВА_НАБОР_ДАНИХ]/data/[ПРОСТІР_ІМЕН]/functions/[ПУТЬ_К_ФУНКЦИИ]
. Простір імен та шлях до функції будуть використані при зверненні до неї в грі.
Наприклад, запуск функції custom:example/test
звернеться до файлу, що знаходиться по шляху data/custom/functions/example/test.mcfunction
. Простір імен, що використовується за умовчанням — minecraft:
. Використання власного простору імен рекомендується, щоб запобігти несподівану поведінку в разі майбутніх змін в основному просторі назв.
Функції, будучи текстовими файлами, прості в зміні і створюють менше навантаження, ніж командні блоки, при використанні у великих кількостях. Якщо ви змінили або створили нову функцію, то команда /reload
завантажить її з диска протягом гри. Це дозволяє грі застосовувати зміни, зроблені в файлах функції без виходу і перезапуску світу.
При успішному виконанні /function
, в чаті з'явиться повідомлення: Виконано [кількість] команд функції '[шлях до файлу функції]' . Вбудовані функції не будуть відображені в електронному листі. Успішність виконання команд можна перевірити за допомогою компаратора (хоча цього можна домогтися за допомогою команди /execute store
).
Як і командний блок, функції може виконувати будь-які команди з рівнем доступу не вище оператора. Вони не можуть виконувати функції, заборонені для командних блоків.
Синтаксис функції[]
В файлі .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
при виклику цієї функції для зміни цієї цільової сутності. Це може спростити процедуру і поліпшити продуктивність в загальному, завдяки відсутності перебору сутностей усього світу.
Існує кілька способів запуску функцій в грі:
Команди[]
- Дозволяє гравцям запускати одну або кілька функцій одночасно
- Використовує оточення того, що викликало дану команду
- Початкове оточення може бути змінено за допомогою команди
/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 |
Версії | |||||
---|---|---|---|---|---|
Розробка |
| ||||
Технічне |
| ||||
Мережева гра |
| ||||
Налаштування гри |
|