Events

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

EventKey dataDescription
PlayerMoveInDominionEventgetPlayer(), getDominion()A player enters a claim
PlayerMoveOutDominionEventgetPlayer(), getDominion()A player leaves a claim; getDominion() may be null when deletion triggers the event
PlayerCrossDominionBorderEventgetPlayer(), getFrom(), getTo()Represents entry, exit, or movement from one claim to another

In a border event:

  • from == null means the player entered a claim from an unclaimed area;
  • to == null means the player left a claim for an unclaimed area;
  • when both from and to are 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

DataEvents
GroupsGroupCreateEvent, GroupDeleteEvent, GroupRenamedEvent, GroupSetFlagEvent, GroupAddMemberEvent, GroupRemoveMemberEvent
MembersMemberAddedEvent, 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.