查询当前领地
文档/dominion-api/查询当前领地

查询当前领地

根据位置或玩家状态读取领地名称、所有者、成员和边界。

查询位置所在领地

public void describeLocation(Player player) {
    DominionDTO dominion = api.getDominion(player.getLocation());
    if (dominion == null) {
        player.sendMessage("这里没有领地。");
        return;
    }

    player.sendMessage("领地:" + dominion.getName());
    player.sendMessage("所有者:" + api.getPlayerName(dominion.getOwner()));
}

getDominion(Location) 只做空间查询,适合命令、菜单和 Placeholder 风格的展示逻辑。

显示玩家当前领地

@EventHandler
public void onJoin(PlayerJoinEvent event) {
    Player player = event.getPlayer();
    DominionDTO dominion = api.getPlayerCurrentDominion(player);

    if (dominion != null) {
        player.sendMessage("你当前位于:" + dominion.getName());
    }
}

玩家进入或离开服务器时,如果你的附属自行缓存了领地状态,应同时处理缓存清理。需要长期响应边界变化时,直接监听 PlayerCrossDominionBorderEvent 更可靠。

读取边界

CuboidDTO cuboid = dominion.getCuboid();
player.sendMessage(String.format(
        "范围:(%d, %d, %d) -> (%d, %d, %d)",
        cuboid.x1(), cuboid.y1(), cuboid.z1(),
        cuboid.x2(), cuboid.y2(), cuboid.z2()
));

边界上界采用半开区间,做方块坐标判断时不要把 x2y2z2 当作包含点。详见 辅助类型

查询成员和组

MemberDTO member = api.getMember(dominion, player.getUniqueId());
if (member == null) {
    player.sendMessage("你不是该领地的成员。");
    return;
}

GroupDTO group = api.getGroup(member);
if (group != null) {
    player.sendMessage("权限组:" + group.getNamePlain());
}