Zoeken…


Een gebeurtenislistener maken

Om uw methoden te registreren, moet de klasse met de EventHandler (s) de Listener-interface implementeren.

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

U moet de gebeurtenislistener registreren door de volgende aanroep toe te voegen aan uw methode onEnable in de klasse die JavaPlugin uitbreidt:

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

Als u naar een bepaalde gebeurtenis in uw listenerklasse wilt luisteren, moet u een methode maken met annotatie bij @EventHandler op de methode. Het gebeurtenistype wordt gespecificeerd door het Type in het enige argument van de methode. De methode kan elke gewenste naam krijgen.

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

EventHandler-parameters

De annotatie org.bukkit.event.EventHandler accepteert een aantal parameters.

prioriteit - Geeft de prioriteit van uw luisteraar aan. Er zijn de zes verschillende prioriteiten, in volgorde van uitvoering: LAAG, LAAG, NORMAAL [standaard], HOOG, HOOGSTE, MONITOR. Deze constanten verwijzen naar org.bukkit.event.EventPriority enum.

Als je de uitkomst van een evenement wilt veranderen, kies dan heel voorzichtig van LAAGSTE naar HOOGSTE. Voorgestelde algemene beveiligingsplug-ins op LAAGSTE, meer specifieke plug-ins op NORMAAL en vervang plug-ins op HOOG. Als u wilt handelen wanneer een gebeurtenis plaatsvindt, maar de uitkomst niet wilt wijzigen, gebruikt u MONITOR.

Opmerking: de prioriteit MONITOR mag alleen worden gebruikt voor alleen lezen. Deze prioriteit is handig voor het loggen van plug-ins om de resultaten van een gebeurtenis te zien en het wijzigen van waarden kan interfereren met dat soort plug-ins.

ignoreCancelled - Een boolean die aangeeft of je luisteraar al dan niet moet vuren als de gebeurtenis is geannuleerd voordat de luisteraar aan de beurt is om de gebeurtenis af te handelen. Standaard niet waar.

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

Aangepaste gebeurtenissen maken

Soms moet je je eigen evenement maken, een evenement waar andere plug-ins naar kunnen luisteren (Vault, onder andere plug-ins, doet dit) en zelfs annuleren. Bukkit's Event API maakt dit mogelijk. Het enige wat u hoeft te doen is een nieuwe klasse maken, het Event uitbreiden, de handlers en de attributen toevoegen die uw evenement nodig heeft (zoals speler of bericht).

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

Uw aangepaste gebeurtenis bellen

Je hebt de controle over het maken en bellen van je evenementen, waar je het zelf bepaalt. Hier is een voorbeeld

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

Onthoud: je hebt de controle over je evenementen. Als je het niet noemt en er naar handelt, gebeurt het niet!

Luisteren naar een aangepaste gebeurtenis

Luisteren naar een aangepaste gebeurtenis is hetzelfde als luisteren naar een normale gebeurtenis.

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

Uw CustomEvent opzegbaar maken

Als je je evenement ooit annuleerbaar wilt maken, voeg je gewoon implements Cancellable , boolean cancelled en een getter en setter toe:

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

Daarna zou u controleren of een plug-in de aangepaste gebeurtenis had geannuleerd.

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

Afmelden van evenementen of luisteraars

U kunt afzonderlijke evenementen, volledige luisteraarklassen of alle evenementen die door uw plug-in of zelfs door andere plug-ins zijn geregistreerd, afmelden!

Afmelden specifieke gebeurtenis

Elke gebeurtenisklasse heeft de statische methode getHandlerList (), roept u die aan en dan kunt u de methode .unregister () gebruiken.

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

Nu weet je waarom je de getHandlerList () nodig hebt in je aangepaste evenementen.

Meld alle evenementen af

Met de klasse HandlerList en de statische unregisterAll () -methode kunt u eenvoudig gebeurtenissen uit luisterklassen of plug-ins afmelden.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow