查询当前领地
根据位置或玩家状态读取领地名称、所有者、成员和边界。
查询位置所在领地
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()
));
边界上界采用半开区间,做方块坐标判断时不要把 x2、y2、z2 当作包含点。详见 辅助类型。
查询成员和组
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());
}