특정 상황에서 발생하는 이벤트를 처리하기 위해 이벤트 리스너를 사용합니다. Bukkit API를 사용하여 서버의 다양한 이벤트를 감지하고, 이에 대한 처리를 구현할 수 있습니다.
이벤트 리스너 사용
Section titled “이벤트 리스너 사용”먼저 입장 카운트를 체크하는 예시를 살펴보겠습니다.
CountListener.java 파일을 생성하고, 아래와 같이 작성합니다.
CountListener.java
package dev.erudites.someproject.listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import java.util.Map;
import java.util.UUID;
public class CountListener implements Listener {
private Map<UUID, Integer> playerJoinCounts; // 데이터 저장 맵
@EventHandler // 이벤트 등록
public void onJoin(PlayerJoinEvent event) { // 특정 이벤트에 대하여 (e.g. Join(입장) 이벤트)
UUID playerId = event.getPlayer().getUniqueId(); // 플레이어 UUID
int count = playerJoinCounts.getOrDefault(playerId, 0) + 1; // 카운트 체크
playerJoinCounts.put(playerId, count); // 카운트 추가
event.getPlayer().sendMessage("You have joined " + count + " times."); // 로깅
}
}이벤트 리스너 등록
Section titled “이벤트 리스너 등록”이 이벤트 리스너를 아래와 같이 메인 클래스에 등록합니다.
SomeProjectPlugin.java
package dev.erudites.someproject;
import dev.erudites.someproject.listener.CountListener;
import org.bukkit.plugin.java.JavaPlugin;
public class SomeProjectPlugin extends JavaPlugin {
@Override
public void onEnable() {
// this Plugin에 CountListener 객체를 생성하고, 등록합니다.
this.getServer().getPluginManager().registerEvents(new CountListener(), this);
}
}./gradlew build 명령어로 플러그인을 빌드한 후, 서버를 시작합니다.
인게임에 접속하면, 플레이어가 입장할 때마다 플레이어에게 입장 카운트가 표시됩니다.
위와 같이 이벤트를 등록하고, 기능을 구현할 수 있고, 이벤트의 순서를 보장하고 싶다면 Paper Docs를 참고하세요.