建立自定義事件

有時你需要建立自己的事件,其他外掛可以監聽(Vault,其他外掛,這樣做),甚至取消。Bukkit 的 Event API 允許這樣做。你需要做的就是建立一個新類,讓它擴充套件 Event,新增處理程式和你的事件所需的屬性(如播放器或訊息)。

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

致電你的自定義活動

你可以控制建立和呼叫你的事件,你可以在其中呼叫它完全取決於你。這是一個例子

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

記住:你控制著自己的事件。如果你不呼叫它,並採取行動,它就不會發生!

聽自定義事件

收聽自定義事件與收聽正常事件相同。

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

使你的 CustomEvent 可以取消

如果你想讓你的活動取消,只需新增 implements Cancellableboolean cancelled 和一個 getter 和 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;
    }
}

之後,你將檢查外掛是否已取消自定義事件。

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