Suche…


Ereignis-Listener erstellen

Um Ihre Methoden zu registrieren, muss die Klasse, die die EventHandler enthält, die Listener-Schnittstelle implementieren.

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

Sie müssen den Ereignis-Listener registrieren, indem Sie der onEnable-Methode in der Klasse, die JavaPlugin erweitert, den folgenden Aufruf hinzufügen:

getServer().getPluginManager().registerEvents(new ListenerClass(), this);

Um ein bestimmtes Ereignis in Ihrer Listener-Klasse anzuhören, müssen Sie eine Methode mit der @EventHandler-Annotation für die Methode erstellen. Der Ereignistyp wird von Type im einzigen Argument der Methode angegeben. Die Methode kann beliebig benannt werden.

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

Die Annotation org.bukkit.event.EventHandler akzeptiert einige Parameter.

Priorität - Zeigt die Priorität Ihres Listeners an. Es gibt sechs verschiedene Prioritäten in der Reihenfolge der Ausführung: LOWEST, LOW, NORMAL [Standard], HIGH, HIGHEST, MONITOR. Diese Konstanten beziehen sich auf die Aufzählung org.bukkit.event.EventPriority .

Wenn Sie das Ergebnis eines Ereignisses ändern möchten, wählen Sie sehr sorgfältig zwischen NIEDRIGSTEN und HÖCHSTEN. Vorgeschlagene verallgemeinerte Schutz-Plugins für LOWEST, spezifischere Plugins für NORMAL und Überschreiben von Plugins für HIGH. Wenn Sie handeln möchten, wenn ein Ereignis auftritt, das Ergebnis jedoch nicht ändern, verwenden Sie MONITOR.

Hinweis: Die Priorität MONITOR sollte nur zum Lesen verwendet werden. Diese Priorität ist nützlich, um Plugins zu protokollieren, um die Ergebnisse eines Ereignisses anzuzeigen, und das Ändern von Werten kann diese Plug-In-Typen beeinträchtigen.

ignoreCancelled - Ein boolescher Wert, der angibt, ob der Listener ausgelöst werden soll oder nicht, wenn das Ereignis abgebrochen wurde, bevor der Listener das Ereignis verarbeitet. Standardmäßig falsch.

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

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

Abmelden von Ereignissen oder Zuhörern

Sie können einzelne Ereignisse, ganze Listener-Klassen oder alle von Ihrem Plugin oder sogar von anderen Plugins registrierten Ereignisse abmelden!

Registrierung eines bestimmten Ereignisses aufheben

Jede Ereignisklasse verfügt über die statische Methode getHandlerList (). Rufen Sie diese auf. Anschließend können Sie die .unregister () -Methode verwenden.

PlayerInteractEvent.getHandlerList().unregister(plugin);
// this will unregister all PlayerInteractEvent instances from the plugin
// you can also specify a listener class instead of plugin.

Jetzt wissen Sie, warum Sie die getHandlerList () in Ihren benutzerdefinierten Ereignissen benötigen.

Alle Veranstaltungen abmelden

Mit der HandlerList-Klasse und ihrer statischen unregisterAll () - Methode können Sie Ereignisse von Listener-Klassen oder Plugins problemlos abmelden.

HandlerList.unregisterAll(plugin);
// this will unregister all events from the specified plugin
// you can also specify a listener class instead of plugin.


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