bukkit
Gestione degli eventi
Ricerca…
introduzione
Quando qualcosa accade all'interno di Bukkit, viene chiamato un evento in modo che ogni plugin possa decidere cosa fare ogni volta che succede qualcosa.
Un evento viene chiamato quando un giocatore tenta di giocare un blocco, quando un'entità si disfa, quando qualcuno effettua l'accesso ... I plugin possono ascoltare eventi specifici e affrontarli in molti modi diversi, ad esempio inviando un messaggio a un amministratore quando un giocatore accede tramite PlayerLoginEvent.
Sintassi
- Bukkit.getPluginManager (). RegisterEvents (Listener l, Plugin p);
Osservazioni
Quando registri un evento, dai un'occhiata se non lo stai registrando due volte! Oppure il tuo plugin agirà due volte per l'evento registrato.
Dai un'occhiata in più a come gestire eventi specifici:
Registrare eventi all'interno della classe Listener
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);
}
}
Registrazione degli eventi nella tua classe principale
public class Main extends JavaPlugin {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void yourEvent(Event e) {
//...
}
}
Ascoltando gli eventi
Bukkit utilizza un sistema basato su eventi che consente agli sviluppatori di plugin di interagire e modificare il server e le azioni specifiche che si verificano nel mondo.
Creazione di un gestore di eventi
I gestori di eventi sono metodi che vengono richiamati quando si verifica il loro evento. Sono generalmente pubblici e non validi così come sono denominati on{EventNameStem}
per convenzione. Tuttavia, tutti i gestori devono avere l'annotazione @EventHandler
e contenere il suo evento come parametro SOLO. Ecco un esempio di gestore di eventi per PlayerJoinEvent
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
Nota: il formato di denominazione per gli eventi Bukkit è l'evento {Source}{Action}({Target})Event
. Alcuni esempi di questi nomi degli eventi sono: PlayerInteractEvent
o BlockBreakEvent
o PlayerJoinEvent
. Un elenco di tutti gli eventi può essere trovato sul Spigot Javadocs
Registrazione degli eventi
La semplice creazione di un gestore di eventi non è sufficiente per consentire a Bukkit di iniziare a inviare chiamate di eventi al proprio metodo. È inoltre necessario registrarlo tramite l'interfaccia PluginManager.
Il modo più comune per registrare eventi è creare una classe che implementa l'interfaccia Listener e utilizzarla per avvolgere i gestori di eventi.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
Questa classe di ascoltatori e tutti i suoi eventi possono quindi essere registrati nella tua classe di plug-in principale come questa:
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
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());
}
Gestione degli eventi di base
Bukkit utilizza un sistema basato su eventi che consente agli sviluppatori di plugin di interagire e modificare il server e le azioni specifiche che si verificano nel mondo.
Creazione di un gestore di eventi
I gestori di eventi sono metodi che vengono richiamati quando si verifica il loro evento. Sono generalmente pubblici e non validi così come sono denominati on{EventNameStem}
per convenzione. Tuttavia, tutti i gestori devono avere l'annotazione @EventHandler
e contenere il suo evento come parametro SOLO. Ecco un esempio di gestore di eventi per PlayerJoinEvent
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
Nota: il formato di denominazione per gli eventi Bukkit è l'evento {Source}{Action}({Target})Event
. Alcuni esempi di questi nomi degli eventi sono: PlayerInteractEvent
o BlockBreakEvent
o PlayerJoinEvent
. Un elenco di tutti gli eventi può essere trovato sul Spigot Javadocs
Registrazione degli eventi
La semplice creazione di un gestore di eventi non è sufficiente per consentire a Bukkit di iniziare a inviare chiamate di eventi al proprio metodo. È inoltre necessario registrarlo tramite l'interfaccia PluginManager.
Il modo più comune per registrare eventi è creare una classe che implementa l'interfaccia Listener e utilizzarla per avvolgere i gestori di eventi.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
Questa classe di ascoltatori e tutti i suoi eventi possono quindi essere registrati nella tua classe di plug-in principale come questa:
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
Priorità dell'evento
Bukkit ha un sistema chiamato Event Priorities per aiutare i plugin a gestire gli eventi nella versione precedente corretta. Le sette priorità sono (in vecchio dal primo eseguito all'ultimo):
- minore
- Basso
- Normale (predefinito)
- alto
- Più alta
- Tenere sotto controllo
Se stai pianificando di cancellare molti eventi (es. Plugin di protezione) sarebbe una buona idea usare una priorità più bassa (o più bassa) per evitare problemi.
Non si dovrebbe mai modificare l'esito di un evento in MONITOR.
@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
}
Ulteriori informazioni: