Зачем нужна команда /execute
/execute — не обычная команда, а точка входа в целую цепочку подкоманд. Сама по себе она ничего не делает: сначала идут модификаторы и условия, а в конце — run и уже настоящая команда, которую нужно выполнить. Именно на execute держится почти вся логика самодельных карт, мини-игр и ловушек на командных блоках: старую /testfor давно убрали из игры, и вместо неё везде используется связка execute if ... run ....
Подкоманды execute делятся на две группы:
- модифицирующие — меняют, откуда и от чьего имени выполняется команда (as, at, positioned, rotated, facing, align, anchored, in);
- условные — проверяют, выполнять команду дальше или нет (if / unless).
Отдельно стоит store — он не проверяет условие, а сохраняет результат выполнения команды, например в scoreboard.
Аргументы execute: таблица
| Аргумент | Что делает |
|---|---|
| as <селектор> | Меняет сущность, от имени которой выполняется команда. Если селектор указывает на несколько целей, команда выполнится для каждой по очереди |
| at <селектор> | Переносит точку исполнения на позицию, поворот и измерение указанной сущности |
| positioned |
Задаёт координаты исполнения напрямую, без изменения поворота и измерения |
| rotated |
Задаёт направление взгляда для команды. Вместо числа можно поставить ~, чтобы взять поворот текущей сущности |
| facing |
Разворачивает точку исполнения в сторону координат или сущности |
| align |
Округляет координаты исполнения до угла ближайшего блока по выбранным осям |
| anchored eyes/feet | Указывает, что считать точкой отсчёта у сущности — глаза или ноги, важно вместе с facing и rotated |
| in <измерение> | Переносит исполнение команды в другое измерение (overworld, the_nether, the_end или своё кастомное) |
| if / unless block, blocks, data, entity, predicate, score, biome, dimension, function, items, loaded | Проверяет условие и решает, выполнять ли команду дальше. unless — то же самое, но наоборот |
| store result / store success <куда> | Сохраняет число или результат (0 или 1) выполнения команды в scoreboard, NBT блока/сущности или в data storage |
| run <команда> | Финальная часть — сама команда, которая выполнится, если все проверки выше прошли |
Условия if / unless: что можно проверять
Самые ходовые проверки в if/unless:
- block <координаты> <блок> — стоит ли на месте нужный блок (в том числе с NBT-данными через data);
- entity <селектор> — есть ли поблизости сущность по заданным параметрам (тип, дистанция, NBT, режим игры и так далее);
- score <игрок> <цель> <=/</>/матчи> — сравнение значения scoreboard с числом или диапазоном;
- data — сравнение NBT-тегов блока, сущности или data storage;
- predicate — проверка по заранее описанному предикату (для сложной логики стоит смотреть отдельно);
- dimension, biome, loaded — проверки на измерение, биом или прогруженный чанк.
Важный нюанс: сам execute if entity выводит в чат количество подошедших под условие сущностей, а execute store умеет забирать именно это число и класть в scoreboard — так координаты, счётчики и любые другие данные превращаются в переменные для датапака или карты.
Пример 1: телепорт по условию
Классика для карт с закрытыми зонами — не пускать игрока дальше определённой границы и телепортировать его обратно с сообщением.
# командный блок 1 (цикличный, всегда активен, условие if рядом с зоной)
execute as @a[distance=..2] at @s run tp @s <x> <y> <z>
# командный блок 2 (цепной, условный, всегда активен)
tellraw @a[distance=..2] {"text":"Сюда нельзя"}
Цепной блок обязательно ставится условным и разворачивается стрелкой на цикличный — иначе телепорт сработает, а сообщение нет (или наоборот, если перепутать порядок). Дистанцию проверяют через .. перед числом: 2 значит ровно 2 блока, ..2 значит до двух блоков включительно.
Пример 2: детект блока под ногами
Проверка, стоит ли игрок на конкретном блоке, нужна для ловушек, чек-поинтов и скрытых кнопок:
execute as @a at @s if block ~ ~-1 ~ minecraft:stone_pressure_plate run say Игрок наступил на плиту
Точно так же можно проверять NBT конкретного блока (например, состояние сундука или двери) через if block ... с указанием тега, или наличие сущности рядом через if entity @e[type=creeper,distance=..3].
Пример 3: автоматическая ловушка на командных блоках
Схема с молнией по трезубцу или огнём под открытым небом строится на тех же принципах: цикличный командный блок проверяет условие через execute if, а результат сразу используется в run:
# ловушка: молния бьёт в любую сущность с тегом trident
execute as @e[type=trident] at @s run summon lightning_bolt ~ ~ ~
# огонь появляется только там, где над головой нет блоков (по карте высот world_surface)
execute as @a at @s positioned ~ ~ ~ run setblock ~ ~-1 ~ fire
Для мини-игр такую конструкцию комбинируют со scoreboard: execute if score считает очки, таймеры или прогресс, а execute store result score записывает туда результат другой команды — так делаются счётчики попаданий, гонки и системы уровней без единого датапака.
Для каких версий это актуально
Современный синтаксис execute (as/at/positioned/if/unless/store) работает начиная с обновления 1.13, когда команды в игре переписали почти полностью и убрали execute в старом формате вместе с /testfor. С тех пор синтаксис принципиально не менялся вплоть до актуальных версий 1.20–1.21 — добавлялись только новые условия (например, predicate, function, items) и мелкие аргументы вроде anchored. Так что гайды и командные блоки, написанные под 1.16–1.21, взаимозаменяемы.
FAQ
Чем execute отличается от старой команды testfor?
testfor только проверяла условие и ничего больше не умела. execute — это целый конструктор: он совмещает проверку условия, смену позиции и точки исполнения и запуск любой другой команды в одной строке.
Можно ли использовать несколько условий if подряд?
Да, execute if ... if ... if ... run ... — условия можно ставить цепочкой, команда выполнится только если сработали все.
Почему команда после execute if срабатывает бесконечно?
Если командный блок цикличный и без разделения на импульсный/цепной блок, условие будет проверяться каждый тик. Для разового срабатывания (например, звук или телепорт) используют импульсный командный блок или дополнительную проверку через scoreboard.
Как сохранить результат execute в переменную?
Через execute store result score <игрок> <цель> run <команда> — число, которое команда выводит в чат (например, количество найденных сущностей или координата), запишется в scoreboard и станет доступно для дальнейших расчётов.