분야 | 플러그인 |
---|---|
API | 버킷 |
player.getInventory().addItem(ItemManager.bronze)
구문으로 아이템을 얻고,
if (action.equals(Action.RIGHT_CLICK_AIR) && item.isSimilar(ItemManager.bronze))
이 아이템을 우클릭 하면 이벤트가 발생하도록 구문을 작성했습니다.
그런데 아이템을 받은 후에 바로 우클릭을 하면
If문이 실행되지만, 서버를 재접속한 후에는 우클릭을 해도 if문이 실행되지 않습니다.
재접속 후 아이템을 얻는 구문을 실행하면
위 사진과 같이 겹쳐지지 않게 아이템이 생성됩니다. (1번 슬롯 : 재접속 전 아이템, 3번 슬롯: 재접속 후 얻은 아이템)
이런 현상이 발생하는 원인이 무엇일까요??
qsef1256
2022.04.21ItemManager가 아이템을 어떻게 생성하나요? 문제는 거기 있는 것으로 보이네요.
javaDocs에 따르면 isSimliar는 아이템 양만 무시할 뿐이지, equals() 와 같다고 나와 있습니다.
겹쳐지지 않는 거에서도 보다시피, 재접시 모양만 같은 다른 아이템이 나오는 것 같네요.
김초록
2022.04.21public class ItemManager {
public static ItemStack bronze;
public static void init() {
createBronze();
private static void createBronze() {
ItemStack item = new ItemStack(Material.IRON_NUGGET, 1);
ItemMeta meta = item.getItemMeta();
meta.displayName(Component.text("§7브론즈 코인"));
meta.setCustomModelData(1);
item.setItemMeta(meta);
bronze = item;
}
}
이런 식으로 구성되어있습니다!
재접속 전에는 이벤트가 잘 작동하는데..
재접속만 하면 왜 아이템이 먹통이 되는걸까요...
qsef1256
2022.04.21서바이벌 모드에서도 똑같이 안되나요?
지금 사진은 크리에이티브 에서 찍으신 걸로 보입니다.
크리에이티브랑 서바이벌이랑 내부적으로 좀 다르게 처리됩니다. 예를 들어 다수의 인벤토리 이벤트는 크리에이티브에서 실행되지 않기도 합니다.
qsef1256
2022.04.21그게 아니라면
https://www.spigotmc.org/threads/problems-with-itemstacks-not-stacking.133899/
참고하셔서 이 값이 다른지 한번 체크해보세요.
김초록
2022.04.23내부 데이터가 다른 것을 확인했습니다!
첨부해주신 글을 보면 답변으로 ``ItemMeta가 처리하지 않은 NBT 태그, byte[]로의 직렬화 및 base64 인코딩`` (구글번역기)
라고 적혀있는데, 이게 혹시 어떤 뜻인지 알 수 있을까요..?
qsef1256
2022.04.25ItemMeta 에 속해있지 않은 NBT 태그이며 byte[] 로 직렬화 되었고 base64로 다시 한번 인코딩 되었다로 해석하시면 될 것 같습니다.
직렬화란 데이터를 직렬로, 저장할 수 있는 포맷으로 변환한다고 생각하시면 됩니다. byte[] 에 맞게 변환되었다는 뜻이죠.
byte[] 가 byte 배열 이라는 건 알고 계시죠?
인코딩은 UTF-8 같은, 잘못 맞추면 글자 깨지는 그게 맞구요, base64 라는 인코딩 방식이 있습니다. 마크 내에서는 꽤 자주 쓰는데 이걸 쓰는 자세한 이유는 base64를 검색하시면 아실 수 있어요, 아무튼 크게 중요한 건 아니구요.
저도 여기에 크게 관심 있을 정도로 low-level 한건 아니라서 솔직히 이 이상으로 설명을 드리기는 어렵겠네요, 주로 라이브러리를 써왔던 터라
김초록
29 일 전헉 이미 충분한 설멍이 되었습니다! 감사합니다
/data get entity @s SelectedItem
명령어로 얻은 아이템 정보입니다.첫번쨰 : /동전 명령어를 사용하여 얻은 아이템을 위 명령어를 이용해 얻은 값
두번쨰: 서버 재접속 후 첫번쨰 아이템을 위 명령어를 이용해 얻은 값
김초록
29 일 전추가로 아이템 생성 구문은 이렇게 됩니다!
김초록
29 일 전문제 해결했습니다.
Component가 아닌 String을 쓰거나, §b 같은 코드를 쓰지 않고 Component 자체 기능인 Color 기능을 이용해서 구문을 작성하니 해결됐습니다!
친절한 답변들 감사했습니다.