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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Ryazha_, 5 фев 2022.

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

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

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

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
  3. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
  4. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_

    Вложения:

  5. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Далее я создам отдельные классы для меню и Листов ну нормальна кроч
     
  6. MurlikMurlik

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

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    я в принципе ничего из этого не понял, переведи пожалуйста для меня на русский
     
  8. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    Если можно - пример или документацию
     
  9. MurlikMurlik

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

    Баллы:
    96
    Вот пример.

    Код:
    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.
     
  10. Zuif

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

    Баллы:
    76
    выглядит очень страшно)))
     
  11. Автор темы
    Ryazha_

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

    Баллы:
    76
    Имя в Minecraft:
    Ryazha_
    спс за совет
     
  12. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Создавать полноценный класс, чтобы вызвать шедуллер как-то смысла особо нет. В некоторых ситуациях подойдёт Bukkit.getScheduler().runTask..., но в некоторых проще работать с new BukkitRunnable().
    Документация к каждому методу шедуллера более чем доступна, поэтому сложности особо не должно быть.
     
  13. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    BukkitRunnable стоит использовать лишь в том случае, если таск необходимо будет отменить внутри себя
     
  14. alexandrage

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

    Баллы:
    173
    Да почему же? Просто меньше кода писать будешь, в любой ситуации полезно.
     
  15. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Нужен только для отмены.
    В остальных случаях удобней использовать Bukkit.getScheduler() с раннейблом или лямбдой
     

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