최근 수정 시각 : 2024-11-10 21:25:33

마인크래프트/명령어/execute

마크 excute에서 넘어옴
파일:상위 문서 아이콘.svg   상위 문서: 마인크래프트/명령어
1. 개요2. execute 문법
2.1. 실행 설정2.2. 조건 설정2.3. 저장 설정(JE)
2.3.1. 출력
3. 설명4. 예시

1. 개요

<colbgcolor=#47A0FF> execute
execute <세부 명령문...> run <실행할 명령>
<colcolor=#fff> 역사 JE | [ruby(1.8, ruby=추가)] / [ruby(1.13, ruby=변경)]
BE | [ruby(PE 알파 0.16.0 빌드 1, ruby=추가)] / [ruby(1.19.50, ruby=변경)]
EE | [ruby(?, ruby=추가)]
기능 <세부 명령문...>에 따라 <실행할 명령>을 실행한다.
관련 명령어 -
단축 명령어 -
기본값 -
<rowcolor=#fff> 싱글 사용 권한
가능 2(JE), 1(BE)

명령어의 실행 주체, 위치, 시점, 차원을 설정하고 명령어가 실행될 조건과 명령어의 결과값을 저장하는 방식을 설정한다. scoreboard와 함께 명령어의 양대산맥이다.[1]

2. execute 문법

세부 명령문은 한 명령어에 여러 번 쓰는 것이 가능하고 세부 명령문의 작성이 끝나면 run <실행할 명령>으로 끝낸다. 이때, <실행할 명령> 앞에는 슬래시(/)를 사용해서는 안 된다.

2.1. 실행 설정

명령어의 실행 주체, 위치, 시점, 차원 등을 설정할 수 있다.
  • as <대상> <다음 명령>
    • 명령어의 실행 주체를 <대상>으로 바꾸고 다음 명령을 실행한다. 명령어의 실행 위치를 바꾸진 않는다.
    • 예: 모든 주민 죽이기: 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)
    • 앞의 명령구의 주체와의 특정한 <관계>에 있는 개체가 새로운 주체가 되어 다음 명령을 실행한다.
    • <관계>에 넣을 문구는 다음과 같다.[3]
      • attacker: 최근 5초 동안 대상에게 마지막으로 피해를 입힌 개체를 주체로 설정한다. interaction 개체는 5초 이전의 기록들도 기억한다.
      • controller: 대상을 타며 조종하는 개체를 주체로 설정한다. (예시: 배 앞자리에 탄 플레이어)
      • leasher: 대상을 끈으로 묶은 개체를 주체로 설정한다. 울타리에 묶어둔 경우에는 minecraft:leash_knot 개체로 설정한다.
      • origin: 대상을 소환한 개체를 주체로 설정한다. (예시: 화살을 발사한 개체, tnt를 점화시킨 개체)
      • owner: 대상이 길들여질 수 있는 개체일 경우(고양이, 늑대, 앵무새같은), 대상의 주인을 주체로 설정한다.
      • passengers: 대상에 직접적으로 타고 있는 개체를 주체로 설정한다. 대상을 타고 있는 개체를 타고 있는 개체는 포함되지 않는다.
      • target: 대상이 공격 목표로 삼은 개체를 주체로 설정한다.[4]
      • vehicle: 대상이 타고 있는 개체를 주체로 설정한다.

2.2. 조건 설정

조건을 설정하는 세부 명령문을 사용하면 조건에 맞거나 맞지 않는 경우 <다음 명령>이 실행된다.
  • <if|unless>
    • if ...: 다음 조건과 일치할 때 <다음 명령>을 실행한다.
    • unless ...: 다음 조건과 일치하지 않을 때 <다음 명령>을 실행한다.
    • <if|unless> block <좌표> <블록> <다음 명령>
      • 해당 좌표에 맞는 블록이 있거나 있지 않을 때만 다음 명령을 실행한다.
    • <if|unless> blocks <시작 좌표> <끝 좌표> <지점> <all|masked> <다음 명령>
      • 시작과 끝으로 설정된 지역의 블록이 지점 지역의 블록과 정확히 일치하거나 일치하지 않은 경우에만 다음 명령을 실행한다. /clone과 비슷한 문법이다.
      • ... <all|masked> ...
        • all: 모든 블록이 일치
        • masked: 공기 블록을 제외하고 일치
    • <if|unless> entity <개체> <다음 명령>
      • 개체가 존재하거나 존재하지 않을 때에만 다음 명령을 실행한다.
    • <if|unless> score <대상> <스코어보드1> 〈<|<=|=|>=|>〉 <기준> <스코어보드2> <다음 명령>
      • 스코어보드1에 있는 대상의 점수와 스코어보드2에 있는 기준의 점수가 (부)등호에 맞거나 맞지 않을 때만 다음 명령을 실행한다.
    • <if|unless> score <대상> <스코어보드1> matches <범위> <다음 명령>
      • 스코어보드1에 있는 대상의 점수가 범위에 들어갔거나 들어가지 않았을 때만 다음 명령을 실행한다.
        • <범위>부분은 1(정확히 1), 1..5(1 이상 5 이하), ..6(6 이하), 3..(3 이상)와 같이 지정한다.
    • <if|unless> biome <좌표> <생물 군계> <다음 명령>(JE)
      • 해당 좌표에 있는 생물 군계가 있거나 있지 않을 때만 다음 명령을 실행한다.
    • <if|unless> dimension <차원> <다음 명령>(JE)
      • 현재 차원이 맞거나 맞지 않을 때 다음 명령을 실행한다.
    • <if|unless> function <함수> <다음 명령>(JE)
      • 함수를 실행해서 실행된 함수가 반환한 값이 1 이상이면 다음 명령을 실행한다. 만약 함수가 반환한 값이 없거나 0이라면 다음 명령을 실행하지 않는다.
    • <if|unless> loaded <좌표> <다음 명령>(JE)
      • 해당 위치에 있는 청크가 완전히 로딩되어있거나 로딩되지 않을 때 다음 명령을 실행한다.
    • <if|unless> predicate <술어> <다음 명령>(JE)
    • <if|unless> items <entity 대상|block 좌표> <슬롯> <아이템> <다음 명령>
      • 대상 및 블록의 슬롯에 있는 아이템이 일치하거나 일치하지 않을 때 다음 명령을 실행한다.

2.3. 저장 설정(JE)

store을 이용해 다음 명령의 결과나 성공 횟수를 스코어, NBT데이터, 보스바 등에 저장할 수 있다. 결과는 모든 명령어가 실행을 마친 후에 저장된다.
  • store success 다음 명령어가 성공하거나 실패하면 1(성공) 혹은 0(실패)이 반환된다.
  • store result 다음 명령어가 성공하면 반환값은 아래의 출력 문단에 따라 다르며, 실패하면 0이 반환된다.
  • store <result|success> ...
    • ... score <대상> <스코어보드> <다음 명령>
      • 다음 명령의 결과를 스코어보드에 있는 대상의 점수로 저장한다. 스코어보드는 무조건 존재해야 한다
    • ... block <위치> <경로> <byte|short|int|long|float|double> <크기> <다음 명령>
      • 블록의 NBT 데이터를 수정하고 결과를 저장한다.
    • ... entity <대상> <경로> <byte|short|int|long|float|double> <크기> <다음 명령>
      • 대상의 NBT 데이터를 수정하고 결과를 저장한다.
      • 플레이어의 NBT는 그 어떠한 경우에도 수정이 불가능하다.
    • ... bossbar <ID> <value|max> <다음 명령>
      • 결과값을 해당 ID를 가진 보스바의 값(value)이나 최대값(max)으로 저장한다.

2.3.1. 출력

명령어 상태 execute store result ...
advancement 오류 변하지 않음
실패 0
성공 각 플레이어에서 추가/제거된 발전/기준의 총 수.
attribute any 실패 0
... get [규모] 성공 속성 값의 [규모]만큼 곱한 다음 유형을 Int로 변환한다.
... base get [규모] 성공
... modifier value get [규모] 성공
... base set ...
... modifier add ...
... modifier remove ...
성공 1
ban - 실패 0
성공 차단한 플레이어의 이름 길이 수
ban-ip - 실패 0
성공 ???
banlist - 실패 0
성공 현재 차단중인 플레이어 수
clear any 실패 0
성공 지워지거나 감지된 아이템의 수
clone any 실패 0
성공 대상 지역에서 변경된 블록 수.
data any 실패 0
... get ... [대상 NBT경로] [규모] 성공 [규모]만큼 곱한 다음 유형을 Int로 변환한다.
datapack any 실패 0
datapack list 성공 활성화된 데이터 팩 개수.
debug any 실패 0
start 성공 0
stop 성공 평균 TPS
function 성공 실행된 명령 수(성공 여부에 관계없음)
deop - 실패 0
성공 OP 권한이 제거된 플레이어 수
difficulty - 실패 0
성공 현재 난이도(평화로움 = 0, 쉬움 = 1, 보통 = 2, 어려움 = 3)
... 성공 1
effect - 실패 0
성공 효과가 주어 지거나 취소 된 개체의 수
enchant - 실패 0
성공 성공적으로 부여된 플레이어의 수
execute - 실패 0
... <if|unless> block 실패 0
성공 1
... <if|unless> blocks 실패 0
성공 감지된 블록 수
... <if|unless> entity 실패 0
성공 감지된 개체 수
... <if|unless> items 실패 0
성공 감지된 아이템 수
... <if|unless> score 실패 0
성공 ?
... <if|unless> biome 실패 0
성공 ?
... <if|unless> dimension 실패 0
성공 1
... <if|unless> function 실패 0
성공 execute 출력 문단 참고.
... <if|unless> loaded 실패 0
성공 1
... <if|unless> predicate 실패 0
성공 ?
experience - 실패 0
experience ... 성공 플레이어의 경험치 또는 레벨 수
experience <add|set> ... 성공 대상 플레이어 수
fill - 실패 0
성공 성공적으로 채워진 블록 수
fillbiome - 실패 0
성공 성공적으로 채워진 생물 군계 수
function - 실패 0
성공 실행된 명령 수(성공 여부에 관계없음)
gamemode - 실패 0
성공 게임 모드가 변경된 플레이어의 수
gamerule - 실패 0
성공 현재 게임 규칙의 값(false = 0, true = 1, 정수일경우 Int.)
help - 성공 목록에 뜬 명령어 개수
kick - 실패 0
성공 대상 플레이어 수
kill - 실패 0
성공 대상 플레이어 수
list - 성공 현재 접속 중인 플레이어 수
locate - 실패 0
성공 실행자 위치와 구조물 및 생물군계간 거리
loot - 실패 0
loot spawn ... 성공 ?
loot give ... 성공 ?
loot insert ... 성공 ?
particle - 실패 0
성공 입자를 볼 수 있는 플레이어 수
playsound - 실패 0
성공 소리를 들을 수 있는 플레이어 수
random - 실패 0
<value|roll> ... 성공 출력된 난수값
reset ... 성공 리셋된 sequenceId의 개수
reload - 성공 1
return - 실패 0
<값> 성공 <값>
run <명령어> 성공 execute 출력 문단 참고.
실패 0
return fail 성공? 0
ride - 실패 0
성공 1
scoreboard - 실패 0
... <add|remove> 성공 실행 후 대상의 스코어보드 현재 값
... get 성공 대상의 스코어보드 현재 값
... list 성공 스코어보드의 수
seed - 성공 현재 시드값의 32비트로 변환되어 출력된다.
stop - 성공 1
time - 실패 0
... query ... 성공 인게임 시간.
... <add|set> ... 성공 실행 후 인게임 시간.
worldborder - 실패 0
... get 성공 정수로 반올림 한 다음 세계 경계 크기.

