마인크래프트/명령어/대상 선택 인자

 



1. 개요
2. 사용법
3. 값이 될 수 있는 것
4. 대상 선택 인자 목록
4.1. JE
4.2. BE
5. 각 대상 선택 인자 특성
6. 용례


1. 개요


대상 선택 인자는 자세한 조건 하에서 개체를 선택하고자 할 때 이용할 수 있다. 인자들은 대소문자를 구분하며, 존재하지 않는 인자 값은 경고 출력 없이 무시된다. 또한 부정 인자를 지원하므로
=
뒤에
!
를 붙이면 '''그 인자에 해당하는 개체를 제외한 개체'''가 대상이 된다. 일반 인자는 같은 인자에 겹칠 수 없지만 부정 인자는 같은 인자에 겹칠 수 있다. scores는 부정 인자가 불가능하다.
  • 예시: 플레이어를 제외한 모든 개체를 죽임:
    /kill @e[type=!player]

2. 사용법


@x[인자=값,인자=값,인자=값,...]
인자 뒤에 반드시 '''붙여서 대괄호
[]
를 이용'''해 써야 한다. 예를 들어, 범위를 2칸 이내로 설정하고자 한다면,
@a[distance=..2]
로 쓰면 된다. 대상 선택 인자의 값 설정은
:
이 아니라
=
로 한다.
여러 인자를 동시에 쓸 땐
[type=@,name=@,gamemode=@]
와 같이 쉼표를 쓰면 된다.

3. 값이 될 수 있는 것


대상 선택 인자마다 값으로 가지는 고유한 유형이 존재하며 그 목록은 다음과 같다.
  • 수: 어느 특정한 하나의 수이다.
    • 예시) 3, 2.4, 62.34
  • 구간: 하나 이상의 수, 필요 시
    ..
    으로 정의되는 집합이다. 현재 자바에디션에서만 사용할 수 있다. 베드락 에디션의 경우 분리된 두 인자를 각각 수로 지정한다.
    • 예시)
      ..2
      = (2 이하) /
      6..
      = (6 이상) /
      4.5..9.3
      = (4.5 이상 9.3 이하) /
      5
      = (정확히 5)
  • 문자열: 말 그대로 특정한 단어이다. 영어를 제외한 다른 언어(한글 포함)는
    "이름"
    과 같이 큰따옴표(")로 감싸야 한다.
    • 예시)
      c
      ,
      survival
      ,
      zombie
      ,
      "홍길동"
  • 식: 다른 식이다. 일반적으로
    {식
    } 형태로 쓴다. 즉 중괄호(
    {}
    )로 식을 감싼다.
    • 예시)
      {asdf=1
      },
      {minecraft:adventure/summon_iron_golem=true
      }

4. 대상 선택 인자 목록



4.1. JE


'''좌표'''
x=수,y=수,z=수

'''기능'''
r
이나
dx
,
dy
,
dz
대상 선택 인자의 기준을 설정한다.
'''기본값'''
실행 주체의 좌표

'''예시'''
x=10, y=14, z=-13

기준을 설정하는 인자이기 때문에 단독으로 사용할 수는 없다.

'''반지름'''
distance=구간

'''기능'''
구의 중심을 설정했던
좌표
로, 반지름을 설정한 구간의 보정값[보정]으로 갖는 구들로 설명되는 집합을 범위로 만들어 개체가 그 범위 안에 있어야 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
distance=..5
/
distance=5
/
distance=5..9


'''공간 범위'''
dx=수,dy=수,dz=수

'''기능'''
설정했던
좌표
로부터 dx, dy, dz를 더한 좌표와 실행 주체의
좌표
를 두 점으로 하는 직육면체의 공간을 범위로 지정한 후, 그 범위 안에 있어야 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
dx=2, dy=-3, dz=11


'''점수판'''
scores={식
}
'''식 구성'''
문자열(점수판 이름)=구간(점수 범위)

'''기능'''
그 개체의 점수판을 검사하여 점수가 구간 내에 있는지 확인한 후, 구간 내에 있어야 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
scores={death=..1
} /
scores={death=1..
}

'''태그'''
tag=문자열(태그 이름)

'''기능'''
해당 태그를 갖고 있는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
tag="생존자"
/
tag=afk


'''팀'''
team=문자열(팀 이름)

'''기능'''
해당 팀에 소속되어 있는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
team="적"
/
team=red

team= 으로 팀 이름을 비울 경우 팀이 없는 개체를 대상으로 적용된다.

'''수'''
limit=수

'''기능'''
정렬된 개체 중 지정한 수만큼의 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
limit=5

