|
1 | 1 | ## {macro} Что такое макросы и как ими пользоваться? |
2 | | -Макросы являются мощной фичей, которая была добавлена в 1.20.2. Она позволяет запускать функции со специальными командами, в которые можно вставлять значения нбт тегов, чтоб сформировать в итоге полную команду — то есть по сути, это динамические команды. Создать команду с макросом очень просто — достаточно поставить знак `$` в самом начале команды, чтоб дать знать майну, что эта команда будет содержать в себе макросы, а дальше вы можете в абсолютно любом месте команды прописать `$(<название нбт тега>)`. Вот пример макро функции: |
| 2 | +Макросы являются мощной фичей, которая была добавлена в 1.20.2. Она позволяет исполнять функции со специальными командами, в которые можно вставлять значения нбт тегов, чтоб сформировать в итоге полную команду — то есть по сути, это динамические команды. Создать команду с макросом очень просто — достаточно поставить знак `$` в самом начале команды, чтоб дать знать майну, что эта команда будет содержать в себе макросы, а дальше вы можете в абсолютно любом месте команды прописать `$(<название нбт тега>)`. Вот пример макро функции: |
3 | 3 | {mcf} `macro.mcfunction`: |
4 | 4 | ```ansi |
5 | 5 | [37m$[35mtellraw [36m@a [32m"Я люблю есть [34m$[33m([0mfood[33m)[32m на обед." |
6 | 6 | ``` |
7 | | -Теперь попробуем запустить эту функцию, и в конце команды function дадим разные аргументы в виде нбт тега `food` для запуска этой функции: |
| 7 | +Теперь попробуем запустить эту функцию, и в конце команды function дадим разные аргументы в виде нбт тега `food` для исполнения этой функции: |
8 | 8 | ```ansi |
9 | 9 | [35mfunction [33mnamespace:macro {[37mfood[34m:[32m"пиццу"[33m} |
10 | 10 | [35mfunction [33mnamespace:macro {[37mfood[34m:[32m"суп"[33m} |
11 | 11 | [35mfunction [33mnamespace:macro {[37mfood[34m:[32m"тортики"[33m} |
12 | 12 | ``` |
13 | | -При воспроизведении первой команды в чат высветится такое сообщение: |
| 13 | +При исполнении первой команды в чат высветится такое сообщение: |
14 | 14 | `Я люблю есть пиццу на обед.` |
15 | | -При воспроизведении второй команды уже другое сообщение: |
| 15 | +При исполнении второй команды уже другое сообщение: |
16 | 16 | `Я люблю есть суп на обед.` |
17 | | -При воспроизведении третьей: |
| 17 | +При исполнении третьей: |
18 | 18 | `Я люблю есть тортики на обед.` |
19 | 19 | ---separator--- |
20 | 20 | Как видите, значение нбт тега food стало частью команды tellraw и таким образом смогли вывести в чат три разных сообщения одной функцией. Посмотрим на более интересный пример. В этот раз вместо вписывания аргументов вручную мы возьмём нбт теги у самого игрока: |
21 | 21 | {mcf} `macro.mcfunction`: |
22 | 22 | ```ansi |
23 | 23 | [37m$[35msetblock [32m~ ~-1 ~ [34m$[33m([0mid[33m) |
24 | 24 | ``` |
25 | | -Теперь воспроизведём эту функцию такой командой: |
| 25 | +Теперь запустим эту функцию такой командой: |
26 | 26 | ```ansi |
27 | 27 | [35mexecute [34mas [36m@a [34mat [36m@s [34mrun [35mfunction [33mnamespace:macro [34mwith entity [36m@s [0mSelectedItem |
28 | 28 | ``` |
29 | | -При воспроизведении этой команды мы берём все нбт теги из тега `SelectedItem` игрока и передаём их нашей функции. в `SelectedItem.id` находится айди предмета в руке игрока. Если игрок взял в руку, например, синюю шерсть, то функция возьмёт `id` предмета в руке, а это у нас будет `minecraft:blue_wool`, то в итоге в функции образуется такая команда: |
| 29 | +При исполнении этой команды мы берём все нбт теги из тега `SelectedItem` игрока и передаём их нашей функции. в `SelectedItem.id` находится айди предмета в руке игрока. Если игрок взял в руку, например, синюю шерсть, то функция возьмёт `id` предмета в руке, а это у нас будет `minecraft:blue_wool`, то в итоге в функции образуется такая команда: |
30 | 30 | ```ansi |
31 | 31 | [35msetblock [32m~ ~-1 ~ [33mminecraft:blue_wool |
32 | 32 | ``` |
33 | | -и под игроком появится блок синей шерсти. Таким образом, какой блок возьмёт в руку игрок, такой блок и поставится под игроком при воспроизведении той функции. Если же игрок возьмёт какой то предмет не-блок, например железный меч, то образуется команда `setblock ~ ~-1 ~ minecraft:iron_sword` и майн не сможет выполнить такую команду, а значит и под игроком ничего не поставится. |
| 33 | +и под игроком появится блок синей шерсти. Таким образом, какой блок возьмёт в руку игрок, такой блок и поставится под игроком при исполнении той функции. Если же игрок возьмёт какой то предмет не-блок, например железный меч, то образуется команда `setblock ~ ~-1 ~ minecraft:iron_sword` и майн не сможет выполнить такую команду, а значит и под игроком ничего не поставится. |
34 | 34 |
|
35 | 35 | **Важно!** Не злоупотребляйте макросами в вашем датапаке, ведь они довольно сильно влияют на производительность. Если вам несложно избежать использования макросов ради значительного увеличения производительности, то лучше так и сделайте. |
0 commit comments