Szukaj…


Wprowadzenie

Gdy coś dzieje się w Bukkicie, wywoływane jest Wydarzenie, dzięki czemu każda wtyczka może zdecydować, co zrobić, gdy coś się wydarzy.

Zdarzenie jest wywoływane, gdy gracz próbuje zagrać w blok, gdy istota znika, gdy ktoś się loguje ... Wtyczki mogą słuchać określonych zdarzeń i radzić sobie z nimi na wiele różnych sposobów, na przykład wysyłając wiadomość do administratora, gdy Gracz loguje się za pośrednictwem PlayerLoginEvent.

Składnia

  • Bukkit.getPluginManager (). RegisterEvents (Listener l, Plugin p);

Uwagi

Rejestrując wydarzenie, sprawdź, czy nie rejestrujesz go dwukrotnie! Lub twoja wtyczka będzie działać dwukrotnie dla zarejestrowanego wydarzenia.

Przyjrzyj się, jak obsługiwać określone zdarzenia:

Zarejestruj zdarzenia w klasie 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);
    }
}

Rejestrowanie wydarzeń w klasie głównej

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);   
    }
  
    @EventHandler
    public void yourEvent(Event e) {
    //...
    }
}

Słuchanie wydarzeń

Bukkit korzysta z systemu opartego na zdarzeniach, który umożliwia programistom wtyczek interakcję z serwerem i modyfikowanie go oraz określonych działań na świecie.


Tworzenie modułu obsługi zdarzeń

Procedury obsługi zdarzeń to metody wywoływane po wystąpieniu zdarzenia. Są one na ogół publiczne i nieważne, a także on{EventNameStem} nazywane on{EventNameStem} . Wszystkie @EventHandler obsługi muszą jednak mieć adnotację @EventHandler , a także zawierać swoje zdarzenie jako parametr TYLKO. Oto przykład procedury obsługi zdarzeń dla PlayerJoinEvent

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

Uwaga: format nazewnictwa dla zdarzeń Bukkit to zdarzenie {Source}{Action}({Target})Event . Niektóre przykłady takich nazw zdarzeń to: PlayerInteractEvent lub BlockBreakEvent lub PlayerJoinEvent . Lista wszystkich zdarzeń znajduje się na Spadot Javadocs


Rejestracja zdarzeń

Samo utworzenie modułu obsługi zdarzeń nie wystarczy, aby Bukkit mógł rozpocząć wysyłanie wywołań zdarzeń do metody. Musisz go również zarejestrować za pomocą interfejsu PluginManager.

Najczęstszym sposobem rejestrowania zdarzeń jest utworzenie klasy, która implementuje interfejs Listener i użycie go do zawarcia obsługi zdarzeń.

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

Tę klasę nasłuchiwania i wszystkie jej zdarzenia można następnie zarejestrować w głównej klasie wtyczek w następujący sposób:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

Tworzenie niestandardowych zdarzeń

Czasami musisz utworzyć własne wydarzenie, którego inne wtyczki będą mogły słuchać (Vault robi to między innymi), a nawet anulować. Umożliwia to Event API Bukkita. Wszystko, co musisz zrobić, to stworzyć nową klasę, rozszerzyć Event , dodać moduły obsługi i atrybuty, których potrzebuje Twoje wydarzenie (np. Gracz lub wiadomość).

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;
    }
}

Wywoływanie zdarzenia niestandardowego

Masz kontrolę nad tworzeniem i wywoływaniem wydarzeń, a ich wywoływanie zależy wyłącznie od Ciebie. Oto przykład

// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
Bukkit.getServer().broadcastMessage(event.getMessage());

Pamiętaj: kontrolujesz swoje wydarzenia. Jeśli nie nazwiesz go i nie będziesz działać zgodnie z nim, tak się nie stanie!

Słuchanie niestandardowego zdarzenia

Słuchanie niestandardowego zdarzenia jest tym samym, co słuchanie zwykłego zdarzenia.

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
    }
}

Umożliwianie anulowania CustomEvent

Jeśli kiedykolwiek chcesz, aby twoje wydarzenie było anulowane, po prostu dodaj implements Cancellable , boolean cancelled oraz getter i 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;
    }
}

Następnie sprawdzisz, czy wtyczka anulowała niestandardowe zdarzenie.

// 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());
}

Podstawowa obsługa zdarzeń

Bukkit korzysta z systemu opartego na zdarzeniach, który umożliwia programistom wtyczek interakcję z serwerem i modyfikowanie go oraz określonych działań na świecie.


Tworzenie modułu obsługi zdarzeń

Procedury obsługi zdarzeń to metody wywoływane po wystąpieniu zdarzenia. Są one na ogół publiczne i nieważne, a także on{EventNameStem} nazywane on{EventNameStem} . Wszystkie @EventHandler obsługi muszą jednak mieć adnotację @EventHandler , a także zawierać swoje zdarzenie jako parametr TYLKO. Oto przykład procedury obsługi zdarzeń dla PlayerJoinEvent

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

Uwaga: format nazewnictwa dla zdarzeń Bukkit to zdarzenie {Source}{Action}({Target})Event . Niektóre przykłady takich nazw zdarzeń to: PlayerInteractEvent lub BlockBreakEvent lub PlayerJoinEvent . Lista wszystkich zdarzeń znajduje się na Spadot Javadocs


Rejestracja zdarzeń

Samo utworzenie modułu obsługi zdarzeń nie wystarczy, aby Bukkit mógł rozpocząć wysyłanie wywołań zdarzeń do metody. Musisz go również zarejestrować za pomocą interfejsu PluginManager.

Najczęstszym sposobem rejestrowania zdarzeń jest utworzenie klasy, która implementuje interfejs Listener i użycie go do zawarcia obsługi zdarzeń.

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

Tę klasę nasłuchiwania i wszystkie jej zdarzenia można następnie zarejestrować w głównej klasie wtyczek w następujący sposób:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

Priorytety zdarzeń

Bukkit ma system o nazwie Priorytety zdarzeń, który pomaga wtyczkom obsługiwać zdarzenia we właściwej starszej wersji. Siedem priorytetów (starszych od pierwszego do ostatniego):

  • Najniższy
  • Niska
  • Normalny (domyślny)
  • Wysoki
  • Najwyższy
  • Monitor

Jeśli planujesz anulować wiele wydarzeń (np. Wtyczkę ochronną), dobrym pomysłem byłoby użycie niższego priorytetu (lub najniższego), aby uniknąć problemów.

Nigdy nie należy modyfikować wyniku wydarzenia w 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
}

Więcej informacji:



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow