Suche…


Einführung

Wenn in Bukkit etwas passiert, wird ein Event aufgerufen, damit jedes Plugin entscheiden kann, was zu tun ist, wenn etwas passiert.

Ein Ereignis wird aufgerufen, wenn ein Spieler versucht, einen Block abzuspielen, wenn eine Entität abbricht, wenn sich jemand anmeldet ... Plugins können bestimmte Ereignisse abhören und auf verschiedene Arten behandeln, z Ein Spieler meldet sich über das PlayerLoginEvent an.

Syntax

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

Bemerkungen

Prüfen Sie bei der Registrierung eines Ereignisses, ob Sie es nicht zweimal registrieren. Oder Ihr Plugin wird für das registrierte Ereignis zweimal wirken.

Schauen Sie sich extra an, wie Sie mit bestimmten Ereignissen umgehen:

Registrieren Sie Ereignisse in der Listener-Klasse

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

Ereignisse in Ihrer Hauptklasse registrieren

public class Main extends JavaPlugin {

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

Ereignisse hören

Bukkit verwendet ein ereignisbasiertes System, mit dem Plugin-Entwickler mit dem Server und bestimmten Aktionen in der Welt interagieren und diese ändern können.


Erstellen eines Ereignishandlers

Event-Handler sind Methoden, die aufgerufen werden, wenn ihr Ereignis eintritt. Sie sind im Allgemeinen öffentlich und nichtig und werden on{EventNameStem} nach Konvention benannt. Alle Handler müssen jedoch die @EventHandler Annotation sowie das Ereignis als Parameter ONLY enthalten. Hier ist ein Beispiel für einen Event-Handler für das PlayerJoinEvent

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

Hinweis: Das Namensformat für Bukkit-Ereignisse lautet {Source}{Action}({Target})Event . Einige Beispiele für diese Ereignisnamen sind: PlayerInteractEvent oder BlockBreakEvent oder PlayerJoinEvent . Eine Liste aller Ereignisse finden Sie in den Spigot-Javadocs


Ereignisse registrieren

Das Erstellen eines Ereignishandlers reicht nicht aus, um Bukkit das Senden von Ereignisaufrufen an Ihre Methode zu ermöglichen. Sie müssen es auch über die PluginManager-Benutzeroberfläche registrieren.

Die gebräuchlichste Methode zum Registrieren von Ereignissen ist das Erstellen einer Klasse, die die Listener-Schnittstelle implementiert, und die Event-Handler damit umschließen.

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

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

}

Diese Listener-Klasse und alle ihre Ereignisse können dann wie folgt in Ihrer Haupt-Plugin-Klasse registriert werden:

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

Benutzerdefinierte Ereignisse erstellen

Manchmal müssen Sie ein eigenes Ereignis erstellen, das andere Plugins anhören können (unter anderem auch Vault), und dies sogar abbrechen. Bukkits Event-API ermöglicht dies. Sie müssen lediglich eine neue Klasse erstellen, Event , die Handler und die Attribute hinzufügen, die Ihr Ereignis benötigt (wie Player oder Nachricht).

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

Ihr individuelles Ereignis anrufen

Sie haben die Kontrolle über das Erstellen und Aufrufen von Ereignissen, bei denen Sie es selbst aufrufen. Hier ist ein Beispiel

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

Denken Sie daran: Sie haben die Kontrolle über Ihre Ereignisse. Wenn Sie es nicht anrufen und danach handeln, passiert es nicht!

Anpassen eines benutzerdefinierten Ereignisses

Das Anhören eines benutzerdefinierten Ereignisses entspricht dem Abhören eines normalen Ereignisses.

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

So machen Sie Ihr CustomEvent kündbar

Wenn Sie Ihre Veranstaltung jemals boolean cancelled machen möchten, fügen Sie einfach implements Cancellable , boolean cancelled implements Cancellable und einen Getter und Setter hinzu:

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

Anschließend prüfen Sie, ob ein Plugin das benutzerdefinierte Ereignis abgebrochen hat.

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

Grundlegende Ereignisbehandlung

Bukkit verwendet ein ereignisbasiertes System, mit dem Plugin-Entwickler mit dem Server und bestimmten Aktionen in der Welt interagieren und diese ändern können.


Erstellen eines Ereignishandlers

Event-Handler sind Methoden, die aufgerufen werden, wenn ihr Ereignis eintritt. Sie sind im Allgemeinen öffentlich und nichtig und werden on{EventNameStem} nach Konvention benannt. Alle Handler müssen jedoch die @EventHandler Annotation sowie das Ereignis als Parameter ONLY enthalten. Hier ist ein Beispiel für einen Event-Handler für das PlayerJoinEvent

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

Hinweis: Das Namensformat für Bukkit-Ereignisse lautet {Source}{Action}({Target})Event . Einige Beispiele für diese Ereignisnamen sind: PlayerInteractEvent oder BlockBreakEvent oder PlayerJoinEvent . Eine Liste aller Ereignisse finden Sie in den Spigot-Javadocs


Ereignisse registrieren

Das Erstellen eines Ereignishandlers reicht nicht aus, um Bukkit das Senden von Ereignisaufrufen an Ihre Methode zu ermöglichen. Sie müssen es auch über die PluginManager-Benutzeroberfläche registrieren.

Die gebräuchlichste Methode zum Registrieren von Ereignissen ist das Erstellen einer Klasse, die die Listener-Schnittstelle implementiert, und die Event-Handler damit umschließen.

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

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

}

Diese Listener-Klasse und alle ihre Ereignisse können dann wie folgt in Ihrer Haupt-Plugin-Klasse registriert werden:

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

Ereignisprioritäten

Bukkit verfügt über ein System mit dem Namen Ereignisprioritäten , das Plugins dabei unterstützt, Ereignisse im korrekten älteren zu behandeln. Die sieben Prioritäten sind (in älteren von der ersten bis zur letzten Ausführung):

  • Niedrigste
  • Niedrig
  • Normal (Standard)
  • Hoch
  • Höchste
  • Monitor

Wenn Sie planen, viele Ereignisse abzubrechen (z. B. ein Schutz-Plugin), empfiehlt es sich, eine niedrigere Priorität (oder niedrigste Priorität) zu verwenden, um Probleme zu vermeiden.

Sie sollten das Ergebnis einer Veranstaltung bei MONITOR niemals ändern.

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

Mehr Info:



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow