Помогите Приоритеты.

  • Автор темы Автор темы AlexMor
  • Дата начала Дата начала

AlexMor

Активный участник
Пользователь
Баллы
76
Расскажите пожалйста чем отсличаются приоритеты от LOWEST до MONITOR (или HIGEST)
 
++ тоже не совсем понял, может ли о великий @alexandrage рассказать более просто, для нас, простых смертных? :D
всмысле самый тяжелый? тоесть чем больше приоритет тем последнее очередь он занимает?
MONITOR идёт после HIGHEST.С помощью него можно поломать ивенты других плагинов.
 
MONITOR идёт после HIGHEST.С помощью него можно поломать ивенты других плагинов.
Как уже сказал @slavik123123123, поломать ивенты других плагинов не получится. На то он и называется MONITOR, чтобы с помощью метода с таким приоритетом наблюдать за событиями и быть уверенным, что никто не сделает ничего с событием после того как ты отследил его состояние. Проще говоря, не получится такого, что событие кто-то отменил, а вы в плагине рассчитываете, что оно не отменено.
 
Я не говорил об отмене ивента.Я имел в виду логику слушателей других плагинов, которую можно нарушить, не задевая самого ивента.
Ору с нубов, чего ты там нарушишь то? А вот отменить уже отмененный ивент это запросто. Вот к примеру прикол сломать wg.

Java:
    @EventHandler(priority = EventPriority.MONITOR)
    public void on(PlayerInteractEvent e) {
        e.setCancelled(false);
    }
 
    @EventHandler(priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        e.setCancelled(false);
    }
 
    @EventHandler(priority = EventPriority.MONITOR)
    public void on(BlockPlaceEvent e) {
        e.setCancelled(false);
    }
Плагины редко юзают вес и темболее приоритет монитора и мы уверены что наш отработает последним.
Если же в стороннем плагине так же монитор, то депенд зависимость и ждем загрузку того плагина первым.
Ну или банальным алфавитным порядком в имени, но может не сработать и тогда воля рандомизера.
 
Как уже сказал @slavik123123123, поломать ивенты других плагинов не получится. На то он и называется MONITOR, чтобы с помощью метода с таким приоритетом наблюдать за событиями и быть уверенным, что никто не сделает ничего с событием после того как ты отследил его состояние. Проще говоря, не получится такого, что событие кто-то отменил, а вы в плагине рассчитываете, что оно не отменено.
Ору с нубов, чего ты там нарушишь то? А вот отменить уже отмененный ивент это запросто. Вот к примеру прикол сломать wg.

Java:
    @EventHandler(priority = EventPriority.MONITOR)
    public void on(PlayerInteractEvent e) {
        e.setCancelled(false);
    }

    @EventHandler(priority = EventPriority.MONITOR)
    public void on(BlockBreakEvent e) {
        e.setCancelled(false);
    }

    @EventHandler(priority = EventPriority.MONITOR)
    public void on(BlockPlaceEvent e) {
        e.setCancelled(false);
    }
Плагины редко юзают вес и темболее приоритет монитора и мы уверены что наш отработает последним.
Если же в стороннем плагине так же монитор, то депенд зависимость и ждем загрузку того плагина первым.
Ну или банальным алфавитным порядком в имени, но может не сработать и тогда воля рандомизера.
Для теста, создал два плагина.В одном:
Java:
    @EventHandler(priority = EventPriority.HIGHEST)
    private void onPlayerLogin(PlayerLoginEvent event) {
        event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Kicked by Test1!");
        getLogger().info("Kicked by Test1!");
    }
Во втором:
Java:
    @EventHandler(priority = EventPriority.MONITOR)
    private void onPlayerLogin(PlayerLoginEvent event) {
        event.allow();
        getLogger().info("Allowed by Test2!");
    }
В итоге, игрок заходит на сервер, а в консоли мы видим:
Код:
[13:44:21 INFO]: [Test1] Kicked by Test1!
[13:44:21 INFO]: [Test2] Allowed by Test2!
 
Для теста, создал два плагина.В одном:
Java:
    @EventHandler(priority = EventPriority.HIGHEST)
    private void onPlayerLogin(PlayerLoginEvent event) {
        event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Kicked by Test1!");
        getLogger().info("Kicked by Test1!");
    }
Во втором:
Java:
    @EventHandler(priority = EventPriority.MONITOR)
    private void onPlayerLogin(PlayerLoginEvent event) {
        event.allow();
        getLogger().info("Allowed by Test2!");
    }
В итоге, игрок заходит на сервер, а в консоли мы видим:
Код:
[13:44:21 INFO]: [Test1] Kicked by Test1!
[13:44:21 INFO]: [Test2] Allowed by Test2!
Прикольно :D.
А вот у обычного кика антикика нет).
 
Это лишь один из нескольких десятков возможных примеров.Выше ты сам подтвердил мои слова.
Ну если есть такие противодействия то да. Кроме канселеда.
Интересно а переключить вайтлист и войти получится?)
 
Ну если есть такие противодействия то да. Кроме канселеда.
Интересно а переключить вайтлист и войти получится?)
Конечно.
Код:
[13:55:20 INFO]: [Test1] Whitelist enabled by Test1!
[13:55:20 INFO]: [Test2] Whitelist disabled by Test2!
 
Конечно.
Код:
[13:55:20 INFO]: [Test1] Whitelist enabled by Test1!
[13:55:20 INFO]: [Test2] Whitelist disabled by Test2!
Кек, столько возможностей иметь школолосИровира.
Антибот ультра порвется и писец шкальникам :D.
event.allow(); думаю так же через вайтлист пустит.
 
Кек, столько возможностей иметь школолосИровира.
Антибот ультра порвется и писец шкальникам :D.
event.allow(); думаю так же через вайтлист пустит.
Конечно.
Код:
[14:03:29 INFO]: [Test1] Whitelist enabled by Test1!
[14:03:29 INFO]: [Test2] Login allowed by Test2 through whitelist!
 
А как обстоят дела с игнорированием online-mode?
Код выше был направлен на поломку логики ивентов из других плагинов, а online-mode это уже серверная сторона, и приоритеты тут не играют такой роли.Тем не менее, я проверил на ивенте PlayerLoginEvent, создав 3 слушателя с разными приоритетами, не пробил.Я думаю, серверная конфигурация вступает в силу до этапа загрузки плагинов, так что обычный PlayerLoginEvent не поможет.Я не смотрел, может есть штатные методы API для отключения online-mode, позже проверю.
 
Естественно, до. Оно вообще в отдельном потоке сразу после accept()-а проверяет хеш от клиента у третьей стороны, и только потом попадает в общую обработку.
 
А как обстоят дела с игнорированием online-mode?
Без протоколлиба никак не обстоят. Но это уже иная история и сервер должен быть в офлайн моде. И на протоколлибе можно заюзать проверку авторизации для нужных лузверей.
 
Без протоколлиба никак не обстоят. Но это уже иная история и сервер должен быть в офлайн моде. И на протоколлибе можно заюзать проверку авторизации для нужных лузверей.
Да я в курсе, делал такую систему при помощи своего слушателя пакетов. Единственное, уже подзабыл, можно ли реализовать такое без особых костылей. Судя по всему нельзя.
 
Назад
Верх