bukkit
이벤트 처리
수색…
소개
Bukkit에서 뭔가가 발생하면 Event가 호출되므로 모든 플러그인이 무언가가 발생할 때마다 무엇을해야할지 결정할 수 있습니다.
플레이어가 블럭을 재생하려 할 때 엔티티가 despawn 할 때 누군가가 로그인 할 때 이벤트가 호출됩니다 ... 플러그인은 특정 이벤트를 청취하고 여러 가지 방법으로 처리 할 수 있습니다 (예 : 관리자에게 메시지 보내기). 플레이어는 PlayerLoginEvent를 통해 로그인합니다.
통사론
- Bukkit.getPluginManager (). registerEvents (리스너 l, 플러그인 p);
비고
이벤트를 등록 할 때 두 번 등록하지 않으셔도됩니다. 또는 플러그인이 등록 된 이벤트에 대해 두 번 작동합니다.
특정 이벤트를 처리하는 방법에 대해 자세히 살펴보십시오.
Listener 클래스 내부에 이벤트 등록
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class MyEventListener implements Listener {
/**
* Constructor
*/
public MyEventListener(Main plugin){
//register Events of this class
//with methode: registerEvents(Listener, Plugin);
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
/**
* A Event with HIGH priority
*/
@EventHandler(priority = EventPriority.HIGH) //An EventHandler annotation
public void onPlayerLogin(PlayerLoginEvent event){ //A bukkit event
event.getPlayer().sendMessage("Welcome.");
}
/**
* A Event with NORMAL (default) priority
*/
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event){
Bukkit.broadcastMessage(event.getPlayer().getName() + " left the Server.");
}
}
/**
* Main class
*/
public class Main extends JavaPlugin {
public void onEnable(){
//Register Events
new MyEventListener(this);
}
}
Main 클래스에 이벤트 등록
public class Main extends JavaPlugin {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void yourEvent(Event e) {
//...
}
}
이벤트 듣기
Bukkit은 플러그인 개발자가 서버 및 전세계에서 발생하는 특정 동작과 상호 작용하고 수정할 수있는 이벤트 기반 시스템을 사용합니다.
이벤트 처리기 만들기
이벤트 처리기는 이벤트가 발생할 때 호출되는 메서드입니다. 그들은 일반적으로 공공 및 무효이며 관습 on{EventNameStem}
에 이름이 지정 on{EventNameStem}
. 그러나 모든 핸들러에는 @EventHandler
주석이 있어야하며 이벤트를 ONLY 매개 변수로 포함해야합니다. 다음은 PlayerJoinEvent
의 이벤트 핸들러 예제입니다.
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
참고 : Bukkit 이벤트의 이름 지정 형식은 {Source}{Action}({Target})Event
입니다. 이러한 이벤트 이름의 예는 PlayerInteractEvent
또는 BlockBreakEvent
또는 PlayerJoinEvent
입니다. 모든 이벤트 목록은 Spigot Javadocs 에서 찾을 수 있습니다.
이벤트 등록
이벤트 핸들러를 만드는 것만으로는 Bukkit이 메소드에 이벤트 호출을 보내기 시작할 수 없습니다. 또한 PluginManager 인터페이스를 통해 등록해야합니다.
이벤트를 등록하는 가장 일반적인 방법은 Listener 인터페이스를 구현하고 이벤트 핸들러를 랩핑하는 클래스를 만드는 것입니다.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
이 리스너 클래스와 모든 이벤트는 다음과 같이 메인 플러그인 클래스에 등록 할 수 있습니다.
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
맞춤 이벤트 만들기
때로는 다른 플러그인이들을 수있는 이벤트 (다른 플러그인 중에서도 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());
}
기본 이벤트 처리
Bukkit은 플러그인 개발자가 서버 및 전세계에서 발생하는 특정 동작과 상호 작용하고 수정할 수있는 이벤트 기반 시스템을 사용합니다.
이벤트 처리기 만들기
이벤트 처리기는 이벤트가 발생할 때 호출되는 메서드입니다. 그들은 일반적으로 공공 및 무효이며 관습 on{EventNameStem}
에 이름이 지정 on{EventNameStem}
. 그러나 모든 핸들러에는 @EventHandler
주석이 있어야하며 이벤트를 ONLY 매개 변수로 포함해야합니다. 다음은 PlayerJoinEvent
의 이벤트 핸들러 예제입니다.
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
참고 : Bukkit 이벤트의 이름 지정 형식은 {Source}{Action}({Target})Event
입니다. 이러한 이벤트 이름의 예는 PlayerInteractEvent
또는 BlockBreakEvent
또는 PlayerJoinEvent
입니다. 모든 이벤트 목록은 Spigot Javadocs 에서 찾을 수 있습니다.
이벤트 등록
이벤트 핸들러를 만드는 것만으로는 Bukkit이 메소드에 이벤트 호출을 보내기 시작할 수 없습니다. 또한 PluginManager 인터페이스를 통해 등록해야합니다.
이벤트를 등록하는 가장 일반적인 방법은 Listener 인터페이스를 구현하고 이벤트 핸들러를 랩핑하는 클래스를 만드는 것입니다.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
이 리스너 클래스와 모든 이벤트는 다음과 같이 메인 플러그인 클래스에 등록 할 수 있습니다.
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
이벤트 우선 순위
Bukkit에는 플러그인이 올바른 이전 이벤트를 처리하는 데 도움이되는 이벤트 우선 순위 라는 시스템이 있습니다. 일곱 가지 우선 순위는 (첫 번째 실행에서 마지막 실행까지 오래됨) :
- 최저
- 낮은
- 보통 (기본값)
- 높은
- 제일 높은
- 감시 장치
많은 이벤트를 취소하려는 경우 (예 : 보호 플러그인) 문제를 피하기 위해 낮은 우선 순위 (또는 가장 낮은)를 사용하는 것이 좋습니다.
MONITOR에서 이벤트의 결과를 수정해서는 안됩니다.
@EventHandler //same as @EventHandler(priority = EventPriority.NORMAL)
public void onLogin(PlayerLoginEvent event) {
// normal login
}
@EventHandler(priority = EventPriority.HIGH)
public void onLogin(PlayerLoginEvent event) {
// high login
}
더 많은 정보: