minecraft
Bukkit의 이벤트 리스너
수색…
이벤트 리스너 만들기
메소드를 등록하려면 EventHandler를 포함하는 클래스가 Listener 인터페이스를 구현해야합니다.
import org.bukkit.event.Listener;
public final class ListenerClass implements Listener {
}
JavaPlugin을 확장하는 클래스에서 onEnable 메서드에 다음 호출을 추가하여 이벤트 리스너를 등록해야합니다.
getServer().getPluginManager().registerEvents(new ListenerClass(), this);
리스너 클래스에서 주어진 이벤트를 청취하려면 메소드에서 @EventHandler 주석을 사용하여 메소드를 작성해야합니다. 이벤트 유형은 메소드의 유일한 인수에있는 유형에 의해 지정됩니다. 이 메서드는 원하는대로 지정할 수 있습니다.
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerLoginEvent;
public class ListenerClass implements Listener {
@EventHandler
public void onPlayerLogin(PlayerLoginEvent event) {
event.getPlayer().sendMessage("Welcome to the server!");
}
}
EventHandler 매개 변수
org.bukkit.event.EventHandler
어노테이션은 몇 개의 매개 변수를 허용합니다.
priority - 청취자의 우선 순위를 나타냅니다. 실행 순서에는 여섯 가지 우선 순위가 있습니다 : LOWEST, LOW, NORMAL [기본값], HIGH, HIGHEST, MONITOR. 이 상수는 org.bukkit.event.EventPriority
enum을 참조합니다.
이벤트의 결과를 변경하려면 LOWEST에서 HIGHEST까지 신중하게 선택하십시오. NORMAL에서 LOWEST 및 특정 플러그인에 대한 일반화 된 보호 플러그인을 제안하고 HIGH에서 플러그인을 무시합니다. 이벤트가 발생했을 때 행동하고 결과를 변경하지 않으려면 MONITOR를 사용하십시오.
참고 : MONITOR 우선 순위는 읽기 전용으로 사용해야합니다. 이 우선 순위는 이벤트 결과를 볼 수 있도록 플러그인을 로깅하고 값을 수정하면 이러한 유형의 플러그인을 방해 할 수 있습니다.
ignoreCancelled - 청취자가 이벤트를 처리하기 전에 이벤트가 취소 된 경우 청취자가 실행해야하는지 여부를 나타내는 부울입니다. 기본값은 False입니다.
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
public final class LoginListener implements Listener {
@EventHandler
public void normalLogin(PlayerLoginEvent event) {
// Some code here
}
@EventHandler(priority = EventPriority.HIGH)
public void highLogin(PlayerLoginEvent event) {
// Some code here
}
}
맞춤 이벤트 만들기
때로는 다른 플러그인이들을 수있는 이벤트 (다른 플러그인 중에서도 Vault,이 작업을 수행하는 이벤트)를 만들고 심지어 취소 할 수도 있습니다. Bukkit의 Event API는 이것을 가능하게합니다. 새로운 클래스를 만들고, Event
확장하고, 핸들러와 이벤트에 필요한 속성 (예 : 플레이어 또는 메시지)을 추가하기 만하면됩니다.
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public final class CustomEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private String message;
public CustomEvent(String example) {
message = example;
}
public String getMessage() {
return message;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}
맞춤 이벤트 호출
이벤트를 만들고 호출하는 것을 제어 할 수 있습니다. 이벤트는 전적으로 귀하에게 달려 있습니다. 여기에 예제가있다.
// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
Bukkit.getServer().broadcastMessage(event.getMessage());
기억하십시오 : 당신은 당신의 사건을 통제하고 있습니다. 당신이 그것을 부르지 않고 행동한다면 그것은 일어나지 않을 것입니다!
맞춤 이벤트 듣기
맞춤 이벤트를 경청하는 것은 정상적인 이벤트를 경청하는 것과 같습니다.
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
public final class CustomListener implements Listener {
@EventHandler
public void onCustomEvent(CustomEvent event) {
// Some code here
}
}
CustomEvent Cancellable 만들기
이벤트를 취소 가능하게 만들고 싶다면 implements Cancellable
, boolean cancelled
및 getter and setter를 추가하십시오.
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Cancellable;
public final class CustomEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private String message;
private boolean cancelled;
public CustomEvent(String example) {
message = example;
}
public String getMessage() {
return message;
}
public boolean isCancelled() {
return cancelled;
}
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}
그런 다음 플러그인이 맞춤 이벤트를 취소했는지 확인합니다.
// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
// Check if the event is not cancelled
if (!event.isCancelled()) {
Bukkit.getServer().broadcastMessage(event.getMessage());
}
이벤트 또는 청취자 등록 취소
개별 이벤트, 전체 리스너 클래스 또는 플러그인 또는 다른 플러그인에 의해 등록 된 모든 이벤트의 등록을 취소 할 수 있습니다!
특정 이벤트 등록 취소
각 이벤트 클래스에는 getHandlerList () 정적 메소드가 있으며이를 호출 한 다음 .unregister () 메소드를 사용할 수 있습니다.
PlayerInteractEvent.getHandlerList().unregister(plugin);
// this will unregister all PlayerInteractEvent instances from the plugin
// you can also specify a listener class instead of plugin.
이제 사용자 정의 이벤트에서 getHandlerList ()가 필요한 이유를 알았습니다.
모든 이벤트 등록 취소
HandlerList 클래스와 unregisterAll () 정적 메서드를 사용하면 리스너 클래스 또는 플러그 인의 이벤트를 쉽게 등록 취소 할 수 있습니다.
HandlerList.unregisterAll(plugin);
// this will unregister all events from the specified plugin
// you can also specify a listener class instead of plugin.