개인 자료란 (JE)

  서버 커뮤니티

Profile Shawny 일반인

Plugin_TechD ce85c15886f64ce9b6f9170a4348769d

Profile

강좌 자바 에디션(JE) 플러그인 개발

[Spigot] ItemStack 과 Block 그리고 PersistentDataContainer

2024.01.09 조회 수 195 추천 수 0
분야 플러그인 
장르 개발자 툴, 정보전달 
게임버전 모든버전 
API 스피곳, 페이퍼 

Team Paradox의 글입니다.


Spigot 에는 ItemStack 과 Block 그리고 PersistentDataContainer가 있다.


ItemStack은 인벤토리에 한 칸을 차지하는 아이템을 뜻하는데 이름에서 알 수 있듯이

Item - Stack   아이템들의 개수도 ItemStack 안에 포함된다. 

64개의 흙 블럭을 32개씩 두개로 나누는 순간, 1개의 ItemStack이 2개의 ItemStack으로 나뉜다.
그럼 흙은 뭐냐? ItemStack의 Material 이다.

이 ItemStack 은, 정글나무 원목을 Material 로 하는 개수가 5개인 

1개의 ItemStack 이다.

이 공백 아이템칸은, Spigot 1.20.x 버전에 따르면

Material 을 Air 로 갖는 개수가 0개인 

1개의 ItemStack 이다.


Material 과 Item Stack 에 관계를 이해하기 힘들었던 사람에게 도움이 되길 바란다.


ItemStack 은 신기하고 유용한 기능이 있는데, 

Plugin이 reload 되거나 껐다가 켜져도 영구적인 데이터를 보관할 수 있다.

이러한 데이터를 담고있는 컨테이너가 있는데 

이것이 바로 Persistent Data Container 이다. (이하 PDC)

PDC는

이렇게 불러올 수 있는데 itemStack의 itemMeta 안에 들어가있다.

여담으로 Player 도 PDC를 갖고 있는데, player.getPersistentDataContainer() 를 통해 바로 불러올 수 있다.


ItemMeta 도 PDC처럼 영구 데이터를 보관한다. (아이템 이름, 아이템 Lore, enchante 등... 이 itemMeta 에 포함된다.)

PDC는 세 개의 argument를 받는데, namespacedKey, type 그리고 값을 받는다.

간단하게 말하면 key - value 값인데 type 을 추가해주라는 말과 같다. (오래된 구식 언어들의 형태)

namespacedKey는 한 서버 안에 여러 플러그인들이 존재할 때, 충돌을 방지하기 위해 있는것으로 보인다. (plugin을 참조하고 있다.)

그리고 type에는 string, integer, integer_array 등 많은 타입들이 있고 (java의 모든 기본 타입들이 있진 않지만 충분하다고 생각된다)

값은 type에 해당하는 값을 잘 넣어주면 된다.


그렇다면 Block은 뭘까?

아까 위에 정글나무 원목을 Material로하는 ItemStack을 설치하는 순간 Block이 된다.

그러면 둘이 같은 것이 아닐까?

ItemStack 중에는 Material 이 설치 가능한 것이 있고, 가능하지 않은 것들이 있다. (Sword는 설치가 불가능)


그렇다면 모든 Block들은 ItemStack 이 될 수 있는가?

가능하다. 하지만 Block과 ItemStack 에는 가장 큰 차이점이 있는데,

Block에는 PDC가 존재하지 않는다.

따라서 DB 를 따로 두어야 영구적인 데이터를 보관할 수 있다. 


예를 들어 스포너를 설치했는데 커스텀 몬스터가 나왔으면 한다.

열심히 스포너 ItemStack 의 PDC에 데이터를 담아서 설치를 해주었는데

커스텀한 몬스터가 나오지 않는다면

ItemStack 을 설치하는 순간 설치된 Block에는 아이템의 PDC가 사라진다는것을 기억해줬으면 좋겠다. 

물론 손에 계속 아이템을 들고있다면 아이템에는 데이터가 남아있다.


그러면 뭐 어떻게 해줘야 커스텀 몬스터를 소환할 수 있는데?


몬스터 스폰 이벤트를 받고, 이벤트의 발생 스포너를 갖고와서 DB의 데이터를 읽어주어야한다.

커스텀 스포너 만들기는 다음 글에서...

Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/308/805/003/262x150.crop.jpg?20240605201646

레드스톤

[노트블럭 커버] 팬서비스/mona 【 HoneyWorks 】

노트블럭전문가

2024-06-05

0

/files/thumbnails/288/791/003/262x150.crop.jpg?20240602150002

아티클

《까다로운 시련》 업데이트 날짜 공개 및 정보

학교가기싫다

2024-06-02

0

/files/thumbnails/841/773/003/262x150.crop.jpg?20240526120908

레드스톤

마인크래프트 노트블록버전 『 봄을 고하다 (春を告げる) 』 [더블옥타브 버전]

노트블럭전문가

2024-05-26

0

/files/thumbnails/712/796/003/262x150.crop.jpg?20240525085438

레드스톤

마인크래프트 노트블록으로 만든 『 봄을 고하다 (春を告げる) 』 1

Sonttukk

2024-05-25

1

/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

2

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견 3

학교가기싫다

2024-05-08

1