bukkit
Manejo de eventos
Buscar..
Introducción
Cuando sucede algo dentro de Bukkit, se llama un evento para que cada complemento pueda decidir qué hacer cada vez que sucede algo.
Se llama a un evento cuando un jugador intenta jugar un bloque, cuando una entidad desaparece, cuando alguien inicia sesión ... Los complementos pueden escuchar eventos específicos y tratarlos de muchas maneras diferentes, por ejemplo, enviando un mensaje a un administrador cuando un jugador inicia sesión, a través del PlayerLoginEvent.
Sintaxis
- Bukkit.getPluginManager (). RegisterEvents (Listener l, Plugin p);
Observaciones
¡Al registrar un evento, eche un vistazo si no lo está registrando dos veces! O su complemento actuará dos veces para el evento registrado.
Eche un vistazo adicional sobre cómo manejar eventos específicos:
Registrar eventos dentro de la clase de oyente
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);
}
}
Registro de eventos a tu clase principal
public class Main extends JavaPlugin {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
}
@EventHandler
public void yourEvent(Event e) {
//...
}
}
Escuchar eventos
Bukkit utiliza un sistema basado en eventos que permite a los desarrolladores de complementos interactuar con el servidor y modificarlo y las acciones específicas que ocurren en el mundo.
Creación de un controlador de eventos
Los controladores de eventos son métodos que se llaman cuando ocurre su evento. En general, son públicos y no on{EventNameStem}
así como se nombran on{EventNameStem}
por convención. Sin embargo, todos los manejadores deben tener la anotación @EventHandler
, así como contener su evento como el ÚNICO parámetro. Aquí hay un ejemplo de un controlador de eventos para PlayerJoinEvent
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
Nota: El formato de denominación para los eventos de Bukkit es el {Source}{Action}({Target})Event
. Algunos ejemplos de estos nombres de eventos son: PlayerInteractEvent
o BlockBreakEvent
o PlayerJoinEvent
. Se puede encontrar una lista de todos los eventos en los Javadocs de Spigot
Registro de eventos
Simplemente la creación de un controlador de eventos no es suficiente para permitir que Bukkit comience a enviar llamadas de eventos a su método. También debe registrarlo a través de la interfaz de PluginManager.
La forma más común de registrar eventos es crear una clase que implemente la interfaz de Oyente y usarla para envolver sus controladores de eventos.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
Esta clase de oyente y todos sus eventos se pueden registrar en su clase de complemento principal de la siguiente manera:
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
Creación de eventos personalizados
A veces necesitas crear tu propio evento, uno que otros complementos puedan escuchar (Vault, entre otros complementos, hace esto) e incluso cancelar. La API de eventos de Bukkit permite que esto sea posible. Todo lo que necesita hacer es crear una nueva clase, extender el Event
, agregar los controladores y los atributos que su evento necesita (como Jugador o mensaje).
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;
}
}
Llamando a tu evento personalizado
Usted tiene el control de crear y llamar a sus eventos, donde lo llame, depende completamente de usted. Aquí un ejemplo
// Create the event here
CustomEvent event = new CustomEvent("Sample Message");
// Call the event
Bukkit.getServer().getPluginManager().callEvent(event);
Bukkit.getServer().broadcastMessage(event.getMessage());
Recuerda: tienes el control de tus eventos. Si no lo llamas, y actúas sobre él, ¡no sucede!
Escuchando un evento personalizado
Escuchar un evento personalizado es lo mismo que escuchar un evento normal.
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
}
}
Haciendo su CustomEvent Cancellable
Si alguna vez desea que su evento sea boolean cancelled
, solo agregue implements Cancellable
, boolean cancelled
y un captador y configurador:
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;
}
}
Luego, verificará si un complemento canceló el evento personalizado.
// 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());
}
Manejo básico de eventos
Bukkit utiliza un sistema basado en eventos que permite a los desarrolladores de complementos interactuar con el servidor y modificarlo y las acciones específicas que ocurren en el mundo.
Creación de un controlador de eventos
Los controladores de eventos son métodos que se llaman cuando ocurre su evento. En general, son públicos y no on{EventNameStem}
así como se nombran on{EventNameStem}
por convención. Sin embargo, todos los manejadores deben tener la anotación @EventHandler
, así como contener su evento como el ÚNICO parámetro. Aquí hay un ejemplo de un controlador de eventos para PlayerJoinEvent
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
Nota: El formato de denominación para los eventos de Bukkit es el {Source}{Action}({Target})Event
. Algunos ejemplos de estos nombres de eventos son: PlayerInteractEvent
o BlockBreakEvent
o PlayerJoinEvent
. Se puede encontrar una lista de todos los eventos en los Javadocs de Spigot
Registro de eventos
Simplemente la creación de un controlador de eventos no es suficiente para permitir que Bukkit comience a enviar llamadas de eventos a su método. También debe registrarlo a través de la interfaz de PluginManager.
La forma más común de registrar eventos es crear una clase que implemente la interfaz de Oyente y usarla para envolver sus controladores de eventos.
public class EventListener implements Listener { //Implements the Listener interface
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
//Run when a player joins
}
}
Esta clase de oyente y todos sus eventos se pueden registrar en su clase de complemento principal de la siguiente manera:
@Override
public void onEnable(){
Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}
Prioridades de eventos
Bukkit tiene un sistema llamado Prioridad de eventos para ayudar a los complementos a manejar los eventos en la antigüedad correcta. Las siete prioridades son (en la más antigua, desde la primera hasta la última):
- Más bajo
- Bajo
- Normal (por defecto)
- Alto
- Más alto
- Monitor
Si planea cancelar una gran cantidad de eventos (por ejemplo, un complemento de protección) sería una buena idea usar la prioridad más baja (o la más baja) para evitar problemas.
Nunca debes modificar el resultado de un evento en 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
}
Más información: