Проверка существования другого региона на указанном радиусе - PullRequest
0 голосов
/ 30 сентября 2018

Я создаю сюжеты, основанные на миротворческих регионах.Я ищу хороший метод проверки, нет ли другого региона в радиусе 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 людям.Кто-нибудь из вас предлагает другое решение для этого?

1 Ответ

0 голосов
/ 08 октября 2018

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.

https://worldguard.enginehub.org/en/latest/developer/regions/protected-region/#finding-intersecting-regions

...