Помогите как работает run Task Timer?

  • Автор темы Автор темы Ryazha_
  • Дата начала Дата начала

Ryazha_

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Ryazha_
Delay - время перед запуском, а Period - время перед повторением запуска? Ну допустим я хочу чтобы через 1 секунду у меня было выполнено действие, но не хочу чтобы это повторялось, для этого мне нужно в периоде просто поставить ноль? Или как?
 

Вложения

  • Снимок экрана (1326).png
    Снимок экрана (1326).png
    244 КБ · Просмотры: 29
Далее я создам отдельные классы для меню и Листов ну нормальна кроч
 
а... в чём проблема?
1. Тебе надо менять подход. Если ты хотел сделать анимацию поиска, это точно делается не так. (вложенные анонимные классы для анимации это дикий говнокод)
2. this ссылается на текущий экземпляр, соответственно, когда ты его вызываешь внутри анонимного класса, он подразумевает объект этого анонимного класса. До создания анонимного класса создай переменную которая имеет ссылку на главный класс плагина и передай эту переменную тому методу. Или создай статический метод, который будет возвращать ссылку на главный класс.

Лучше создай класс, унаследуй BukkitRunnable, объяви переменную счета, и в методу run() инкрементируй ее, и в зависимости от числа счета, меняй количество точек в тексте "поиск". А когда поиск "закончился", просто отменяй задачу, вызвав метод cancel().
 
1. Тебе надо менять подход. Если ты хотел сделать анимацию поиска, это точно делается не так. (вложенные анонимные классы для анимации это дикий говнокод)
2. this ссылается на текущий экземпляр, соответственно, когда ты его вызываешь внутри анонимного класса, он подразумевает объект этого анонимного класса. До создания анонимного класса создай переменную которая имеет ссылку на главный класс плагина и передай эту переменную тому методу. Или создай статический метод, который будет возвращать ссылку на главный класс.

Лучше создай класс, унаследуй BukkitRunnable, объяви переменную счета, и в методу run() инкрементируй ее, и в зависимости от числа счета, меняй количество точек в тексте "поиск". А когда поиск "закончился", просто отменяй задачу, вызвав метод cancel().
я в принципе ничего из этого не понял, переведи пожалуйста для меня на русский
 
Если можно - пример или документацию
 
Если можно - пример или документацию
Вот пример.

Код:
public class TimerTask extends BukkitRunnable {

private final Player player;

//Объяви переменную с числом
private int count = 0;

//Конструктор, в котором передается ссылка на игрока с которым надо работать
public TimerTask(Player player) {
this.player = player;
}

@Override
//Этот метод вызывается каждый раз когда срабатывает таймер
public void run() {
//Прибавляй число или работай с ним, чтобы в зависимости от числа выводить нужный текст
count++;

//Отправляешь этому игроку тайтл или что угодно
this.player.sendTitle("text1 " + this.count, "text2", 20, 20, 20);

if (любое условие) {
//Прерывает таймер
cancel();
}
}

}


//Создай экземпляр там где надо и передай туда ссылку на игрока
TimerTask task = new TimerTask(Bukkit.getPlayer("игрок")):
//Запускай задачу. 20 тиков это одна секунда.
task.runTaskTimer(ссылка_на_плагин, 20, 20);


Если даже после этого ничего не понятно, тебе стоит изучать что такое ООП в Java.
 
Вот пример.

Код:
public class TimerTask extends BukkitRunnable {

private final Player player;

//Объяви переменную с числом
private int count = 0;

//Конструктор, в котором передается ссылка на игрока с которым надо работать
public TimerTask(Player player) {
this.player = player;
}

@Override
//Этот метод вызывается каждый раз когда срабатывает таймер
public void run() {
//Прибавляй число или работай с ним, чтобы в зависимости от числа выводить нужный текст
count++;

//Отправляешь этому игроку тайтл или что угодно
this.player.sendTitle("text1 " + this.count, "text2", 20, 20, 20);

if (любое условие) {
//Прерывает таймер
cancel();
}
}

}


//Создай экземпляр там где надо и передай туда ссылку на игрока
TimerTask task = new TimerTask(Bukkit.getPlayer("игрок")):
//Запускай задачу. 20 тиков это одна секунда.
task.runTaskTimer(ссылка_на_плагин, 20, 20);


Если даже после этого ничего не понятно, тебе стоит изучать что такое ООП в Java.
спс за совет
 
Вот пример.

Код:
public class TimerTask extends BukkitRunnable {

private final Player player;

//Объяви переменную с числом
private int count = 0;

//Конструктор, в котором передается ссылка на игрока с которым надо работать
public TimerTask(Player player) {
this.player = player;
}

@Override
//Этот метод вызывается каждый раз когда срабатывает таймер
public void run() {
//Прибавляй число или работай с ним, чтобы в зависимости от числа выводить нужный текст
count++;

//Отправляешь этому игроку тайтл или что угодно
this.player.sendTitle("text1 " + this.count, "text2", 20, 20, 20);

if (любое условие) {
//Прерывает таймер
cancel();
}
}

}


//Создай экземпляр там где надо и передай туда ссылку на игрока
TimerTask task = new TimerTask(Bukkit.getPlayer("игрок")):
//Запускай задачу. 20 тиков это одна секунда.
task.runTaskTimer(ссылка_на_плагин, 20, 20);


Если даже после этого ничего не понятно, тебе стоит изучать что такое ООП в Java.
Создавать полноценный класс, чтобы вызвать шедуллер как-то смысла особо нет. В некоторых ситуациях подойдёт Bukkit.getScheduler().runTask..., но в некоторых проще работать с new BukkitRunnable().
Документация к каждому методу шедуллера более чем доступна, поэтому сложности особо не должно быть.
 
Создавать полноценный класс, чтобы вызвать шедуллер как-то смысла особо нет. В некоторых ситуациях подойдёт Bukkit.getScheduler().runTask..., но в некоторых проще работать с new BukkitRunnable().
Документация к каждому методу шедуллера более чем доступна, поэтому сложности особо не должно быть.
BukkitRunnable стоит использовать лишь в том случае, если таск необходимо будет отменить внутри себя
 
Да почему же? Просто меньше кода писать будешь, в любой ситуации полезно.
Нужен только для отмены.
В остальных случаях удобней использовать Bukkit.getScheduler() с раннейблом или лямбдой
 
Назад
Верх