+0

Escuchar eventos de Spigot con Listeners



Vamos a ver como escuchar eventos como cuando entra un jugador el servidor, o alguien se mueve, en Spigot Minecraft.

¿Qué es un evento?

Un evento es cuando una acción provoca la ejecución de otra parte del código sin tener conocimiento de ella, incluso llegando a modificar el comportamiento de la acción debido al código ejecutado durante el evento.

Un ejemplo de un evento podría ser correr código cuando un jugador se mueva, e incluso hacer que el jugador no pueda moverse.

¿Cómo escuchar eventos en Spigot?

Para escuchar eventos en Spigot necesitaremos crear una clase especial llamada Listener, y registrarla en nuestro método onEnable. ¡Vamos a ello!

Primero crearemos una clase con el nombre que queramos (por ejemplo, PlayerListener), y habrá de implementar Listener.

package me.polvallverdu.cursospigot;  
  
import org.bukkit.event.Listener;  
  
public class PlayerListener implements Listener {
    
}

Con la clase creada, necesitaremos registrar el Listener. Como queremos que esté registrada desde que el plugin es cargado, lo haremos en el onEnable. Para registrar un Listener, se hace desde un método estático de la clase Bukkit.

@Override  
public void onEnable() {  
    Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
}

El método registerEvents se encuentra en la clase PluginManager. Este acepta dos argumentos, una clase instanciada que implemente Listener, y el JavaPlugin al que pertenece el Listener.

Está muy bien eso, pero de momento no hemos añadido nada de código...

Tipos de eventos en Spigot

Spigot tiene una GRAN variedad de eventos a los que podemos escuchar. Estos están divididos entre categorías:

Cada clase dentro de estos paquetes representa un evento. Todos los eventos extienden Event, más alguna otra clase que les dé más información. Por ejemplo, si es un evento relacionado con jugadores, extenderá PlayerEvent, que aún contiene más información.

Además, hay eventos que pueden ser cancelados. Estos los reconocemos porque implementan la interfaz Cancellable. Si cancelamos un evento cancelable, la acción que llama ese evento no se reproducirá.

Evento de Ejemplo

Vamos a hacer que los jugadores no se puedan mover. Para ello, si buscamos en la lista de eventos de jugadores, vemos que existe el evento PlayerMoveEvent, y que encima puede ser cancelado porque implementa Cancellable. Manos a la obra.

Primero escucharemos este evento desde el Listener que hemos creador anteriormente. Lo haremos creando un método con la anotación @EventHandler, y que de argumento acepte un PlayerMoveEvent.

package me.polvallverdu.cursospigot;  
  
import org.bukkit.event.EventHandler;  
import org.bukkit.event.Listener;  
import org.bukkit.event.player.PlayerMoveEvent;  
  
public class PlayerListener implements Listener {  
      
    @EventHandler  
    public void onPlayerMove(PlayerMoveEvent event) {  
          
    }  
      
}

Recomiendo que investigues un poco que tiene el objeto event.

Ahora haremos que se cancele. Para eso llamaremos el método setCancelled, y lo pondremos en true.

@EventHandler  
public void onPlayerMove(PlayerMoveEvent event) {  
    event.setCancelled(true);  
}

¡Vamos a probarlo en el servidor! Iniciamos el servidor con la tarea runServer, y vamos a unirnos. Nada más entrar al servidor, veremos como realmente no nos podemos mover. Funciona todo perfectamente 😀.