1. Home
  2. 프로그래밍/Etc
  3. [TriggerReactor] 마인크래프트 트리거 리액터 오른쪽 클릭 시 아이템 사용 예제

[TriggerReactor] 마인크래프트 트리거 리액터 오른쪽 클릭 시 아이템 사용 예제

//HeadInteract.json
{
  "Event": "org.bukkit.event.player.PlayerInteractEvent"
}
//HeadInteract.trg
IF event.getAction().name() == "RIGHT_CLICK_AIR"
	//#MESSAGE "허공에 오른쪽 클릭입니다. (사용)"
	IF event.getItem().getType().name() == "PLAYER_HEAD"
		//player.getInventory().remove(player.getItemInHand());
		player.getInventory().getItemInHand().setAmount(player.getInventory().getItemInHand().getAmount()-1);
		#MESSAGE "&6플레이어 머리를 사용하여 버프를 얻었습니다."
		#SOUND player.getLocation(), "ENTITY_PLAYER_BURP", 1.0, 1.0
		#ACTIONBAR color("&4&lYou are a terrible Person.")
		#POTION "ABSORPTION" 1800 1
		#POTION "REGENERATION" 120 2
		#POTION "SPEED" 100 1
	ENDIF
ENDIF

동생이 마인크래프트 서버하는데.. 친구들이랑 PVP 배틀로얄을 만들었다는데 상대방을 죽이면 머리가 뜨고 그걸 오른쪽 클릭하면 사용 후 버프가 걸리는걸 만들어 달래서..

 

원래 마인크래프트 하면서 알던 VT(흔히 트리거라고 부르던)는 최신버전까지 개발이 계속되지 못하고 중단됬더군요.

 

지금 마인크래프트 스크립트 용으로 남아 있는건 Skript, TriggerReactor, CommandHelper 가 대표적인데 그 중 Trigger Reactor 이란게 VariableTrigger와 가장 닮아 있어서 선택을 하게 되었습니다.

 

한국인이 개발한걸로 아는데 일단 기본적으로 프로그래밍을 해야되고 당연히 자체 언어를 사용하기 때문에 (파이썬과 자바가 짬뽕? 된 스타일 입니다.) 이런 매니악한걸 일반 마인크래프트 유저가 도전할리가 없죠 -.-

 

Trigger Reactor에 대한 자료라곤 인터넷에 블로그 강좌랑 Trigger Reactor 공식 Wiki 밖에 없어서 정말 삽질아닌 개삽질 끝에 완성하였습니다. 특히 https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html

 

Material (Spigot-API 1.17.1-R0.1-SNAPSHOT API)

Returns an array containing the constants of this enum type, in the order they are declared.

hub.spigotmc.org

여기서 알려주는 정보들이 많이 도움이 됬어요

이게 없었으면 절대 못만들었을 거 같습니다..

 

평상시 C# 만해서 Java는 할 줄 모르고 마인크래프트 spigot의 자체 class를 끌어다 써오기, Trigger Reactor의 처음 보는 생소한 문법까지 헬파티 였습니다.. 

 

코드 원리를 간단하게 설명드리면 Trigger Reactor를 이용하면 마치 플러그인을 실시간으로 개발하는 효과를 낼 수 있습니다. (실시간으로 Trigger Reactor 코드를 마인크래프트 안에서 실행시킬 수 있습니다.) Trigger Reactor 안에는 CustomTriger 라는 기능이 있는데, 이를 이용하면 특정 이벤트가 발생했을 때 코드를 실행시킬 수 있습니다. 클릭 이벤트에 관련된 API는 버킷 API의 "org.bukkit.event.player.PlayerInteractEvent" 에 정의되어 있습니다.

 

그래서 왼쪽, 오른쪽, 휠 등을 클릭하면 PlayerInteractEvent 가 발생하는데 이에 맞춰서 코드를 실행시키는 원리입니다.

이벤트를 등록 해놓는건 HeadInteract.json 라는 json 파일에 해두고, 여기에 등록된 단일 이벤트가 발생하면 HeadInteract.trg 를 실행시킵니다. *.trg 안에서 발생한 이벤트 내용에 대해 접근하고 싶으면 트리거 코드 안에서 event 라는 변수 키워드 명을 사용하면 됩니다.

 

이외에 TR의 기능에 관련해서 말씀드리자면 IMPORT도 가능해서 Java 자체 Method나 다른 플러그인의 정보도 참조할 수 있고 비동기, 동기 구현까지 제대로 사용만 하면 거의 모든걸 할 수 있는 형태로 제작이 되어있어서 매우 만족스러웠습니다.

 

그리고 자료형이 동적 타입이라 별도의 자료형 없이도 알맞은 값들만 넣어주면 알아서 작동을 하더군요

특히 #MESSAGE "메세지" 같은 형태로 출력을 할때도 정수형 변수로 출력을 하면 별도의 문자열 변환 method 없이도 알아서 문자열 형태로 강제 형변환이 됩니다.

 

뭐.. 일단은 잘 됩니다 ㅋㅋㅋ 예전에 VT랑 Skript로 중형 서버를 직접 운영하던 때가 있었는데 옛날 생각도 나고 재미 있었네요 ㅎㅎ Java 공부의 필요성을 느껴서 이번 학기중엔 우선 Java랑 백준 알고리즘을 공부해야겠습니다..

 

CustomTrigger.zip
0.00MB

소스 코드를 사용하시고 싶은 분들은 압축을 풀어서 나오는 두 파일을 마인크래프트 버킷 > plugins > Trigger Reactor > CustomTrigger 에 넣어주시고 서버에서

/trg reload 를 누르면 작동합니다 ~

SNS 공유하기
네이버밴드
카카오톡
페이스북
X(트위터)

최근글
인기글
이모티콘창 닫기
울음
안녕
감사
당황
피폐