Events
Listen for claim movement, data changes, and custom flag registration events.
Listening
Dominion events are Bukkit events. Implement Listener in the addon and register it in onEnable():
public final class DominionListener implements Listener {
@EventHandler
public void onEnter(PlayerMoveInDominionEvent event) {
DominionDTO dominion = event.getDominion();
event.getPlayer().sendMessage("Entered claim: " + dominion.getName());
}
}
getServer().getPluginManager().registerEvents(new DominionListener(), this);
Player, Location, world, and entity operations in event handlers still follow the Bukkit/Paper/Folia threading requirements. Do not scan the database or perform blocking IO in high-frequency movement events.
Player movement events
| Event | Key data | Description |
|---|---|---|
PlayerMoveInDominionEvent | getPlayer(), getDominion() | A player enters a claim |
PlayerMoveOutDominionEvent | getPlayer(), getDominion() | A player leaves a claim; getDominion() may be null when deletion triggers the event |
PlayerCrossDominionBorderEvent | getPlayer(), getFrom(), getTo() | Represents entry, exit, or movement from one claim to another |
In a border event:
from == nullmeans the player entered a claim from an unclaimed area;to == nullmeans the player left a claim for an unclaimed area;- when both
fromandtoare non-null, the player moved between two claims.
If you only care about entry or exit, prefer the dedicated PlayerMoveInDominionEvent or PlayerMoveOutDominionEvent.
Data-operation events
Claims
The cn.lunadeer.dominion.events.dominion package and its modify subpackage provide:
DominionCreateEvent, DominionDeleteEvent, DominionReSizeEvent, DominionRenameEvent, DominionTransferEvent, DominionSetTpLocationEvent, DominionSetMessageEvent, DominionSetMapColorEvent, DominionSetEnvFlagEvent, and DominionSetGuestFlagEvent.
These events usually contain the operator, target claim, old value, and new value. The changeable new values include the name, boundary, owner, teleport point, message, map color, and flag values; check the public setter on the specific event to confirm what can be changed.
Groups and members
| Data | Events |
|---|---|
| Groups | GroupCreateEvent, GroupDeleteEvent, GroupRenamedEvent, GroupSetFlagEvent, GroupAddMemberEvent, GroupRemoveMemberEvent |
| Members | MemberAddedEvent, MemberRemovedEvent, MemberSetFlagEvent |
Cancellation and modification
Data-operation events that extend ResultEvent implement Cancellable. Before data processing begins, an addon can cancel or modify the event:
@EventHandler
public void onDominionCreate(DominionCreateEvent event) {
if (event.getName().startsWith("reserved-")) {
event.setCancelled(true);
return;
}
// Dominion uses this change in the subsequent data processing.
event.setName(event.getName().toLowerCase(Locale.ROOT));
}
event.call() dispatches the event through Bukkit’s event mechanism. Dominion performs the actual data operation after event listeners finish, so do not assume that database writing is complete when the handler returns.
Get asynchronous operation results
Events for creating claims, adding members, creating groups, and similar operations expose a corresponding Future and an after... callback. A common pattern is:
@EventHandler
public void onMemberAdded(MemberAddedEvent event) {
if (event.isCancelled()) return;
event.afterAdded(member -> {
if (member == null) {
// Dominion's later validation or write failed.
return;
}
DominionDTO dominion = event.getDominion();
getLogger().info("Added " + member.getPlayerUUID()
+ " to " + dominion.getName());
});
}
Callback names across events include afterCreated, afterModified, afterAdded, afterRemoved, and afterSet. A callback may receive a null DTO, so check it first.
Do not call getFutureToComplete().get() inside an event listener. Dominion completes the Future later in its asynchronous flow; blocking would stall the server thread.
Custom flag registration events
FlagRegisterEvent provides getPlugin(), getFlag(), setFlag(...), and cancellation state. It allows other plugins to reject or replace a flag awaiting registration. When registering a flag, an addon should check the Boolean returned by Flags.registerEnvFlag(...) or registerPriFlag(...).
MCA export events
ExportMcaListEvent carries a List<McaRecord>. It can be used to read or adjust the MCA region list when Dominion exports the regions touched by claims. This is an advanced integration interface; ordinary addons do not need to listen for it.