1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите задержка

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

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

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

    Баллы:
    103
    Skype:
    leon_03_99
    Имя в Minecraft:
    leon0399
    когда игрок заходит на сервер, ему отправляется сообщение приветствия, но после этого сообщения идут сообщения модов, можно ли как нибудь запилить задержку перед отправкой сообщения?
     
  2. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    leon0399, задержку - нет. По крайней мере в голову приходит способ, который по сути подвесит сервер.

    Можно попытаться повлиять порядок вывода сообщений. Если у твоего обработчика приоритет LOWEST или LOW - сообщения будут первыми в списке. Если HIGH или HIGHEST - последние (если другие плагины не обрабатывать сообщения с другим приоритетом).
    Можно свое сообщение выводить с задержкой, т.е. в самом сообщение создавать delayed task для вывода сообщения. Тогда оно точно будет выведено после всех сообщений, которые выводятся в PlayerJoinEvent.
     
  3. Автор темы
    leon0399

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

    Баллы:
    103
    Skype:
    leon_03_99
    Имя в Minecraft:
    leon0399
    Можно подробнее про delayed-task, и что это вообще?
     
  4. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Ну собственно, все подробно расписано тут:
    http://wiki.bukkit.org/Scheduler_Programming

    Ну и пример оттуда:

    Код:
    myPlugin.getServer().getScheduler().scheduleSyncDelayedTask(myPlugin, new Runnable() {
     
      public void run() {
          getServer().broadcastMessage("This message is broadcast by the main thread");
      }
    }, 60L);
    Здесь демонстрируется вывод сообщения через 60 тиков, т.е. через 3 секунды. По сути, то что нужно ;)
     
  5. D_ART

    D_ART Старожил Девелопер Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Artarious
    Вы, сударь, как всегда бесподобны :) С помощью этого я добавлю функцию очистки лог файла через нужное пользователю время в свой LogManager;)
     
  6. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    D_ART, спасибо конечно ;) Но это ж всё из открытых источников :)

    Вообще с ними острожнее. "Тяжелая" синхронизированная задача может подвесить сервер; тяжелая "ассинхронная" - здорово его нагрузить (сервера с большим количеством игроков, попробовавшие Dogtags заметили это через какой-то период времени :( К счастью, вовремя разобрались в чем дело - в последних версиях Dogtags это исправлено).

    Какие использовать - зависит от того, что планируется делать. Как я понял, если планируется в задаче менять что-то на карте - то нужно использовать синхронизированные задачи. Если рассылать сообщения, отслеживать перемещения, проверять наличие/отсутствие блоков - несинхронизированные.
     
  7. D_ART

    D_ART Старожил Девелопер Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Artarious
    Что за асинхронные и неасинхронные ? :eek::confused:
     
  8. Автор темы
    leon0399

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

    Баллы:
    103
    Skype:
    leon_03_99
    Имя в Minecraft:
    leon0399
    Спасибо;) worldeditcui ужасно тормозит, аж на 100 тиков пришлось ставить:eek:
     
  9. akke

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

    Баллы:
    103
    Синхронные задачи выполняются в главном треде сервера, асинхронные - не в главном. Во втором случае много чего использовать нельзя, легко нарваться на concurrentModificationException (два потока пытаются изменить один элемент одновременно)
     
    D_ART нравится это.
  10. D_ART

    D_ART Старожил Девелопер Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Artarious
    Асинхронная задача врятли на это нарвётся при очистке содержмого лог файла :)
     

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