개인 자료란 (JE)

  서버 커뮤니티

Profile 난아무것도몰라요 대표칭호 없음
Profile

플러그인 제작

마인크래프트 플러그인 만들기 5강 - 아이템

2020.10.20 조회 수 2679 추천 수 1

안녕하세요 난아몰입니다.

오늘은 아이템에 관하여 알아보겠습니다.

그럼 바로 시작해 보겠습니다.


일단 저번의 커맨드와 연관지어 /기본템 명령어를 만들어 보겠습니다.

일단 아이템을 만드는 코드를 적어보겠습니다.

이번에는 새로운 클래스를 만들기 보단 기존의 Events클래스를 이용하겠습니다.


먼저, 필드에 private List를 생성해 봅시다.

2aed8d8d358507f5ff71a59c61490186.png

이런 식으로요. 

이 List에는 서버에 접속한적 있는 플레이어를 담을것 입니다.

그리고 UUID로 하는이유는 Player는 서버를 나갔다 들어오면 새로 생성되기에 다시 접속할때 마다 새로 생성되지만(이름을 가져와도 되지만 그렇게 하면 이름을 바꾸면 다시 받을 수 있기에) UUID는 서버를 나갔다 들어와도, 이름을 바꿔도 유지되기 때문입니다.


그럼 이제 이벤트를 만들어 볼까요?

 저번에 만들었던 onJoin매소드에 코드를 추가를 해봅시다.

일단 if문을 넣어 joinedPlayer에 접속한 플레이어의 UUID가 있는지 체크합시다. 

없을 경우 joinedPlayer에 접속한 플레이어의 UUID를 넣어주는 코드까지 작성해 줍시다.

@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer(); //저번 강좌껀데 이번에도 필요함
    e.setJoinMessage("§e" + p.getName() + "§f님이 접속하셨습니다!!!"); //저번강좌 코드
    if(!joinedPlayer.contains(p.getUniqueId())) {
        joinedPlayer.add(p.getUniqueId());
    }
}

이런식으로요.

이번에는 이번강좌의 메인인 아이템을 만들어 봅시다.

일단 필드에 새로운 private static final ItemStackprivate static ItemMeta을 생성해 줍시다. 

private static final ItemStack stack = new ItemStack(Material.AIR);
private static ItemMeta meta;

위 코드처럼요(리소스를 아끼기 위한 전략)

그럼 이제 이 아이템의 Type과 ItemMeta을 설정해 봅시다.

stack.setType(Material.IRON_SWORD); //아이템의 type설정
meta = stack.getItemMeta(); //ItemMeta를 설정하기 위한 선언
meta.setDisplayName("§e초보자의 검"); //이름 설정
meta.setLore(Arrays.asList(/*1번째 줄 : */"§f초보자를 위한 검이다. 이 섬에서 생존하기 위해선 꼭 필요할 것이다...", /*2번째 줄*/ "§e[§f스킬§e] §f: §f없음")); //lore설정
meta.addEnchant(Enchantment.DAMAGE_ALL, 3, true); //인첸트 추가
meta.setUnbreakable(true); //unbreakable설정
stack.setItemMeta(meta); //stack에 itemMeta 입히기
p.getInventory().addItem(stack); //플레이어에게 추가
stack.setItemMeta(null); //아이템의 아이템 메타 초기화
meta = null; //아이템 메타도 초기화

이런식으로요.

자 이제 모든 작업이 끝났습니다.(여기서 더 추가하고 싶으시면 위에코드를 몇번더 반복하시면 됩니다)

이 방법의 경우 리소스를 아끼는 방법중 하나입니다. 

굳이 굳이 리소스를 아끼기 싫으시면(그럼 코드가 더 간결해 집니다)

ItemStack item = new ItemStack(Material.IRON_AXE);
ItemMeta meta = item.getItemMeta();
meta.setUnbreakable(true);
//더 더하고 싶은 ItemMeta가 있으면 추가
item.setItemMeta(meta);
p.getInventory().addItem(item); //플레이어 인벤토리에 아이템 추가

위의 코드처럼 하시면 됩니다.

그럼 이제 테스트를 해볼까요?


빌드를 한뒤 /reload를 쳐서 잘 적용됬는지 확인해 봅시다.

(현제 오류로 사진첨부가 불가능 합니다.... ㅠㅠ)

(보이지는 않지만) 처음 접속했을때 아이템이 잘 들어오고

두번째 접속부터는 아이템이 인벤토리로 안들어 오는 모습을 볼 수 있습니다.


후.... 드디어 플러그인 만들기 아이템편 강좌를 끝냈네요....

이번강좌도 좀 짧긴 하지만 이만 끝내겠습니다.

혹시 원하시는 강좌나 모르는 점이 있으시면 댓글로 남겨주세요. 

다음 강좌는 인벤토리 입니다.

그럼 안녕히....

2개의 댓글

neinerror
2020.11.25

특정 아이템을 들고 우클릭하면 특정이밴트가 생기게 하려면 어떻게 하나요? 1.16.3 크레프트버킷입니다

lhh2020
2021.05.29
@neinerror

인터렉션 이벤트 있어요

api 찾아보세요

뉴스 및 창작물
/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

/files/thumbnails/161/758/003/262x150.crop.jpg?20240331105743

레드스톤

라마 침 분수대 1

GlassesFilm

2024-03-31

0