Помогите Помогите мне правильно обработать BlockBreakEvent в плагине

Статус
Закрыто для дальнейших ответов.

Crosstwinz

Активный участник
Пользователь
Баллы
66
Решил для интереса обновить заброшенный плагин OPSRegion. Уже многое в нем переделал (добавил команды для проверки WE и WG), но есть такая проблемка небольшая. Как правильно построить двойное условие таким образом, чтобы при попытке сломать блок сообщение об отсутствии доступа к региону (спавну) отображалось только на основном регионе, а не на автошахте (при попытке там сломать блок, такое же сообщение показывает, хотя блок сломать можно). На основных регионах, которые занесены в список, при попытке редактировать регион выводит сообщение, которое я придумал. Переходить мне на другой плагин или бросить это дело мне не предлагать! Вот скрипт, проверьте его и предлагайте варианты исправления (кто тут в java хорошо разбирается):
Код:
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false)
    void wg(final BlockBreakEvent e) {
        final Player p = e.getPlayer();
        if (!p.hasPermission("OPSRegion.admin")) {
            if (this.wgs(p.getWorld(), e.getBlock().getLocation(), false)) {
                e.setCancelled(true);
                p.sendMessage("§c§l[!]§7 \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430!");
            }
            if (this.wgs(p.getWorld(), e.getBlock().getLocation(), true)) {
                e.setCancelled(false);
            }
        }
    }
 
Последнее редактирование:
Ну только проверять на количество регионов в данном блоке

Код:
// Получаешь RegionManager из мира
RegionManager wgCurrWorldRM = wgInst.getRegionManager(player.getWorld());
//По любому локейшену создаёшь такой объект
ApplicableRegionSet arSet = wgCurrWorldRM.getApplicableRegions(block.getLocation());
//Среди этого сета ищем "спавн"
boolean isSpawn = false;
for (ProtectedRegion each : arSet) {
  if (each.getId().equalsIgnoreCase("spawn")) {
    isSpawn = true;
    break;
  }
}
// Чекаешь на количество приватов в локейшене
if(arSet.size() == 1 && isSpawn)
{
  p.sendMessage("Иди отсюда! Это не твоё!");
}
Источник: англофорумы и гугл
Время: 5-10 минут
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх