개인 자료란 (JE)

  서버 커뮤니티

Profile Shawny 일반인

Plugin_TechD ce85c15886f64ce9b6f9170a4348769d

Profile

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

[Spigot] ItemStack 과 Block 그리고 PersistentDataContainer

2024.01.09 조회 수 156 추천 수 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/576/775/003/262x150.crop.jpg?20240426232553

아티클

이달의 블록: 단단한 진흙

학교가기싫다

2024-04-26

0

/files/thumbnails/115/774/003/262x150.crop.jpg?20240426223813

업데이트

마인크래프트 1.20.5 정식 업데이트

학교가기싫다

2024-04-24

0

/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4