수색…


소개

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
}

더 많은 정보:



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow