Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Приваты в радиусе

NaPsTeR

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
kesha0129
Собственно, в чем вопрос, как получить список приватов в радиусе 15 блоков от игрока?
 
Получи локацию игрока
Получи все регионы
Получи локацию каждой(скорее всего, это возможно)
Проверь расстояние от игрока до локации.
loc1.distance(loc2)
Меньше 16 - получай нужный регион.
 
Попахивает лагами
Гудмана уволил за что?

Можно решить вопрос компромиссным методом:
1. Создаем массив локаций вокруг игрока с шагом 5. Это в кубе 30х30х30 будет 343 точки.
2. Проверяем каждую из точек на принадлежность к регионам WorldGuard.
Если речь идет о том, чтобы постоянно выводить список регионов (в скорборд?), то для компенсации погрешности (кстати, весьма и весьма незначительной) достаточно переместиться во всех направлениях на 5 блоков.
Если речь о выводе списка регионов по команде, то шаг можно сократить вплоть до 1. Это будет разовый прогон через 27 к блоков.

А, впрочем, можно вообще даром (даже написал код):
Java:
    private List listRegions(Player p) {
        List<String> regs = new ArrayList<String>();
        Location loc = p.getLocation();
       BlockVector b1 = new BlockVector(loc.getBlockX() - 15, loc.getBlockY() - 15, loc.getBlockZ() - 15);
       BlockVector b2 = new BlockVector(loc.getBlockX() + 15, loc.getBlockY() + 15, loc.getBlockZ() + 15);
       RegionManager regionManager = WGBukkit.getRegionManager(loc.getWorld());
       ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2));
       if(set.size() != 0){
       for (ProtectedRegion pr : set) {
           regs.add(pr.getId());
           }
       }
       return regs;
    }

А дальше, если size() == 0 - регионов нет.
 
Можно решить вопрос компромиссным методом:
1. Создаем массив локаций вокруг игрока с шагом 5. Это в кубе 30х30х30 будет 343 точки.
2. Проверяем каждую из точек на принадлежность к регионам WorldGuard.
Если речь идет о том, чтобы постоянно выводить список регионов (в скорборд?), то для компенсации погрешности (кстати, весьма и весьма незначительной) достаточно переместиться во всех направлениях на 5 блоков.
Если речь о выводе списка регионов по команде, то шаг можно сократить вплоть до 1. Это будет разовый прогон через 27 к блоков.

А, впрочем, можно вообще даром (даже написал код):
Java:
    private List listRegions(Player p) {
        List<String> regs = new ArrayList<String>();
        Location loc = p.getLocation();
       BlockVector b1 = new BlockVector(loc.getBlockX() - 15, loc.getBlockY() - 15, loc.getBlockZ() - 15);
       BlockVector b2 = new BlockVector(loc.getBlockX() + 15, loc.getBlockY() + 15, loc.getBlockZ() + 15);
       RegionManager regionManager = WGBukkit.getRegionManager(loc.getWorld());
       ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2));
       if(set.size() != 0){
       for (ProtectedRegion pr : set) {
           regs.add(pr.getId());
           }
       }
       return regs;
    }

А дальше, если size() == 0 - регионов нет.
А разве нельзя в Async?
Нюх-нюх....
Попахивает лагами
Гудмана уволил за что?
 

Поделиться этой страницей

Назад
Верх