Skip to content
GitHub

이벤트 리스너

특정 상황에서 발생하는 이벤트를 처리하기 위해 이벤트 리스너를 사용합니다. Bukkit API를 사용하여 서버의 다양한 이벤트를 감지하고, 이에 대한 처리를 구현할 수 있습니다.

먼저 입장 카운트를 체크하는 예시를 살펴보겠습니다.

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."); // 로깅
    }
}

이 이벤트 리스너를 아래와 같이 메인 클래스에 등록합니다.

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를 참고하세요.