[Решено] Отмена сообщения WorldGuard

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

CoolBoy

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

Работая с API WorldGuard наткнулся на небольшую проблему.

Имею код слушателя:
Java:
@EventHandler
public void onBlockDestroy(BlockBreakEvent event) 
{
    //куча лишнего кода и проверок. Под конец:
    if (event.isCancelled())
    {
        event.setCancelled(false);
    }
}
Данный кусок кода работает отлично, за одним небольшим исключением - WorldGuard пишет мне, что я не могу ломать блоки сдесь.

Возможно как-то отменить отправку этого сообщения?
 
Ну и будет он обрабатывается до WG.
А толку?
Сначала евент срабатывает, потом отменяется и выскакивает сообщение.

Да, кстати, в таком случае и конструкция:
Java:
if (event.isCancelled())
{
    event.setCancelled(false);
}
не нужна. Так как мой евент сработает раньше чем евент WG и отменять будет нечего.

Да, кстати, (ignoreCancelled = true) тоже не помогает в моём случае.

@Dereku
Может лучше поставить приоритет HIGHEST или MONITOR?
LOWEST - обрабатывается раньше всех.
HIGHEST - обрабатывается предпоследним, а MONITOR - после всех.
 
Последнее редактирование:
Что то не сработал у тебя суммон.
Ну тут только шерстить код WG и искать это место. После смотреть, как можно это место не вызывать.
Что, всё настолько печально? Вон сколько плагинов с WG взаимодействующих. Совсем никак?
Я так понял, чтобы разрешить ломать блоки мне что, в овнеры региона добавлять чтоль?
 
LOWEST - обрабатывается раньше всех.
HIGHEST - обрабатывается предпоследним, а MONITOR - после всех.
Lowest - Event call is of very low importance and should be ran first, to allow other plugins to further customise the outcome
Highest - Event call is critical and must have the final say in what happens to the event
Тоесть как я понял это то что, Lowest вызывается самым первым, а Highest уже может изменить то что сделал lowest. Тоесть если сделать @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
и убрать if (event.isCancelled()) event.setCancelled(false);
то будет все норм.
Хотя я могу очень сильно ошибаться... Но всё равно попробуй.
 
Lowest - Event call is of very low importance and should be ran first, to allow other plugins to further customise the outcome
Highest - Event call is critical and must have the final say in what happens to the event
Тоесть как я понял это то что, Lowest вызывается самым первым, а Highest уже может изменить то что сделал lowest. Тоесть если сделать @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
и убрать if (event.isCancelled()) event.setCancelled(false);
то будет все норм.
Хотя я могу очень сильно ошибаться... Но всё равно попробуй.
Спасибо за ответ. Позже проверю, сейчас возможности нет :)
 
Lowest - Event call is of very low importance and should be ran first, to allow other plugins to further customise the outcome
Highest - Event call is critical and must have the final say in what happens to the event
Зачем ты скопипастил то же самое но на инглише? ЗАЧЕМ?
 
Хз. Чтобы ссылку на источник не кидать)
В итоге ты кинешь ссылку на англоязычный ресурс, где будет написано то же самое.
Проще говоря, не сей смуту в этом разделе. Если написано один раз на русском языке, то оно не нуждается в повторении на всех языках мира.
 
В итоге ты кинешь ссылку на англоязычный ресурс, где будет написано то же самое.
Проще говоря, не сей смуту в этом разделе. Если написано один раз на русском языке, то оно не нуждается в повторении на всех языках мира.
Ну тут люди советуют поставить LOWEST, а wg работает на NORMAL, тоесть следуя логике normal отменит lowest.
 
Просто сначала сработает евент с lowest, а потом с normal ;)
Event:
> LOWEST:
>> hashmap.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
> LOW:
>> setCancelled(true):
> NORMAL:
>> Event is cancelled, return.
> HIGH:
>> Event is cancelled, return.
> HIGHEST:
>> event.setCancelled(false);
>> this.getLogger().info("Woah, you can read that!");
> MONITOR:
>> this.getPlayerLogger().trigger(event);

Вот как то так и будет всё это работать. Можно вообще на приоритетах рулить входящим потоком в плагины, но это не нужно никому :(
 
Lowest - Event call is of very low importance and should be ran first, to allow other plugins to further customise the outcome
Highest - Event call is critical and must have the final say in what happens to the event
Тоесть как я понял это то что, Lowest вызывается самым первым, а Highest уже может изменить то что сделал lowest. Тоесть если сделать @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
и убрать if (event.isCancelled()) event.setCancelled(false);
то будет все норм.
Хотя я могу очень сильно ошибаться... Но всё равно попробуй.
Бесполезно. Мой евент с приоритетом HIGHEST (MONITOR тоже пробовал, да)
спокойно отменяется даже при наличии строки (ignoreCancelled = true).

Актуально.
 
Может быть надо false?
По мнению @Dereku тебе нужно два эвента, до и после WG. Тот, который с низким приоритетом, помечает событие как отменённое, затем WG его игнорирует, затем обработчик с высоким приоритетом отменяет состояние отмены у события.
Возможно, если альтернатива: до WG отменить эвент и просто разрушить блок самому плагином (breakNaturally).
 
нужно два эвента, до и после WG. Тот, который с низким приоритетом, помечает событие как отменённое, затем WG его игнорирует, затем обработчик с высоким приоритетом отменяет состояние отмены у события.
Это может помочь, если WG действительно игнорирует отменённые события. иначе фигня выйдет.
 
Может быть надо false?
По мнению @Dereku тебе нужно два эвента, до и после WG. Тот, который с низким приоритетом, помечает событие как отменённое, затем WG его игнорирует, затем обработчик с высоким приоритетом отменяет состояние отмены у события.
Возможно, если альтернатива: до WG отменить эвент и просто разрушить блок самому плагином (breakNaturally).
Ахахах, вот дерьмо.

Всё работает идеально, я воспользовался советом от @Dereku. Но теперь, если блок ломать нельзя, то он не ломается, но уведомление от WG, типо "Hey! Sorry, but you can't break that block here." не приходит.

Есть идеи как пофиксить это?
:cry:

P.S. Хочу заспамить личку sk89q.
Может он доработает API WG, или хотя-бы поможет мне?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх