minecraft
Event-Hörer in Bukkit
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.