Recherche…


Introduction

Lorsque quelque chose se produit à l'intérieur de Bukkit, un événement est appelé afin que chaque plug-in puisse décider de la marche à suivre en cas de problème.

Un événement est appelé lorsqu'un joueur essaie de jouer un bloc, lorsqu'une entité disparaît, quand quelqu'un se connecte ... Les plug-ins peuvent écouter des événements spécifiques et les gérer de différentes manières, par exemple en envoyant un message à un administrateur lorsque un joueur se connecte via le PlayerLoginEvent.

Syntaxe

  • Bukkit.getPluginManager (). RegisterEvents (Listener l, Plugin p);

Remarques

Lorsque vous enregistrez un événement, jetez un coup d’œil si vous ne l’enregistrez pas deux fois! Ou votre plugin agira deux fois pour l'événement enregistré.

Découvrez comment gérer des événements spécifiques:

Enregistrer les événements dans la 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);
    }
}

Enregistrer des événements dans votre classe principale

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);   
    }
  
    @EventHandler
    public void yourEvent(Event e) {
    //...
    }
}

Écouter les événements

Bukkit utilise un système basé sur des événements qui permet aux développeurs de plug-ins d'interagir avec le serveur et de modifier les actions spécifiques qui se produisent dans le monde.


Création d'un gestionnaire d'événements

Les gestionnaires d'événements sont des méthodes appelées lorsque leur événement se produit. Ils sont généralement publics et nuls ainsi que nommés on{EventNameStem} par convention. Cependant, tous les gestionnaires doivent avoir l'annotation @EventHandler et contenir son événement en tant que paramètre ONLY. Voici un exemple de gestionnaire d'événement pour PlayerJoinEvent

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

Remarque: Le format de nommage pour les événements Bukkit est {Source}{Action}({Target})Event . Voici quelques exemples de ces noms d'événement sont: PlayerInteractEvent ou BlockBreakEvent ou PlayerJoinEvent . Une liste de tous les événements peut être trouvée sur les Javadocs Spigot


Enregistrement des événements

La simple création d'un gestionnaire d'événements ne suffit pas pour permettre à Bukkit de commencer à envoyer des appels d'événements à votre méthode. Vous devez également l'enregistrer via l'interface PluginManager.

La méthode la plus courante pour enregistrer des événements consiste à créer une classe qui implémente l'interface Listener et à l'utiliser pour envelopper vos gestionnaires d'événements.

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

Cette classe d'écoute et tous ses événements peuvent alors être enregistrés dans votre classe de plug-in principale comme ceci:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

Création d'événements personnalisés

Parfois, vous devez créer votre propre événement, un autre que les autres plug-ins peuvent écouter (Vault, parmi d'autres, fait cela) et même annuler. L'API d'événement de Bukkit permet cela. Tout ce que vous devez faire est de faire une nouvelle classe, faites prolonger l' Event , ajoutez les gestionnaires et les attributs nécessaires à votre événement (comme joueur ou un message).

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

Appel de votre événement personnalisé

Vous contrôlez la création et l'appel de vos événements, à vous de choisir. Voici un exemple

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

Rappelez-vous: vous contrôlez vos événements. Si vous ne l'appelez pas et agissez en conséquence, cela n'arrive pas!

Écouter un événement personnalisé

L'écoute d'un événement personnalisé est identique à l'écoute d'un événement 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
    }
}

Rendre votre CustomEvent annulable

Si vous souhaitez que votre événement soit annulable, ajoutez simplement des implements Cancellable , boolean cancelled et un getter et un 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;
    }
}

Ensuite, vous devriez vérifier si un plug-in a annulé l'événement personnalisé.

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

Gestion de base des événements

Bukkit utilise un système basé sur des événements qui permet aux développeurs de plug-ins d'interagir avec le serveur et de modifier les actions spécifiques qui se produisent dans le monde.


Création d'un gestionnaire d'événements

Les gestionnaires d'événements sont des méthodes appelées lorsque leur événement se produit. Ils sont généralement publics et nuls ainsi que nommés on{EventNameStem} par convention. Cependant, tous les gestionnaires doivent avoir l'annotation @EventHandler et contenir son événement en tant que paramètre ONLY. Voici un exemple de gestionnaire d'événement pour PlayerJoinEvent

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    //Run when a player joins
}

Remarque: Le format de nommage pour les événements Bukkit est {Source}{Action}({Target})Event . Voici quelques exemples de ces noms d'événement sont: PlayerInteractEvent ou BlockBreakEvent ou PlayerJoinEvent . Une liste de tous les événements peut être trouvée sur les Javadocs Spigot


Enregistrement des événements

La simple création d'un gestionnaire d'événements ne suffit pas pour permettre à Bukkit de commencer à envoyer des appels d'événements à votre méthode. Vous devez également l'enregistrer via l'interface PluginManager.

La méthode la plus courante pour enregistrer des événements consiste à créer une classe qui implémente l'interface Listener et à l'utiliser pour envelopper vos gestionnaires d'événements.

public class EventListener implements Listener { //Implements the Listener interface

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event){
        //Run when a player joins
    }

}

Cette classe d'écoute et tous ses événements peuvent alors être enregistrés dans votre classe de plug-in principale comme ceci:

@Override
public void onEnable(){
    Bukkit.getPluginManager().registerEvents(new EventListener(), this); //Register your listener and its event handlers
}

Priorités de l'événement

Bukkit a un système appelé Event Priorities pour aider les plugins à gérer les événements dans le bon vieux. Les sept priorités sont (plus anciennes du premier exécuté à la dernière):

  • Le plus bas
  • Faible
  • Normal (par défaut)
  • Haute
  • Le plus élevé
  • Moniteur

Si vous prévoyez d'annuler de nombreux événements (par exemple, un plugin de protection), il serait judicieux d'utiliser une priorité inférieure (ou inférieure) pour éviter les problèmes.

Vous ne devez jamais modifier le résultat d'un événement à 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
}

Plus d'informations:



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow