Ricerca…


Creare un listener di eventi

Per registrare i tuoi metodi, la classe contenente EventHandler deve implementare l'interfaccia Listener.

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

È necessario registrare il listener di eventi aggiungendo la seguente chiamata al metodo onEnable nella classe che estende JavaPlugin:

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

Per ascoltare un determinato evento nella classe del listener, è necessario creare un metodo con l'annotazione @EventHandler sul metodo. Il tipo di evento è specificato dal tipo nel solo argomento del metodo. Il metodo può essere nominato come desideri.

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

Parametri EventHandler

L'annotazione org.bukkit.event.EventHandler accetta un paio di parametri.

priorità : indica la priorità dell'ascoltatore. Vi sono le sei diverse priorità, in ordine di esecuzione: LOWEST, LOW, NORMAL [default], HIGH, HIGHEST, MONITOR. Queste costanti si riferiscono org.bukkit.event.EventPriority .

Se si desidera modificare l'esito di un evento, scegliere con molta attenzione da MINIMO a PIÙ ALTO. Plugin di protezione generalizzati consigliati su LOWEST, plugin più specifici su NORMAL e override di plugin su HIGH. Se si desidera agire quando si verifica un evento, ma non modificare il risultato, utilizzare MONITOR.

Nota: la priorità MONITOR deve essere utilizzata solo per la sola lettura. Questa priorità è utile per registrare i plug-in per vedere i risultati di un evento e modificare i valori può interferire con questi tipi di plug-in.

ignoreCancelled - Un valore booleano che indica se l'ascoltatore deve o meno sparare se l'evento è stato cancellato prima che sia il turno dell'ascoltatore di gestire l'evento. Falso per impostazione predefinita.

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

Creazione di eventi personalizzati

A volte hai bisogno di creare il tuo Evento, quello che altri plugin possono ascoltare (Vault, tra gli altri plugin, lo fa) e persino annullare. L'API Event di Bukkit consente questo di essere possibile. Tutto quello che devi fare è creare una nuova classe, farla estendere Event , aggiungere i gestori e gli attributi di cui ha bisogno l'evento (come Player o messaggio).

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

Chiamando il tuo evento personalizzato

Hai il controllo della creazione e della chiamata dei tuoi eventi, dove la chiami dipende interamente da te. Ecco un esempio

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

Ricorda: hai il controllo dei tuoi eventi. Se non lo chiami e agisci su di esso, non succede!

Ascoltare un evento personalizzato

Ascoltare un evento personalizzato è come ascoltare un evento normale.

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

Rendi il tuo CustomEvent cancellabile

Se vuoi rendere cancellabile il tuo evento, aggiungi solo implements Cancellable , boolean cancelled e un getter and 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;
    }
}

In seguito, verificherai se un plug-in ha annullato l'evento personalizzato.

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

Eventi o ascoltatori non registrati

Puoi annullare la registrazione di singoli eventi, intere classi di ascoltatori o di tutti gli eventi registrati dal tuo plugin o anche da altri plugin!

Annulla la registrazione di un evento specifico

Ogni classe di eventi ha il metodo statico getHandlerList (), chiamalo e quindi puoi usare il metodo .unregister ().

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

Ora sai perché avrai bisogno di getHandlerList () nei tuoi eventi personalizzati.

Annulla la registrazione di tutti gli eventi

Usando la classe HandlerList e il suo metodo statico unregisterAll () puoi facilmente annullare la registrazione degli eventi dalle classi o plug-in del listener.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow