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

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

Discussion in 'Разработка плагинов для новичков' started by AlexMor, Mar 3, 2017.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Code:
        @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 Активный участник Пользователь

    Trophy Points:
    46
    Для теста, создал два плагина.В одном:
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        private void onPlayerLogin(PlayerLoginEvent event) {
            event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Kicked by Test1!");
            getLogger().info("Kicked by Test1!");
        }
    Во втором:
    Code:
        @EventHandler(priority = EventPriority.MONITOR)
        private void onPlayerLogin(PlayerLoginEvent event) {
            event.allow();
            getLogger().info("Allowed by Test2!");
        }
    В итоге, игрок заходит на сервер, а в консоли мы видим:
    Code:
    [13:44:21 INFO]: [Test1] Kicked by Test1!
    [13:44:21 INFO]: [Test2] Allowed by Test2!
     
  13. alexandrage

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

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

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

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

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

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

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

    Trophy Points:
    46
    Конечно.
    Code:
    [13:55:20 INFO]: [Test1] Whitelist enabled by Test1!
    [13:55:20 INFO]: [Test2] Whitelist disabled by Test2!
     
  17. alexandrage

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

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

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

    Trophy Points:
    46
    Конечно.
    Code:
    [14:03:29 INFO]: [Test1] Whitelist enabled by Test1!
    [14:03:29 INFO]: [Test2] Login allowed by Test2 through whitelist!
     
  19. Dymeth

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

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

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

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

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

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

Share This Page