일부 명령어는 단순히 대상 선택 인자를 통해 선택하여도 대상으로 선택되지 않는 경우가 있다. 이는 대상이 단 하나만 선택되어야 할 경우[1]인데, 이는 limit 이라는 선택 인자를 사용해 대상을 단 하나로 지정함으로써 해결할 수 있다. [limit예시1] [limit예시2]

'''레벨'''
level=구간

'''기능'''
개체의 레벨이 지정한 구간 내에 포함되어야만 그 개체를 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
level=15
/
level=2..3


'''게임모드'''
gamemode=문자열(모드 이름)

'''기능'''
게임모드가 지정한 모드와 같은 플레이어만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
gamemode=survival


'''이름'''
name=문자열(개체 이름)

'''기능'''
지정한 개체 이름을 이름으로 하고 있는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
name="홍길동"
/
name=Alex


'''수직 회전'''
x_rotation=구간

'''기능'''
시선의 수직 방향 각도가 구간에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
-
'''예시'''
x_rotation=0..90


'''수평 회전'''
y_rotation=구간

'''기능'''
시선의 수평 방향 각도가 구간에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
-
'''예시'''
y_rotation=0..30


'''개체 종류'''
type=문자열(개체 종류 이름)

'''기능'''
개체가 지정한 종류에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
-
'''예시'''
type=villager

type=#skeletons
type=#raiders
처럼 비슷한 특성이 있는 여러 개체를 한 번에 지정할 수도 있다.

'''발전과제'''
advancements=식

'''식 구성'''
minecraft:(발전과제 분류)/(발전과제 id)=(논리값(true/false))
'''기능'''
개체가 해당 발전 과제를 깨야/깨지 않아야 그 개체를 인자로 포함시킨다.
'''기본값'''
-
'''예시'''
advancements={minecraft:adventure/summon_iron_golem=true
}

'''NBT'''
nbt=식

'''식 구성'''
{NBT}

'''기능'''
지정한 NBT 조건을 만족하는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
nbt={OnGround:1b
}

'''Predicate'''
predicate=문자열

'''문자열 구성'''
네임스페이스:ID

'''기능'''
지정한 predicate에 해당하는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
predicate=namespace:asdf

데이터 팩의 일부인 Predicate를 이용해 대상 선택 인자로 사용할 수 있다.

'''정렬'''
sort=문자열

'''기능'''
limit
등으로 선정 개체 수에 한계를 두었을 때 어떤 것부터 우선적으로 선정할지 결정한다.
'''기본값'''
-
'''예시'''
sort=nearest

  • [sort=nearest]
    는 거리가 가까운 순서에 따라 정렬한다. (@p의 기본값)
  • [sort=furthest]
    는 거리가 먼 순서에 따라 정렬한다. (c=-1)
  • [sort=random]
    은 무작위로 정렬한다. (@r의 기본값)
  • [sort=arbitrary]
    는 소환한 순서에 따라 정렬한다.
[보정] 대상 선택 인자를 통해 설정한 반지름을 r이라 했을 때, 실제로는 $$r \times \dfrac {\sqrt2}2$$을 반지름으로 하여 범위를 지정하는 듯하다.

그러니까 r = 5라면 반지름은 3.535533905932738...이 된다
[1] 예를 들어 tp 명령어의 경우, /tp 대상1 대상2로 사용하는데, 대상1은 여럿이라도 상관 없지만 대상2는 하나여만 한다.[limit예시1] kill @e[type=zombie,sort=nearest,limit=2\] - 명령어를 사용한 위치로부터 가장 가까운 순서로 좀비 2마리를 죽인다.[limit예시2] /tp @p @e[type=armor_stand,sort=random,limit=1\] - 랜덤한 아머 스탠드로 플레이어를 텔레포트 시킨다.


4.2. BE


JE와 대상 인자 이름이 조금씩 다르며 구간으로 정의하기 보다는 수 2개로 정의하려는 경향이 있다. 또한
team
,
advancements
등은 BE에 해당 기능이 없어서 대상 선택 인자로도 제공되지 않는다.
'''좌표'''
x=수,y=수,z=수

'''기능'''
r
이나
dx
,
dy
,
dz
대상 선택 인자의 기준을 설정한다.
'''기본값'''
실행 주체의 좌표

'''예시'''
x=10, y=14, z=-13

기준을 설정하는 인자이기 때문에 단독으로 사용할 수는 없다.

'''반지름'''
r=수
,
rm=수

'''기능'''
구의 중심을 설정했던
좌표
로, 반지름을 설정한 구간의 보정값[보정]으로 갖는 구들로 설명되는 집합을 범위로 만들어 개체가 그 범위 안에 있어야 인자에 포함시킨다.
'''기본값'''
(두 인자 중 하나를 지정한 경우)
rm
=0,
r
=∞
'''예시'''
rm=3, r=5

