명령어의 실행 주체를 <대상>으로 바꾸고 다음 명령을 실행한다. 명령어의 실행 위치를 바꾸진 않는다.
예: 모든 주민 죽이기: execute as @e[type=villager] run kill @s
at <대상> <다음 명령>
명령어의 실행 위치를 <대상>의 위치, 시점, 차원으로 바꾸고 다음 명령을 실행한다.
예: 모든 주민을 1칸 위로 올리기: execute as @e[type=villager] at @s run tp @s ~ ~1 ~
만약 tp @e[type=villager] ~ ~1 ~를 실행하면, 주민 각각이 1칸 위로 올라가는 것이 아닌 모든 주민이 실행자의 1칸 위로 순간이동한다.]
실행 주체를 변경하지 않기에 다음 명령어를 쓰면 실행자가 죽는다. execute at @e[type=villager] run kill @s
positioned <좌표> <다음 명령>
명령어의 실행 위치를 <좌표>로 바꾸고 다음 명령을 실행한다.
positioned as <대상> <다음 명령>
명령어의 실행 위치를 <대상>의 좌표로 바꾸고 다음 명령을 실행한다. at과 달리 위치만 바꿀 뿐 시점, 차원을 바꾸지는 않는다.
positioned over <하이트맵> <다음 명령>(JE)
지정된 실행 위치를 x와 z 좌표값을 유지한 채 y 좌표값을 <하이트맵>에 따른 가장 높은 위치로 바꾸고 다음 명령을 실행한다. <하이트맵>에 넣을 문구는 다음과 같다.
world_surface: 가장 높은 곳.
motion_blocking: 충돌 판정이 없는 블록(꽃, 키 작은/키 큰 잔디, 양탄자[2] 등)을 제외한 가장 높은 곳.
motion_blocking_no_leaves: 충돌 판정이 없는 블록(꽃, 키 작은/키 큰 잔디, 양탄자 등) + 잎을 제외한 가장 높은 곳.
ocean_floor: 유체(물, 용암)를 제외한 가장 높은 곳.
align <기준> <다음 명령>
명령어의 실행 위치의 좌표의 소수부를 <기준>에 따라 버림하여 정수로 만든 뒤 그 위치에서 다음 명령을 실행한다. x, y, z를 조합해 x, xz, zyx, yz와 같은 형식으로 쓰고, 쓴 좌표축에 해당하는 좌표의 값의 소수 부분을 버림한다. 버림이 아니라 올림을 하고 싶다면 align xyz positioned ~1 ~1 ~1과 같이 쓰면 된다.
예: 좌표가 (2.9, -13.2, 6.24)일 때 기준이 yz면 (2.9, -14.0, 6.0)이 된다. 음수에서 버림이 일어날 때 -13.0이 아님에 주의하자.
facing <좌표> <다음 명령>
명령어 실행 위치에서 <좌표>를 바라보는 시점으로 다음 명령을 실행한다.
facing entity <개체> <eyes|feet> <다음 명령>
명령어 실행 위치에서 <개체>의 눈(eyes)이나 발(feet)을 바라보는 시점으로 다음 명령을 실행한다.
rotated <시점 좌표> <다음 명령>
<시점 좌표>의 방향의 시점으로 다음 명령을 실행한다.
rotated as <개체> <다음 명령>
<개체>가 바라보는 방향과 동일한 방향의 시점으로 다음 명령을 실행한다.
in <차원> <다음 명령>
명령어의 실행 위치를 해당 차원으로 바꾸고 다음 명령을 실행한다. 차원은 기본적으로 minecraft:overworld, minecraft:the_end, minecraft:the_nether가 있는데, 모드, 플러그인, 데이터 팩, 만우절 버전 등으로 차원을 추가된 차원도 지원된다.
anchored <eyes|feet> <다음 명령>
명령어 실행 위치를 명령어 실행 주체의 눈(eyes) 또는 발(feet)로 바꾸고 다음 명령을 실행한다. 기본값은 feet이다.
summon <개체> <다음 명령>(JE)
<개체>를 소환하고 명령어의 실행 주체, 위치, 시점, 차원을 소환된 개체를 기준으로 하여 다음 명령을 실행한다.
on <관계> <다음 명령>(JE)
앞의 명령구의 주체와의 특정한 <관계>에 있는 개체가 새로운 주체가 되어 다음 명령을 실행한다.
세부 명령문는 왼쪽으로부터 시작하여 오른쪽으로 순서대로 처리한다. 예를 들어 아래 명령어는 구성은 같지만 문법의 위치만 다르다.
execute as @e at @s run tp ^ ^ ^1 - 모든 개체는 1블록 앞으로 이동한다.
execute at @s as @e run tp ^ ^ ^1 - 모든 개체는 실행자의 앞의 1블록으로 순간 이동한다.
일부 세부 명령문은 명령어를 여러번 실행할 수 있다. 즉 그 뒤에 오는 세부 명령문이 여러번 실행된다. 예를 들어 "as" 세부 명령문에 여러 개체를 선택하는 경우 그 뒤에 나오는 세부 명령문은 개체당 한 번씩 실행된다.
또한 세부 명령문이 테스트에 실패하거나 대상 지정이 없다면 다음 세부 명령문은 실행 시도조차 하지 않는다. 이를 이용해 명령어 최적화가 가능하다.
execute as @e at @s if score $namu wiki matches 1 run say hello world!
execute if score $namu wiki matches 1 as @e at @s run say hello world!
위 명령어는 둘다 같은 일을 하지만 대상을 지정 후 조건 확인, 조건 확인 후 대상을 지정의 차이점이다. 실행 조건이 있는데 굳이 먼저 모든 대상을 지정해야 했을까? 거기에 as가 다수라면 그 조건을 여러번 확인하기에 최적화도 더 안좋다. 따라서 웬만하면 조건 확인 후 다음 명령어를 실행하는 게 더 좋다.
... run execute ...는 효과가 전혀 없다. 아래 명령어는 모두 동일하며, 쓸데없는 연산을 하기에 명령어 실행 시 지연이 추가로 발생한다.
execute as @e[type=minecraft:armor_stand] as @e[type=minecraft:armor_stand] run summon minecraft:armor_stand
execute as @e[type=minecraft:armor_stand] run execute as @e[type=minecraft:armor_stand] run execute run execute run summon minecraft:armor_stand
반복 첫번째 : execute as @a[tag=i.c] store result score @s i.c run clear @s <특정 아이템> 0
플레이어가 밟고 있는 공급기에 조합법(부싯돌, 종이, 다이아몬드 검)이 충족되면 자동으로 날카로움 2 책으로 조합
execute at @a positioned ~ ~-0.001 ~ if block ~ ~ ~ minecraft:dropper if items block ~ ~ ~ container.0 minecraft:flint if items block ~ ~ ~ container.1 minecraft:paper if items block ~ ~ ~ container.5 minecraft:paper if items block ~ ~ ~ container.7 minecraft:paper if items block ~ ~ ~ container.8 minecraft:diamond_sword run item replace block ~ ~ ~ container.4 with minecraft:enchanted_book[minecraft:stored_enchantments={"minecraft:sharpness":2}]
[1]
과장이 아니라, execute와 scoreboard 없이 뭔가 작동하는 미니게임 같은 걸 만드는 건 어마어마한 노가다가 필요하거나 아예 불가능하다.
[2]
양탄자는 충돌 판정이 있음에도 없는 판정으로 계산된다.
[3]
다음의 '대상'은 모두 '앞의 명령구를 실행하던 (이전) 주체'를 지칭한다.
[4]
만약 현재 대상이 좀비이고 이 좀비가 어떤 주민을 쫓고 있다면 그 주민이 주체가 되어 다음 명령을 실행한다.