Sök…


Skapa en händelse lyssnare

För att registrera dina metoder måste klassen som innehåller EventHandler (er) implementera Lyssnargränssnittet.

import org.bukkit.event.Listener;

public final class ListenerClass implements Listener {
}

Du måste registrera händelse lyssnaren genom att lägga till följande samtal till din onEnable-metod i klassen som utökar JavaPlugin:

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

För att lyssna på en given händelse i din lyssnarklass måste du skapa en metod med @EventHandler-kommentar om metoden. Händelsetypen anges av typen i metodens enda argument. Metoden kan namnges vad du än vill.

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

org.bukkit.event.EventHandler anteckningen accepterar ett parparametrar.

prioritet - Anger lyssnarens prioritet. Det finns de sex olika prioriteringarna i ordningsföljd: LÅGST, LÅG, NORMAL [standard], HÖG, HÖGST, MONITOR. Dessa konstanter hänvisar till org.bukkit.event.EventPriority enum.

Om du vill ändra resultatet av en händelse, välj mycket noggrant från LÅGST till HÖGST. Föreslagna generaliserade skyddsplugins på LÅGSTA, mer specifika plugins på NORMAL och åsidosätta plugins på HÖG. Om du vill agera när en händelse inträffar, men inte ändrar resultatet, använd MONITOR.

Obs: MONITOR-prioriteten ska endast användas för att endast läsa. Denna prioritering är användbar för att logga in plugins för att se resultaten av en händelse och att ändra värden kan störa de typer av plugins.

ignCancelled - En boolean som anger om din lyssnare ska skjuta om händelsen har avbrutits innan det är lyssnarens tur att hantera händelsen. Falsk som standard.

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

Skapa anpassade händelser

Ibland måste du skapa din egen händelse, en som andra plugins kan lyssna på (Vault, bland andra plugins, gör det) och till och med avbryta. Bukkits Event API tillåter att detta är möjligt. Allt du behöver göra är att skapa en ny klass, få den att förlänga Event , lägga till hanterare och attribut som ditt evenemang behöver (som spelare eller meddelande).

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

Ringa din anpassade händelse

Du har kontroll över att skapa och ringa dina evenemang, där du kallar det är helt upp till dig. Här är ett exempel

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

Kom ihåg: Du har kontroll över dina händelser. Om du inte kallar det och agerar på det händer det inte!

Lyssna på en anpassad händelse

Lyssna på en anpassad händelse är samma sak som att lyssna på en normal händelse.

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

Gör ditt CustomEvent avbokningsbart

Om du någonsin vill göra ditt evenemang avbrytbart, lägg bara till implements Cancellable , boolean cancelled och en getter och 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;
    }
}

Efteråt skulle du kontrollera om ett plugin hade avbrutit den anpassade händelsen.

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

Avregistrera händelser eller lyssnare

Du kan avregistrera enskilda händelser, hela lyssnarklasser eller alla händelser som är registrerade av din plugin eller till och med av andra plugins!

Avregistrera specifik händelse

Varje händelseklass har den statiska metoden getHandlerList (), ring det och sedan kan du använda .unregister () -metoden.

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

Nu vet du varför du behöver getHandlerList () i dina anpassade händelser.

Avregistrera alla evenemang

Med hjälp av klassen HandlerList och den statiska metoden unregisterAll () kan du enkelt avregistrera händelser från lyssnarklasser eller plugins.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow