개인 자료란 (JE)

  서버 커뮤니티

Profile 허두 한마포 커뮤니티 매니저

HURDOO 2b370e4f33334fd5af2d1419cfe356a7

Profile

이해도 플러그인 
게임버전 (JE) 버킷 

플러그인 만지기 시작한지 얼마 안 된 초중수입니다...

이번에 경제 플러그인에 한번 도전해보려고 하는데

플레이어들의 돈들은 모두 config.yml에 Money_닉네임 으로 int 형식으로 저장을 했고,

바다의 심장을 웅크린 채(LShift)로 바닥에 떨어뜨리면

플레이어의 손에서 (바다의 심장 개수+1)*10 만큼 config.yml에 추가하려고 하는데...


@EventHandler
public void exchange(PlayerDropItemEvent e)
{
    Player p = e.getPlayer();
    if(e.getItemDrop().getItemStack() == new ItemStack(Material.HEART_OF_THE_SEA) && p.isSneaking())
    {
        int n = p.getInventory().getItemInMainHand().getAmount();
	p.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
	getConfig().set("Money_" + p.getName(), getConfig().getInt("Money_" + p.getName()) + (n+1)*10);
	saveConfig();
	Item i = e.getItemDrop();
	i.remove();
	}
}


이렇게 했는데도 실행이 안되어서... (다른 이벤트들은 모두 실행이 잘됩니다!)


바다의 심장을 왼손에 드는 것으로 이벤트를 바꾸었는데도...


@EventHandler
public void onHOS(PlayerSwapHandItemsEvent ev)
{
	ItemStack is = ev.getOffHandItem();
	if(is == new ItemStack(Material.HEART_OF_THE_SEA))
	{
		int n = ev.getOffHandItem().getAmount();
		ev.setOffHandItem(new ItemStack(Material.AIR));
		getConfig().set("Money_" + ev.getPlayer().getName(), getConfig().getInt("Money_" + ev.getPlayer().getName()) + (n+1)*10);
		saveConfig();
	}
}


이것조차 실행이 안되더라고요..


문법적 하자는 없는것 같은데...

혹시 논리적 오류가 있나요? 고수님들 부탁드립니다ㅜㅜ





8개의 댓글

허두
2020.02.08

엇 뭐지 코드 마크다운으로 달면 되는거 아니었나요..?ㅠㅠ

허두
2020.02.08
@허두

아 코드 형식이 따로 있군요!

wysohn
2020.02.09

if(e.getItemDrop().getItemStack() == new ItemStack(Material.HEART_OF_THE_SEA) && p.isSneaking())

 

이 구문은 항상 false가 됩니다

 

== 연산자는 왼쪽과 오른쪽의 객체가 같은지만 확인하기때문에 같은 ItemStack 이라도 같은 객체가 아니라면 항상 false가 나옵니다

쉽게는 둘다 따로 변수에 저장해서 Logger 등으로 프린트 해보시면 둘의 해쉬코드가 다르게 나오는걸 알 수 있습니다.

 

equals를 사용하시거나 직접 native 형(int boolean double Enum 등) 값을 비교해야합니다. 해당 부분은 getType 으로 직접 Material (Enum) 을 가져오신뒤에 비교하시면 될것같습니다

허두
2020.02.09
@wysohn

으앗 ItemStack에 그런 비밀이...!

친절한 설명 감사합니다 :D

wysohn
2020.02.10
@허두

추가로 ItemStack 뿐만이 아니라 native 형이 아닌 모든 객체는 저렇다고 생각 하시면 됩니다. 한번 읽어보시는걸 추천드려요: https://jeong-pro.tistory.com/172

허두
2020.02.10
@wysohn

ㄴ네넹 감사합니다..! :)

펜델(skyneton)
2020.02.26

if(e.getItemDrop().getItemStack() == new ItemStack(Material.HEART_OF_THE_SEA) && p.isSneaking())

->

if(e.getItemDrop().getItemStack().getType() = Material.HEART_OR_THE_SEA && e.getPlayer().isSneaking())

허두
2020.02.26
@펜델(skyneton)

오옹 이러는 방법도 있군요 감사합니다!

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

레드스톤

[피아노커버] 디스코드 - QWER

노트블럭전문가

2024-06-17

0

/files/thumbnails/932/812/003/262x150.crop.jpg?20240616121638

업데이트

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

학교가기싫다

2024-06-14

1

/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