블록의 상태
다른 각도로 설치된 계단, 눌러진 갑압판, 열리고 닫힌 문, 이들의 공통점은 한 블록에 여러 종류, 또는 "상태"가 존재한단 것입니다. 반 블록을 예로 들자면, 아래에 배치된 경우, 위에 배치된 경우, 그리고 두개가 겹쳐있는 경우마다 블록을 따로 만드는건 이상하니, 마인크래프트는 하나의 블록이 여러 상태를 부여합니다.
BlockState는 블록의 각 상태를 대표하는 클래스로, 반 블록의 배치, 식물의 성장도 등을 표현하는데 사용합니다.
BlockState 속성
블록은 속성을 가지고, BlockState는 그 구체적인 값을 표현합니다. 예를 들어 계단의 방향, 식물의 성장도, 갑압판의 활성화 여부 등이 블록의 속성입니다. 한 블록은 여러 개의 속성을 가질 수 있습니다, 예를 들어 엔드 차원문 틀은 엔더의 눈 장착 여부 (eyes
, 두 가지 경우의 수)와 방향 (facing
, 네 가지 경우의 수)를 가집니다. 이 둘을 조합해 엔드 차원문은 8개 (2 * 4)의 BlockState를 가집니다:
minecraft:end_portal_frame[facing=north,eye=false]
minecraft:end_portal_frame[facing=east,eye=false]
minecraft:end_portal_frame[facing=south,eye=false]
minecraft:end_portal_frame[facing=west,eye=false]
minecraft:end_portal_frame[facing=north,eye=true]
minecraft:end_portal_frame[facing=east,eye=true]
minecraft:end_portal_frame[facing=south,eye=true]
minecraft:end_portal_frame[facing=west,eye=true]
일반적으로 BlockState는 blockid[property1=value1,property2=value,...]
형식의 문자열로 표현되며 명령어 문법으로 이용되기도 합니다.
만약 블록에 아무런 속성이 지정되지 않으면 기본값 BlockState 하나만 부여받으며, minecraft:oak_planks[]
또는 minecraft:oak_planks
처럼 단순하게 표현됩니다.
블록과 마찬가지로 블록의 각 상태는 메모리에 하나만 존재합니다. 다시 말해 두 개의 상태를 비교하는데 ==
를 사용할 수 있습니다. BlockState
는 불변 클래스 입니다; 하위 클래스를 가질 수 없으며 상호작용과 같은 기능들은 블록 클래스에서 대신 구현합니다!