Guides / Commands & Data

/execute: почему важен порядок as/at и как на самом деле работает store

Большинство ошибок в цепочках execute возникают из-за путаницы между тем, кто выполняет команду и где она выполняется. Здесь объясняется, что меняет каждая подкоманда и какой порядок это исправляет.

/execute — это одна команда, притворяющаяся языком сценариев. Почти каждая ошибка проистекает из двух подкоманд, которые звучат так, будто делают одно и то же, но на самом деле это не так.

as меняет КТО. at меняет ГДЕ.

  • as <target> — меняет исполнителя. @s теперь относится к этой сущности. Позиция не меняется.
  • at <target> — меняет позицию, поворот и измерение. Исполнитель не меняется.

Поэтому это не приносит пользы:

execute as @e[type=zombie] run setblock ~ ~ ~ stone

Она выполняется один раз для каждого зомби, но всегда у ваших ног, поэтому она размещает один блок снова и снова. Решение — использовать обе:

execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone

at @s перепривязывается к зомби, которого только что выбрал as. as … at @s — это самая распространенная пара во всей команде, а забыть at @s — самая распространенная ошибка.

Порядок слева направо, и он накапливается

Подкоманды выполняются последовательно, каждая изменяет контекст, который видит следующая:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — один проход для каждого Игрока
  2. at @s — переместиться к этому Игроку
  3. positioned ^ ^ ^3 — 3 блока перед тем, куда они смотрят

Поменяйте местами шаги 2 и 3, и смещение каретки будет измеряться от вашего поворота, а не от их.

Каретка против тильды

  • ~ ~ ~ — относительно позиции, выровненной по мировым осям
  • ^ ^ ^ — относительно направления: влево, вверх, вперед

Координаты с кареткой объясняют, почему positioned ^ ^ ^3 означает "впереди", а ~ ~ ~3 означает "3 блока на юг". Смешивание двух обозначений в одной тройке координат является синтаксической ошибкой.

store — это возвращаемое значение, а не переменная

store фиксирует то, что команда возвращает — обычно количество успешных выполнений или результирующее значение:

execute store result score @s Count run data get entity @s Inventory

Две вещи, которые люди понимают неправильно:

  • result против success. result — это число, которое производит команда; success — это 1 или 0 в зависимости от того, выполнилась ли она. Для подсчета сущностей требуется result.
  • store идет перед run, и оно применяется к команде после run, а не к цепочке подкоманд.

if против unless — короткое замыкание

if и unless фильтруют — цепочка останавливается, если проверка не удалась. Несколько предложений if — это И. Оператора ИЛИ нет; для этого нужны две отдельные команды или предикат.

execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...

Создавайте цепочку по одной подкоманде, с контекстом, показанным на каждом шаге, в Расширенном конструкторе команд — он также охватывает данные, предметы, лут, расписание, частицы и звуки из той же формы.

Продвинутые команды — Execute и Data →

More guides

Browse all →

Нужны другие инструменты для Minecraft?

Набор генераторов, просмотрщиков и конвертеров прямо в браузере — всё бесплатно.