마인크래프트의 선택자 세부 조건 중, 엔티티의 nbt
를 검사하는 nbt={}
인자가 존재합니다.
해당 엔티티의 nbt
기능과 자료형만 충분히 숙지한다면, 꽤나 편리하게 사용할 수 있습니다.
예를 들어, “투명한 갑옷 거치대”는 다음 조건으로 탐색할 수 있습니다.
execute as @e[type=armor_stand,nbt={Invisible:1b}]
또한, !
(조건 뒤집기)를 삽입할 수 있으며, “조용하지 않은 모든 엔티티”는 다음 조건으로 탐색할 수 있습니다.
execute as @e[nbt=!{Silent:1b}]
nbt
가 없는 엔티티(예: 표지)도 함께 선택합니다.그러나 nbt={}
는 생각보다 매우, 매우 성능을 하락시킵니다.
간단하게 tag
세부 조건과 비교해 보겠습니다.
tag
nbt
우선 nbt={}
인자를 구성하는 코드를 살펴보도록 합시다.
3번째 줄에 현재 작성된 nbt={}
구문을 compoundtag
에 저장하는 동작을 수행하는 것을 확인할 수 있습니다.
이후(5번째 줄), compoundtag2
변수에 nbt={}
구문이 적용되는 엔티티의 nbt
를 새 CompoundTag
객체를 생성해
saveWithoutId
메서드(직역하면 id
없이, 즉, Passengers
를 제외한 nbt
를 저장한다는 의미. 즉, 얘가 랙의 주원인)를 실행합니다.
다음으로 플레이어면서, 어떤 아이템을 들고 있다면, 특수 nbt
인 SelectedItem
을 삽입합니다.
최종적으로 compareNbt
메서드를 실행해 boolean
을 반환합니다.
참고로 하단의
entityselectorparser6 -> { return true; }
람다함수는 이 인자가 중복 사용될 수 있는지를 설정합니다.nbt={}
의 경우에는 중첩하여, 이용할 수 있습니다. (e. g.[nbt={Silent:1b}, nbt={OnGround:1b}, nbt={Invisible:1b}]
) 이렇게 중복 사용하면 성능을 더욱 저하시킵니다. [MC-257155]
saveWithoutId