rm
은 최소 반지름,
r
은 최대 반지름이다.

'''공간 범위'''
dx=수,dy=수,dz=수

'''기능'''
설정했던
좌표
로부터 dx, dy, dz를 더한 좌표와 실행 주체의
좌표
를 두 점으로 하는 직육면체의 공간을 범위로 지정한 후, 그 범위 안에 있어야 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
dx=2, dy=-3, dz=11


'''점수판'''
scores={식
}
'''식 구성'''
문자열(점수판 이름)=구간(점수 범위)

'''기능'''
그 개체의 점수판을 검사하여 점수가 구간 내에 있는지 확인한 후, 구간 내에 있어야 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
scores={death=..1
} /
scores={death=1..
}

'''태그'''
tag=문자열(태그 이름)

'''기능'''
해당 태그를 갖고 있는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
tag="생존자"
/
tag=afk


'''수'''
c=수

'''기능'''
정렬된 개체 중 지정한 수만큼의 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
c=5

JE는 limit를 쓴다.

'''레벨'''
l=수
,
lm=수

'''기능'''
개체의 레벨이 지정한 구간 내에 포함되어야만 그 개체를 인자에 포함시킨다.
'''기본값'''
(두 인자 중 하나를 지정한 경우)
lm
=0,
l
=∞
'''예시'''
lm=2,l=7

lm
은 최소 수이고,
l
은 최대 수이다.

'''게임모드'''
m=문자열(모드 이름) 또는 수(모드 번호)

'''기능'''
게임모드가 지정한 모드와 같은 플레이어만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
m=0

JE에서는
gamemode
로 쓴다.
BE는 JE와 다르게 모드 번호 및 모드 단축 이름을 쓸 수 있다.

'''이름'''
name=문자열(개체 이름)

'''기능'''
지정한 개체 이름을 이름으로 하고 있는 개체만 인자에 포함시킨다.
'''기본값'''
-
'''예시'''
name="홍길동"
[2] /
name=Alex


'''수직 회전'''
rxm=수,rx=수

'''기능'''
시선의 수직 방향 각도가 구간에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
(두 인자 중 하나를 지정한 경우)
rxm
=0,
rx
=?
'''예시'''
rxm=0, rx=90

rxm
은 최소 수직 회전이고,
rx
는 최대 수직 회전이다.

'''수평 회전'''
rym=수,ry=수

'''기능'''
시선의 수평 방향 각도가 구간에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
(두 인자 중 하나를 지정한 경우)
rym
=0,
ry
=?
'''예시'''
rym=0, ry=30

rym
은 최소 수평 회전이고,
ry
는 최대 수평 회전이다.

'''개체 종류'''
type=문자열(개체 종류 이름)

'''기능'''
개체가 지정한 종류에 포함되어 있어야 그 개체를 인자로 포함시킨다.
'''기본값'''
-
'''예시'''
type=villager


'''패밀리'''
Family=실행인자

'''기능'''
1.16.100 버전에서 나온 뉴 타겟, 특정 종류[3]의 엔티티를 대상으로 삼는다.
'''기본값'''
-
'''예시'''
family=monster


5. 각 대상 선택 인자 특성


scores
인자는
scores={"점수판 이름"=인수 범위}
형태로 사용할 수 있다.

6. 용례


  • 실행 주체로부터 반경 20블록 안에 있는 모든 플레이어를 위쪽으로 20블록만큼 텔레포트
    • tp @a[distance=..20] ~ ~20 ~
  • x=10, y=20, z=30을 기준으로 반경 20블록 안에 있는 좀비 두 마리를 위로 20블록만큼 텔레포트
    • execute positioned 10 20 30 as @e[distance=..20,limit=2,type=zombie] run tp @s ~ ~20 ~
  • x=10, y=20, z=30을 기준으로 반경 20블록 안에 있는 test 점수가 3 이상 5 이하인 좀비 두 마리를 위로 20블록만큼 텔레포트
    • execute positioned 10 20 30 as @e[distance=..20,limit=2,type=zombie,scores={test=3..5}] run tp @s ~ ~20 ~
  • 가장 가까운 좀비 두 마리를 위로 20블록만큼 텔레포트
    • tp @e[type=zombie,sort=nearest,limit=2] ~ ~20 ~

[보정] 대상 선택 인자를 통해 설정한 반지름을 r이라 했을 때, 실제로는 $$r \times \dfrac {\sqrt2}2$$을 반지름으로 하여 범위를 지정하는 듯하다.[2] 이름에 띄어쓰기가 없으면 큰따옴표를 적지 않아도 된다.[3] 몬스터, 몹, 좀비류, 언데드 및 좀비, 스켈레톤, 크리퍼, 엔더맨 등