3. 설명

세부 명령문는 왼쪽으로부터 시작하여 오른쪽으로 순서대로 처리한다. 예를 들어 아래 명령어는 구성은 같지만 문법의 위치만 다르다.
  • 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

4. 예시

  • 모든 좀비의 위치에 번개를 소환한다.
    • execute at @e[type=zombie] run summon lightning_bolt ~ ~ ~
  • 모래 위에 있는 모든 좀비의 위치에 번개를 소환한다.
    • execute at @e[type=zombie] if block ~ ~-1 ~ minecraft:sand run summon lightning_bolt ~ ~ ~
  • 모든 플레이어에게서 5블록 반경에 있는 플레이어하고 떨어지는 번개와 아이템을 제외한 모든 개체에게 번개를 소환한다.
    • JE: execute as @a at @e[distance=..5,type=!player,type=!lightning_bolt,type=!item] run summon lightning_bolt ~ ~ ~
    • BE: execute as @a at @e[r=5,type=!player,type=!lightning_bolt,type=!item] run summon lightning_bolt ~ ~ ~
  • 플레이어의 아래에 흑요석이 감지될 경우 x y z로 tp한다. (점프맵 등에 사용됨)
    • execute as @a at @s if block ~ ~-0.001 ~ minecraft:obsidian run tp @s x y z
  • 플레이어의 아래에 금 블럭이 감지될 경우 플레이어에게 다이아몬드 검을 주고 그 블럭을 없앤다. (점프맵 등에 사용됨)
    • 첫번째 명령어 : execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run give @s minecraft:diamond_sword
    • 두번째 명령어(연쇄형) : execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run setblock ~ ~-1 ~ minecraft:air
  • 가장 가까운 플레이어의 체력을 보스바로 나타낼 때(JE)
    • execute store result bossbar minecraft:1 value run data get entity @p Health
  • Pos라는 태그를 가진 blue라는 팀에 속한 갑옷 거치대를 기준으로 가장가까에 있는 team이 red인 플레이어를 100, 100, 100으로 텔레포트 시킨다.(JE)
    • execute at @e[ team=blue, tag=Pos, type=armor_stand ] run tp @p[ team=red ] 100 100 100
  • 아머스탠드의 오른팔이 분당 10번 돌아간다.(JE)
    • 준비 : /scoreboard objectives add test dummy, /summon x y z armor_stand{ShowArms:1,Pose:{RightArm:[0.0f,0.0f,0.0f]},Tags:[test]}
    • execute as @e[tag=test,limit=1] store result @s Pose.RightArm[0] float 1 run scoreboard players add @s test 3
  • 모든 양의 양털 색깔이 스코어보드 숫자번호대로 바뀐다.(0 = 흰색, 1 = 주황색)(JE)
    • 준비 : /scoreboard objectives add color dummy, /summon sheep X Y Z {Tags:[color],NoAI:1b}
    • 반복 첫번째 : scoreboard players add $color color 1
    • 연쇄 두번째(무조건) : execute if score $color color matches 16.. run scoreboard players set $color color 0
    • 연쇄 세번째(무조건) : execute as @e[tag=color] store result entity @s Color int 1 run scoreboard players get $color color
  • 플레이어의 특정 아이템 수 스코어보드로 나타내기.(JE)
    • 준비 : /scoreboard objectives add i.c dummy, /tag @s add i.c
    • 반복 첫번째 : 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] 만약 현재 대상이 좀비이고 이 좀비가 어떤 주민을 쫓고 있다면 그 주민이 주체가 되어 다음 명령을 실행한다.