监听事件
317 字约 1 分钟
2025-08-21
基础
与其他所有的 BukkitEvent 一样,要想监听 Dominion 的事件,你需要实现一个监听器类,并在其中实现你想要监听的事件。 你可以根据你的需要取消事件(阻止事件发生),或者修改事件中的数据。
// DominionEventHandler.java
import cn.lunadeer.dominion.events.dominion.DominionCreateEvent;
public class YourPluginMainClass extends JavaPlugin implements Listener {
@EventHandler
public void onDominionCreateEvent(DominionCreateEvent event) {
if (event.isCancelled()) return;
// do something you want
}
@Override
public void onEnable() {
// Plugin startup logic
getServer().getPluginManager().registerEvents(this, this);
}
}
获取事件操作的数据结果
对于领地数据操作的一些事件(例如 DominionCreateEvent
, MemberAddedEvent
等),由于真实的数据处理是在所有事件监听之后再执行的。 因此想要直接从事件本身获取操作结果是不可能的,但是我们可以通过给事件配置对应的回调,来在数据操作结束后再处理事件的结果。
以 MemberAddedEvent
为例,假设我们希望添加领地成员成功后自动将成员传送到领地:
import cn.lunadeer.dominion.events.member.MemberAddedEvent;
public class AutoTpMember implements Listener {
@EventHandler
public void onDominionAddMember(MemberAddedEvent event) {
if (event.isCancelled()) return;
// the lambda function will be called after the member is added
event.afterAdded(memberDTO -> {
if (memberDTO == null) return; // if memberDTO is null, means the addition failed
DominionDTO dominion = event.getDominion();
Player player = Bukkit.getPlayer(memberDTO.getPlayerUUID());
player.teleportAsync(dominion.getTpLocation());
});
}
}