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

  • Автор темы Автор темы CoolBoy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

CoolBoy

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
Xezard
Всем доброго времени суток, уважаемые форумчане.

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

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

Я решил реализовать это, используя приоритеты регионов.
То, что мне нужно:
Java:
RegionManager regionManager = this.plugin.getWorldGuard().getRegionManager(player.getWorld());
ApplicableRegionSet set = regionManager.getApplicableRegions(block.getLocation());

for (ProtectedRegion region : set)
{
    /*
     * Вот тут мне нужно найти регион с наивысшим значением приоритета.
     * И разрешить ломать и размещать блоки в нём.
     */
}

То, что имею на данный момент:
Java:
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;
    }
}

Проблема в том что данный код работает некорректно.

Вопрос:
Можно ли как-то заставить мой код работать правильно? Или есть путь легче, для выполнения той задачи, что я поставил?
 
Последнее редактирование:
1. Создаёшь регион
2. Создаешь регион в регионе
3. Выставляешь parent для внутреннего региона
4. Переопределяешь флаг во внутреннем регионе.
5. PROFIT!
 
1. Создаёшь регион
2. Создаешь регион в регионе
3. Выставляешь parent для внутреннего региона
4. Переопределяешь флаг во внутреннем регионе.
5. PROFIT!
Не используя parent ;)
 
Ну а в чем проблема получить все регионы где стоит игрок и проверить в этом списке нету ли нужного региона?
 
Ну а в чем проблема получить все регионы где стоит игрок и проверить в этом списке нету ли нужного региона?
Каким образом?

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

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

Если есть способы проще - предлагайте, я только рад :)
 
Последнее редактирование:
Самый простой? Есть конечно. Посмотри у меня https://cloud.mail.ru/public/3niW7k3UykCp/Мои плагины/OPSRegion.jar
Посмотрел ваш плагин самым первым, дабы подчерпнуть идею для реализации того, что задумал я ;)
И я так ничего там не разобрал.

Полагаю, в этом куске кода содержится вся нужная мне суть?
Java:
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;
    }
}
 
Посмотрел ваш плагин самым первым, дабы подчерпнуть идею для реализации того, что задумал я ;)
И я так ничего там не разобрал.

Полагаю, в этом куске кода содержится вся нужная мне суть?
Java:
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;
    }
}
Так и есть. Но это не все. Тут сама либа проверки.
 
регион spawn с защитой, которую реализует мой плагин.
Зачем вообще писать плагины на защиту спавна? Чем простые регионы не устраивают?
Ну и почему бы не сделать exclusions в конфиге с именами игнорируемых регионов?
 
Зачем вообще писать плагины на защиту спавна? Чем простые регионы не устраивают?
Ну и почему бы не сделать exclusions в конфиге с именами игнорируемых регионов?
Все просто, нью фаги продают школьникам регион бипасс.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх