建立自定義事件
有時你需要建立自己的事件,其他外掛可以監聽(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 Cancellable
,boolean 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());
}