분야 | 트리거 |
---|---|
장르 | 서버 관리자 툴, 개발자 툴, 그 외에 장르 |
게임버전 | 1.5.x, 1.6.x, 1.7.x, 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16.x, 1.17.x |
API | 버킷, 스피곳, 페이퍼, 스펀지 |
자료글 | https://www.curseforge.com/minecraft/buk...gerreactor |
버킷 버전: *
트리거 버전: 2.2.1 에서 테스트
심화적인 내용이므로 위키를 충분히 숙지 하셔야 합니다. (https://github.com/wysohn/TriggerReactor/wiki/Home_kr)
요구 지식: 인벤토리 트리거, 네임드 트리거, 조건문, 변수, 등.
1. 메뉴 디자인
이제 이전 강좌에서 메뉴는 생성을 했는데 인벤토리와 11번 슬롯을 클릭했을때 메시지가 나올 뿐 인벤토리 안에는 아무것도 들어있지가 않습니다! 이래가지고는 하이픽셀은 커녕 일반적인 메뉴만도 못합니다. 이 인벤토리에 아이템을 넣어서 메뉴를 디자인 해봅시다.
1.1 손에 들고있는 아이템을 이용하기
이 방법은 손에 들고있는 아이템을 직접 인벤토리에 등록 하는 방법입니다. 코드 작성 없이 아이템을 넣고 싶다면 이 방법이 유용합니다.
/trg i <이름> item <슬롯>
예를들어 /trg i MyMenu item 3 이라고 친다면 현재 들고있는 아이템이 MyMenu 라는 인벤토리의 4번 슬롯 (0부터 시작합니다. 기억하시죠?) 에 등록됩니다. 다만, 아이템을 들고있지 않다면 해당 위치에 이미 아이템이 있는 경우 삭제됩니다.
1.2 코드로 직접 넣기
이 방법은 코드 내에서 직접 아이템을 관리하는 방법으로 위의 방법보다는 조금 복잡 할 수 있지만 더 많은 범위의 활용이 가능합니다.
먼저 이전 강좌에서 처럼 인벤토리 트리거 내에는 inventory 라는 내부 변수가 존재 합니다. 이 inventory 가 일종의 메뉴 인벤토리를 직접 관리 할 수 있게 해주는 매개체 역할을 합니다.
모든 작업을 편리하기 위해 메소드를 사용 할 것인데 이는 심화 내용중 하나에 속합니다. 어려운 내용은 아니니 한번 읽어보시기 바랍니다. https://github.com/wysohn/TriggerReactor/wiki/Methods_kr
inventory 에는 여러가지 사용가능한 메소드가 있지만 그중에서 필요한 부분만 나열 하겠습니다.
- inventory.setItem(정수형 숫자, ItemStack) - 현재 인벤토리 트리거의 '정수형 숫자' 에 해당 아이템을 넣습니다.
- inventory.setItem(0, item("DIAMOND_SWORD", 1)) - 첫번째 슬롯에 다이아 검 설정
- inventory.setItem(0, null) - 해당 칸의 아이템을 삭제하는것과 동일한 효과 입니다. 아래의 clear() 와 사실상 같습니다.
- inventory.clear(정수형 숫자)- 현재 인벤토리 트리거의 '정수형 숫자' 에 들어있는 아이템을 제거 합니다.
- inventory.clear(8) - 9번째 슬롯에 있는 아이템 삭제
2. 코드
이제 이전 강좌에서 비워뒀던 IF trigger == "open" 파트를 마저 제작합시다. 하이픽셀 같은 메뉴를 구현하기 위해서 1.2 의 코드로 직접 아이템을 넣는 방법을 사용 하도록 하겠습니다.
코드:
IF trigger == "open"
inventory.setItem(0, item("DIAMOND_SWORD", 1))
inventory.setItem(1, {"myItem"})
ENDIF
아이템을 집어넣을때는 "open" 일 때, 즉 인벤토리가 방금 막 열렸을때 설정하는것이 이치에 맞겠지요? 물론 클릭했을때나 인벤토리가 닫힐때도 가능하지만 특별히 의미는 없을 것 입니다. (인벤토리가 닫혔는데 아이템을 넣어봐야 소용이 없겠죠?)
1. 위의 코드 예제의 두번째 줄은 첫번째 칸에 다이아몬드 칼을 넣으라는것이고
2. 세번째 줄은 두번째 칸에 {"myItem"} 즉 광역번수에 저장해둔 아이템으로 설정 하라는 것 입니다.
setItem()의 두번째 인자가 ItemStack 인것은 나와있죠? 이것이 아이템을 넣는 위치를 나타내는것인데 item() 은 이 ItemStack 을 제작해주는 메소드 입니다.
3. 테스트
수정이 끝났다면 코드를 저장하시고 /trg reload 를 이용해서 인벤토리 트리거를 다시 불러 오신 뒤 이전 강좌에서 했던 것 처럼 /trg i <이름> open 으로 해당 인벤토리를 확인 해 보세요.
제대로 작동한다면 인벤토리의 첫번째 칸이 다이아몬드 칼로 설정 될 것 입니다. 물론 두번째칸은 비어있게 될것인데 이는 {"myItem"} 에 아직 우리가 저장을 해둔게 없기 때문이니 나오지 않는다고 해도 정상입니다.
다음 강좌에서는 이 추가한 다이아몬드 검의 이름과 로어를 실시간으로 하이픽셀의 메뉴처럼 바꿀 수 있도록 해봅시다.
아이스틴
2019.11.26오늘도 좋은강좌 감사합니다!
묘단
2019.11.26다음 강좌가 기대 됩니당!
슈가스
2019.11.28기대되네요ㅕ!
ENCE
2019.12.13기대가 됩니당
일레이나
2019.12.28좋은 강좌군요