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

[Решено] Получение региона WorldGuard с высшим приоритетом

Тема в разделе "Разработка плагинов для новичков", создана пользователем CoolBoy, 26 май 2016.

Статус темы:
Закрыта.
  1. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Всем доброго времени суток, уважаемые форумчане.

    Наткнулся на ещё одну проблему, связанную с API WorldGuard :)

    Цель:
    Реализовать поддержку "подрегионов" в основном регионе.
    Например, имеем регион spawn с защитой, которую реализует мой плагин. Но на спавне есть регион mine. Нужно игнорировать защиту моего плагина в этом регионе.

    Я решил реализовать это, используя приоритеты регионов.
    То, что мне нужно:
    Код:
    RegionManager regionManager = this.plugin.getWorldGuard().getRegionManager(player.getWorld());
    ApplicableRegionSet set = regionManager.getApplicableRegions(block.getLocation());
    
    for (ProtectedRegion region : set)
    {
        /*
         * Вот тут мне нужно найти регион с наивысшим значением приоритета.
         * И разрешить ломать и размещать блоки в нём.
         */
    }
    
    То, что имею на данный момент:
    Код:
    RegionManager regionManager = this.plugin.getWorldGuard().getRegionManager(player.getWorld());
    ApplicableRegionSet set = regionManager.getApplicableRegions(block.getLocation());
    
    for (ProtectedRegion region : set)
    {
        int l = 0;
    
        if (l < region.getPriority())
        {
            l = region.getPriority();
        }
    
        else if (l == region.getPriority())
        {
            event.setCancelled(false);
            return;
        }
    }
    
    Проблема в том что данный код работает некорректно.

    Вопрос:
    Можно ли как-то заставить мой код работать правильно? Или есть путь легче, для выполнения той задачи, что я поставил?
     
    Последнее редактирование: 26 май 2016
  2. Хостинг MineCraft
    <
  3. Larin

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

    Баллы:
    103
    1. Создаёшь регион
    2. Создаешь регион в регионе
    3. Выставляешь parent для внутреннего региона
    4. Переопределяешь флаг во внутреннем регионе.
    5. PROFIT!
     
  4. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Не используя parent ;)
     
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    А что сортировку уже отменили?
     
  6. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Подробнее можно?
     
  7. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Получаешь приоритет и сортируешь массив по нему.[DOUBLEPOST=1464290277,1464290142][/DOUBLEPOST]Да и потом, не лучше ли юзать кастомный флаг и чекать его?
     
  8. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Ну а в чем проблема получить все регионы где стоит игрок и проверить в этом списке нету ли нужного региона?
     
  9. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Каким образом?

    Получить ArrayList регионов и прочекать каждый в этом листе?
    Или циклом for?

    Мне нужно проверить, совпадает ли разрушаемый регион, региону спавна из конфига и, если совпадает, проверить, не стоит ли разрушаемый блок на регионе шахты. Если на территории шахты - убираем отмену события. Если за её пределами - отменяем событие.

    Если есть способы проще - предлагайте, я только рад :)
     
    Последнее редактирование: 26 май 2016
  10. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
  11. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Посмотрел ваш плагин самым первым, дабы подчерпнуть идею для реализации того, что задумал я ;)
    И я так ничего там не разобрал.

    Полагаю, в этом куске кода содержится вся нужная мне суть?
    Код:
    public class wg6
    {
        public OPSRegion plugin;
        public WorldGuardPlugin wg = (WorldGuardPlugin) Bukkit.getPluginManager().getPlugin("WorldGuard");
    
        public wg6(OPSRegion instance)
        {
            this.plugin = instance;
        }
    
        boolean wg(World w, Location l, boolean b)
        {
            String mine = "";
            if (b)
            {
                mine = "mine";
            }
    
            ApplicableRegionSet set = this.wg.getRegionManager(w).getApplicableRegions(l);
    
            for (ProtectedRegion rg : set.getRegions())
            {
                for (Object region : this.plugin.getConfig().getList("regions" + mine))
                {
                    if (!rg.getId().equalsIgnoreCase(region.toString()))
                    {
                        continue;
                    }
                    return true;
                }
            }
            return false;
        }
    }
    
     
  12. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Так и есть. Но это не все. Тут сама либа проверки.
     
  13. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Интересно. Позже, тогда, протестирую и отпишу о результатах.
     
  14. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Зачем вообще писать плагины на защиту спавна? Чем простые регионы не устраивают?
    Ну и почему бы не сделать exclusions в конфиге с именами игнорируемых регионов?
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Все просто, нью фаги продают школьникам регион бипасс.
     
  16. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    И зарабатывают на этом прилично.
     
  17. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Не только ;)
    Да и не ньюфаг я уже давно :)[DOUBLEPOST=1464351374,1464335724][/DOUBLEPOST]UP[DOUBLEPOST=1465132707][/DOUBLEPOST]Решено.
     
    Последнее редактирование: 27 май 2016
Статус темы:
Закрыта.

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