FirstMine

Команда /execute в Minecraft: как работает и примеры для карт

Разбираем синтаксис команды /execute — as, at, if, unless, positioned, rotated, facing, store, run — и показываем рабочие примеры для командных блоков: телепорт по условию, детект блока, ловушки и мини-игры.

Зачем нужна команда /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 или facing entity <селектор> Разворачивает точку исполнения в сторону координат или сущности
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 и станет доступно для дальнейших расчётов.

Частые вопросы

Чем execute отличается от старой команды testfor?

testfor только проверяла условие. execute совмещает проверку условия, смену позиции исполнения и запуск любой другой команды в одной строке.

Можно ли использовать несколько условий if подряд?

Да, execute if ... if ... if ... run ... — условия ставятся цепочкой, команда выполнится только если сработали все.

Почему команда после execute if срабатывает бесконечно?

Если командный блок цикличный без разделения на импульсный и цепной, условие проверяется каждый тик. Для разового срабатывания используют импульсный командный блок или проверку через scoreboard.

Как сохранить результат execute в переменную?

Через execute store result score <игрок> <цель> run <команда> — число из вывода команды запишется в scoreboard.