Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

leon0399

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

Можно попытаться повлиять порядок вывода сообщений. Если у твоего обработчика приоритет LOWEST или LOW - сообщения будут первыми в списке. Если HIGH или HIGHEST - последние (если другие плагины не обрабатывать сообщения с другим приоритетом).
Можно свое сообщение выводить с задержкой, т.е. в самом сообщение создавать delayed task для вывода сообщения. Тогда оно точно будет выведено после всех сообщений, которые выводятся в PlayerJoinEvent.
 
Можно подробнее про delayed-task, и что это вообще?
 
Ну собственно, все подробно расписано тут:
http://wiki.bukkit.org/Scheduler_Programming

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

Java:
myPlugin.getServer().getScheduler().scheduleSyncDelayedTask(myPlugin, new Runnable() {
 
  public void run() {
      getServer().broadcastMessage("This message is broadcast by the main thread");
  }
}, 60L);

Здесь демонстрируется вывод сообщения через 60 тиков, т.е. через 3 секунды. По сути, то что нужно ;)
 
Ну собственно, все подробно расписано тут:
http://wiki.bukkit.org/Scheduler_Programming

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

Java:
myPlugin.getServer().getScheduler().scheduleSyncDelayedTask(myPlugin, new Runnable() {
 
  public void run() {
      getServer().broadcastMessage("This message is broadcast by the main thread");
  }
}, 60L);

Здесь демонстрируется вывод сообщения через 60 тиков, т.е. через 3 секунды. По сути, то что нужно ;)
Вы, сударь, как всегда бесподобны :) С помощью этого я добавлю функцию очистки лог файла через нужное пользователю время в свой LogManager;)
 
D_ART, спасибо конечно ;) Но это ж всё из открытых источников :)

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

Какие использовать - зависит от того, что планируется делать. Как я понял, если планируется в задаче менять что-то на карте - то нужно использовать синхронизированные задачи. Если рассылать сообщения, отслеживать перемещения, проверять наличие/отсутствие блоков - несинхронизированные.
 
Что за асинхронные и неасинхронные ? :eek::confused:
 
Спасибо;) worldeditcui ужасно тормозит, аж на 100 тиков пришлось ставить:eek:
 
Что за асинхронные и неасинхронные ? :eek::confused:
Синхронные задачи выполняются в главном треде сервера, асинхронные - не в главном. Во втором случае много чего использовать нельзя, легко нарваться на concurrentModificationException (два потока пытаются изменить один элемент одновременно)
 
Синхронные задачи выполняются в главном треде сервера, асинхронные - не в главном. Во втором случае много чего использовать нельзя, легко нарваться на concurrentModificationException (два потока пытаются изменить один элемент одновременно)
Асинхронная задача врятли на это нарвётся при очистке содержмого лог файла :)
 

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

Назад
Верх