Szukaj…


Tworzenie detektora zdarzeń

Aby zarejestrować metody, klasa zawierająca EventHandler (s) musi implementować interfejs Listener.

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

Musisz zarejestrować detektor zdarzeń, dodając następujące wywołanie do metody onEnable w klasie rozszerzającej JavaPlugin:

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

Aby odsłuchać dowolne zdarzenie w klasie nasłuchiwania, musisz utworzyć metodę z adnotacją @EventHandler w metodzie. Typ zdarzenia jest określony przez typ w jedynym argumencie metody. Metodę można nazwać dowolnie.

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

Parametry EventHandler

Adnotacja org.bukkit.event.EventHandler akceptuje kilka parametrów.

Priority - wskazuje priorytet twojego odbiornika. Istnieje sześć różnych priorytetów, w kolejności wykonania: NAJNIŻSZE, NISKIE, NORMALNE [domyślne], WYSOKA, NAJWYŻSZA, MONITOR. Stałe te odnoszą się do enum org.bukkit.event.EventPriority .

Jeśli chcesz zmienić wynik wydarzenia, wybierz bardzo ostrożnie od NAJNIŻSZEJ do NAJWYŻSZEJ. Sugerowane uogólnione wtyczki ochronne na LOWEST, bardziej szczegółowe wtyczki na NORMAL i zastępuj wtyczki na HIGH. Jeśli chcesz działać, gdy wydarzenie się wydarzy, ale nie zmieniasz wyniku, użyj MONITORA.

Uwaga: Priorytetu MONITORA należy używać tylko do odczytu. Ten priorytet jest przydatny do rejestrowania wtyczek, aby zobaczyć wyniki zdarzenia, a modyfikowanie wartości może zakłócać działanie tych typów wtyczek.

ignoreCancelled - Wartość logiczna wskazująca, czy Twój detektor powinien odpalić, jeśli zdarzenie zostało anulowane, zanim nadejdzie kolej na jego obsłużenie. Fałsz domyślnie.

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

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

Cofanie rejestracji wydarzeń lub słuchaczy

Możesz wyrejestrować pojedyncze zdarzenia, całe klasy słuchaczy lub wszystkie zdarzenia zarejestrowane przez Twoją wtyczkę, a nawet inne wtyczki!

Wyrejestruj określone zdarzenie

Każda klasa zdarzeń ma metodę statyczną getHandlerList (), wywołaj ją, a następnie możesz użyć metody .unregister ().

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

Teraz już wiesz, dlaczego potrzebujesz funkcji getHandlerList () w niestandardowych zdarzeniach.

Wyrejestruj wszystkie zdarzenia

Za pomocą klasy HandlerList i jej metody statycznej unregisterAll () można łatwo wyrejestrować zdarzenia z klas nasłuchiwania lub wtyczek.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow