현재 심심풀이+공부로 마인크래프트 모딩을 배우고있다. 마인크래프트 모드제작을 하는 것인데 보통제작API로 forge와fabric을 쓴다. 난 forge가 더익숙하기에 forge를 선택했다. 처음에는 어떻게 시작해야되나 막막했는데 유튜브에 누가 튜토리얼 올려둔게있어서 영어 번역하면서 배우고있다.
일단, 시작하기에 앞서 이 포스트는 모딩 튜토리얼이 아니므로 처음시작하는 사람이 보면 도움이 되지 않을 것이다.
이번에는 forge API에서 이벤트를 이해해보는 시간을 가져보겟다.
우선 이벤트가 무엇인지 정의 해야한다. 역기서 이벤트는 마인크래프트안에서 벌어지는 사건이라고 생각하면 편하다.
예를 들어 내가 양을 때리면 때렸는지 안때렸는지 체크하는 것, 또는 주민과 거래하는 것 모두 이벤트이다.
이 이벤트들은 마인크래프트에서 기본적으로 있는 것이 있고 모드로 유저가 만들 수도 있다.
우선 마인크래프트 기본 이벤트들이 있는 위치는 아래와 같다.
필자는 인텔리제이를 사용중이다.
외부라이브러리안에 저곳을 찾아서 net에 들어가면 minecraft와 minecraft forge가있을것이다.
그안에 event폴더가 있는데 그안에 모든 기본 이벤트가 있다.
저 이벤트를 하나하나 읽고 써보는게 이벤트 이해의 지름길 되시겟다. 허나, 바쁘고 귀찮기 때문에 하나만 골라서 써보겟다.
//modevent안에서
@SubscribeEvent
public static void LivingDamge(LivingDamageEvent event){
}
이게 기본 서식이다. 자신만의 이벤트를 만들려면 public static void 형식으로 선언해야하며 위에 @SubscribeEvent가 필요하다.
이름은 마음대로 해도 상관없다. 그리고 클래스 파라미터는 이벤트 하나만 넣어야한다.
현재 기본이벤트인 LivingDamgeEvent가 들어가있다. LivingDamgeEvent는 해당 이벤트는 피해가 적용되기 직전에 호출되는 이벤트이다.
여기에는 이미 갑옷, 포션, 흡수 등의 수정자가 적용된 상태이고, 이때 이미 갑옷 내구성 및 추가적인 체력 등의 리소스가 소모된 상태이다. 이 이벤트안에 변수가 두개 존재하는데 source와 amount다. source는 무엇으로 때렸는지,amount는 데미지가 몇들어왔는지 측정되는 변수들이다. 난 이것을 양이 맞았을때 각기 다른 log를 출력하는 이벤트를 만들겟다.
@SubscribeEvent
public static void LivingDamge(LivingDamageEvent event){
if(event.getEntity() instanceof Sheep) {
if(event.getSource().getDirectEntity() instanceof Player player) {
if (player.getItemInHand(InteractionHand.MAIN_HAND).getItem() == ModItems.RUBY.get()) {
TutorialMod.LOGGER.info("Sheep was hit with ruby by " + player.getName().getString());
} else if (player.getItemInHand(InteractionHand.MAIN_HAND).getItem() == Items.DIAMOND) {
TutorialMod.LOGGER.info("Sheep was hit with DIAMOND by " + player.getName().getString());
} else {
TutorialMod.LOGGER.info("Sheep was hit with something else by " + player.getName().getString());
}
}
}
}
이코드는 양을 다이아,루비로 때리면 다이아,루비로 양이 맞았다고 출력하고 플레이어의 이름을 출력한다.
다른 아이템으로 때리면 다른것으로 맞았다고 출력하는 코드이다.
실제로 적용이되는지 확인해보자
이렇게 오늘은 이벤트가 어디있는지, 어떻게 사용하는지 알아보았다.
'프로그래밍' 카테고리의 다른 글
마인크래프트 FORGE 모드 개발 설치,시작 방법 (0) | 2024.01.20 |
---|