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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем AlexMor, 3 мар 2017.

  1. Автор темы
    AlexMor

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

    Баллы:
    66
    Расскажите пожалйста чем отсличаются приоритеты от LOWEST до MONITOR (или HIGEST)
     
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

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

    Баллы:
    123
    LOWEST - вызывается первым,
    тут идут LOW, DEFAULT (или NORMAL, не помню), HIGH,
    HIGHEST - вызывается последним,
    MONITOR - Да her ego znaet, но наверное после HIGHEST..
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    MONITOR самый тяжелый.
     
  5. Автор темы
    AlexMor

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

    Баллы:
    66
    всмысле самый тяжелый? тоесть чем больше приоритет тем последнее очередь он занимает?
     
  6. Mr_RoboMan

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

    Баллы:
    123
    ++ тоже не совсем понял, может ли о великий @alexandrage рассказать более просто, для нас, простых смертных? :D
     
  7. AtomicInteger

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

    Баллы:
    46
    MONITOR идёт после HIGHEST.С помощью него можно поломать ивенты других плагинов.
     
  8. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    монитор не позволяет же отменять евент.
     
  9. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Как уже сказал @slavik123123123, поломать ивенты других плагинов не получится. На то он и называется MONITOR, чтобы с помощью метода с таким приоритетом наблюдать за событиями и быть уверенным, что никто не сделает ничего с событием после того как ты отследил его состояние. Проще говоря, не получится такого, что событие кто-то отменил, а вы в плагине рассчитываете, что оно не отменено.
     
  10. AtomicInteger

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

    Баллы:
    46
    Я не говорил об отмене ивента.Я имел в виду логику слушателей других плагинов, которую можно нарушить, не задевая самого ивента.
     
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ору с нубов, чего ты там нарушишь то? А вот отменить уже отмененный ивент это запросто. Вот к примеру прикол сломать wg.

    Код:
        @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);
        }
    Плагины редко юзают вес и темболее приоритет монитора и мы уверены что наш отработает последним.
    Если же в стороннем плагине так же монитор, то депенд зависимость и ждем загрузку того плагина первым.[DOUBLEPOST=1488627200,1488627103][/DOUBLEPOST]Ну или банальным алфавитным порядком в имени, но может не сработать и тогда воля рандомизера.[DOUBLEPOST=1488627713][/DOUBLEPOST]
     
  12. AtomicInteger

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

    Баллы:
    46
    Для теста, создал два плагина.В одном:
    Код:
        @EventHandler(priority = EventPriority.HIGHEST)
        private void onPlayerLogin(PlayerLoginEvent event) {
            event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Kicked by Test1!");
            getLogger().info("Kicked by Test1!");
        }
    Во втором:
    Код:
        @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!
     
  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Прикольно :D.[DOUBLEPOST=1488627970,1488627915][/DOUBLEPOST]А вот у обычного кика антикика нет).
     
  14. AtomicInteger

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

    Баллы:
    46
    Это лишь один из нескольких десятков возможных примеров.Выше ты сам подтвердил мои слова.
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну если есть такие противодействия то да. Кроме канселеда.[DOUBLEPOST=1488628209,1488628152][/DOUBLEPOST]Интересно а переключить вайтлист и войти получится?)
     
  16. AtomicInteger

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

    Баллы:
    46
    Конечно.
    Код:
    [13:55:20 INFO]: [Test1] Whitelist enabled by Test1!
    [13:55:20 INFO]: [Test2] Whitelist disabled by Test2!
     
  17. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Кек, столько возможностей иметь школолосИровира.[DOUBLEPOST=1488628518,1488628469][/DOUBLEPOST]Антибот ультра порвется и писец шкальникам :D.[DOUBLEPOST=1488628647][/DOUBLEPOST]event.allow(); думаю так же через вайтлист пустит.
     
  18. AtomicInteger

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

    Баллы:
    46
    Конечно.
    Код:
    [14:03:29 INFO]: [Test1] Whitelist enabled by Test1!
    [14:03:29 INFO]: [Test2] Login allowed by Test2 through whitelist!
     
  19. Dymeth

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

    Баллы:
    76
    А как обстоят дела с игнорированием online-mode?
     
  20. AtomicInteger

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

    Баллы:
    46
    Код выше был направлен на поломку логики ивентов из других плагинов, а online-mode это уже серверная сторона, и приоритеты тут не играют такой роли.Тем не менее, я проверил на ивенте PlayerLoginEvent, создав 3 слушателя с разными приоритетами, не пробил.Я думаю, серверная конфигурация вступает в силу до этапа загрузки плагинов, так что обычный PlayerLoginEvent не поможет.Я не смотрел, может есть штатные методы API для отключения online-mode, позже проверю.
     
  21. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Естественно, до. Оно вообще в отдельном потоке сразу после accept()-а проверяет хеш от клиента у третьей стороны, и только потом попадает в общую обработку.
     

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