java - 检查指定半径处是否存在不同的区域
问题描述
我根据世界守卫地区创建情节。我正在寻找一种检查每个方向 50 个计数半径内是否没有其他区域的好方法。我的观点是,没有人创造一个情节和别人的情节。目前,我以一种奇怪的方式检查了它,但它实际上有效。
Location p3 = p.getLocation();
p3.setX(p3.getBlockX());
p3.setY(60);
p3.setZ(p3.getBlockZ()+size);
if(region.getApplicableRegions(p3).size() == 0) {
plotsCheck.put(p.getUniqueId(), plotsCheck.get(p.getUniqueId())+1);
}
Location p3a = p.getLocation();
p3a.setX(p3a.getBlockX());
p3a.setY(60);
p3a.setZ(p3a.getBlockZ()+10);
if(region.getApplicableRegions(p3a).size() == 0) {
plotsCheck.put(p.getUniqueId(), plotsCheck.get(p.getUniqueId())+1);
}
Location p4 = p.getLocation();
p4.setX(p4.getBlockX());
p4.setY(60);
p4.setZ(p4.getBlockZ()-size);
if(region.getApplicableRegions(p4).size() == 0) {
plotsCheck.put(p.getUniqueId(), plotsCheck.get(p.getUniqueId())+1);
}
这样,我检查了它是否为空。如果是这样,我在哈希图中添加了 1 个点。不幸的是,这并不总是有效,并以几个情节属于 2 人的事实结束。你们中有人为此提出不同的解决方案吗?
解决方案
WorldGuard 已经为此提供了一些内置功能。
RegionContainer container = getWorldGuard().getRegionContainer();
RegionManager manager = container.get(world);
Region newRegion = //create your region somehow
manager.addRegion(newRegion);
List<ProtectedRegion> regions = new ArrayList<ProtectedRegion>(manager.getRegions().values());
List<ProtectedRegion> overlappingRegions = newRegion.getIntersectingRegions(regions);
if (overlappingRegions.size() > 0) {
//delete region newRegion
} else {
//region is valid
}
这当然只有在区域已经创建之后才有效。
代码未经测试。刚刚搜索了 WorldGuard API wiki。
推荐阅读
- python - 覆盖 WSDL 端口,在 spyne 中绑定 URL
- codenameone - Codenameone中如何确定propertybusinessobject中属性的名称和类型?
- node.js - 如何启动简单的 Node.js Express.js 服务器?
- azure - Hazelcast 实例发现在 azure 应用服务中以嵌入模式运行
- node.js - 无法访问 HTTP 服务器中的 POST 数据
- c# - C# LINQ 查询包含动态列表的匿名类型
- github - 如何在 teamcity 中创建多个 git 存储库项目
- python - 错误:函数返回 None 或在没有返回语句的情况下结束。但在哪里找不到?
- php - 如何为 php foreach 循环结果仅回显一条消息并在没有结果时隐藏该消息?
- asp.net - 我们可以在不使用 ASP.Net Identity 的情况下使用 MVC 5 提供的 cookie 身份验证吗?