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

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

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

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

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

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

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

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

    Возможно как-то отменить отправку этого сообщения?
     
  2. Хостинг MineCraft
    <
  3. GoodCoder

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

    Баллы:
    76
    Приоритет на Lowest поставить, чтобы событие ДО WG обработать.
     
  4. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Лучше чем?
     
  5. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Ну и будет он обрабатывается до WG.
    А толку?
    Сначала евент срабатывает, потом отменяется и выскакивает сообщение.

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

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

    @Dereku[DOUBLEPOST=1464097679,1464097434][/DOUBLEPOST]
    LOWEST - обрабатывается раньше всех.
    HIGHEST - обрабатывается предпоследним, а MONITOR - после всех.
     
    Последнее редактирование: 24 май 2016
  6. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Что то не сработал у тебя суммон.
    Ну тут только шерстить код WG и искать это место. После смотреть, как можно это место не вызывать.
     
  7. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Что, всё настолько печально? Вон сколько плагинов с WG взаимодействующих. Совсем никак?
    Я так понял, чтобы разрешить ломать блоки мне что, в овнеры региона добавлять чтоль?
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Как будто я с ним тесно работал.
     
  9. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    :cry:

    Пошёл тогда, за костылями...
     
  10. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    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);
    то будет все норм.
    Хотя я могу очень сильно ошибаться... Но всё равно попробуй.
     
  11. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Спасибо за ответ. Позже проверю, сейчас возможности нет :)
     
  12. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Зачем ты скопипастил то же самое но на инглише? ЗАЧЕМ?
     
  13. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Хз. Чтобы ссылку на источник не кидать)
     
  14. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    В итоге ты кинешь ссылку на англоязычный ресурс, где будет написано то же самое.
    Проще говоря, не сей смуту в этом разделе. Если написано один раз на русском языке, то оно не нуждается в повторении на всех языках мира.
     
  15. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Ну тут люди советуют поставить LOWEST, а wg работает на NORMAL, тоесть следуя логике normal отменит lowest.
     
  16. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Просто сначала сработает евент с lowest, а потом с normal ;)
     
  17. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    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);

    Вот как то так и будет всё это работать. Можно вообще на приоритетах рулить входящим потоком в плагины, но это не нужно никому :(
     
  18. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Бесполезно. Мой евент с приоритетом HIGHEST (MONITOR тоже пробовал, да)
    спокойно отменяется даже при наличии строки (ignoreCancelled = true).

    Актуально.
     
  19. Reality_SC

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

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

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Это может помочь, если WG действительно игнорирует отменённые события. иначе фигня выйдет.
     
  21. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Ахахах, вот дерьмо.

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

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

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

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