- Баллы
- 66
Здравствуйте уважаемые жители этого форума
, во время разработки плагинов, я столкнулся с 3-мя вопросами.
1) А собственно, Bukkit это класс, getPluginManager() - метод, но как метод, может иметь еще один метод при себе? Разве поле может иметь такие скобки ()?
2) При регистрации, я создаю экземпляр класса new Handler(). Для каждого игрока, создается свой Handler, или он создается для всех один, при запуске сервера, а евенты вызываются в этом созданном, но для каждого свои?
3) Вытекает из 2-го, есть плагин на респавн. После смерти, игрок должен подождать 5 секунд, чтобы возрадиться, но у донатера уменьшена эта задержка. У меня есть класс Handler, его поле delay, сразу равно 5-ти. В смертельном евенте, я проверяю, если игрок донатер delay = delay - 3; Если нет, ничего. Потом запускаю шедулер, где указываю время респавна в delay. И еще шедулер, который каждые 20-ть тиков оповещает, сколько осталость до возраждения, но из-за багов, я начал подозревать, что если 2-игрока умерли, то delay донатера, может перебить делай игрока, и у игрока станет delay 2. Тоесть, я подозреваю, что delay меняется на тот, который я указал последним, и даже в запущенном шедулере, берется именно последний указаный.
Вот код для наглядности:
Код писал здесь, если не понятна суть вопроса, постараюсь обьяснить иначе.
, во время разработки плагинов, я столкнулся с 3-мя вопросами.1) А собственно, Bukkit это класс, getPluginManager() - метод, но как метод, может иметь еще один метод при себе? Разве поле может иметь такие скобки ()?
2) При регистрации, я создаю экземпляр класса new Handler(). Для каждого игрока, создается свой Handler, или он создается для всех один, при запуске сервера, а евенты вызываются в этом созданном, но для каждого свои?
3) Вытекает из 2-го, есть плагин на респавн. После смерти, игрок должен подождать 5 секунд, чтобы возрадиться, но у донатера уменьшена эта задержка. У меня есть класс Handler, его поле delay, сразу равно 5-ти. В смертельном евенте, я проверяю, если игрок донатер delay = delay - 3; Если нет, ничего. Потом запускаю шедулер, где указываю время респавна в delay. И еще шедулер, который каждые 20-ть тиков оповещает, сколько осталость до возраждения, но из-за багов, я начал подозревать, что если 2-игрока умерли, то delay донатера, может перебить делай игрока, и у игрока станет delay 2. Тоесть, я подозреваю, что delay меняется на тот, который я указал последним, и даже в запущенном шедулере, берется именно последний указаный.
Вот код для наглядности:
Код:
short delay = 5;
@EventHandler
public void onDeath(PlayerDeathEvent event) {
if(player.permission("vip")) delay = delay - 2;
runScheduler.ScheduleSyncDelayedTask( -> bla bla, delay)
runScheduler.ScheduleSyncRepeatingTask( -> {
message(вам осталось до репса delay);
delay = delay - 1;
}, delay, delay)
}
Код писал здесь, если не понятна суть вопроса, постараюсь обьяснить иначе.