Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем NaPsTeR, 25 фев 2015.

  1. Автор темы
    NaPsTeR

    NaPsTeR Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    kesha0129
    Собственно, в чем вопрос, как получить список приватов в радиусе 15 блоков от игрока?
     
  2. Хостинг MineCraft
    <
  3. AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Skype:
    ahmed136323
    Получи локацию игрока
    Получи все регионы
    Получи локацию каждой(скорее всего, это возможно)
    Проверь расстояние от игрока до локации.
    loc1.distance(loc2)
    Меньше 16 - получай нужный регион.
     
  4. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Нюх-нюх....
    Попахивает лагами
     
  5. AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Skype:
    ahmed136323
    Ладно, может ты и прав, лагами просто воняет..
     
  6. LaoTheLizard

    LaoTheLizard Старожил Пользователь

    Баллы:
    103
    Skype:
    sgp_the_controller
    Гудмана уволил за что?

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

    А, впрочем, можно вообще даром (даже написал код):
    Код:
        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 - регионов нет.
     
  7. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    А разве нельзя в Async?[DOUBLEPOST=1424960476,1424960444][/DOUBLEPOST]
    Гудмана уволил за что?
     
  8. LaoTheLizard

    LaoTheLizard Старожил Пользователь

    Баллы:
    103
    Skype:
    sgp_the_controller
    Ты не дочитал, похоже. Там процедура, работающая с кубоидом. Минимум затрат.
     

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