Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Шедулеры

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mr_RoboMan, 10 июн 2016.

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

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

    Баллы:
    123
    В общем, суть такова, есть список чисел (1, 1, 1, 2, 2, 3 например)
    Я не знаю длину списка, я не знаю значений (юзвер сам настраивает),
    и мне надо запускать метод (допустим method()) каждый раз через промежуток времени (следующее число в списке)!
    т.е. для списка выше шедулер должен запускаться через: 1 секунду, 1 секунду, 1 секунду, 2 секунды, 2 секунды, 3 секунды.
    Есть ли какая-то черная магия для данной задачи?
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
            for (int i=0; i < spisok.size(); i++) {
                int t = spisok.get(i);
                Bukkit.getScheduler().runTaskLater(this, new Runnable() {
                    @Override
                    public void run() {
                        start();
                    }
                }, t*20);
            }
    Попробуй это доработать.
     
  4. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Да, я тоже думал про что-то вроде такого... Но если именно так - то шедулеры все-равно будут исполнятся в одно время.. Буду думать)
     
  5. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Код:
    int nextDelay = 0;
    
    for(int i : list)
    {
        Bukkit.getScheduler().runTaskLater(plugin, new Runnable()
            {
                @Override
                public void run()
                {
                    method();
                }
            }, (nextDelay + i) * 20);
           
        nextDelay += i;
    }
    
     
  6. Автор темы
    Mr_RoboMan

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

    Баллы:
    123
    Я сделал немного по другому (раньше чем увидел новое сообщение) но вышло почти тоже самое)
    Код:
    List<Integer> changing_delay = getConfig().getIntegerList("GUI.changing_delay");
            int allTime = 0;
            for (Integer delay : changing_delay) {
                allTime += delay;
                Bukkit.getScheduler().runTaskLater(this, () -> {
                    doSmth();
                }, allTime);
            }
     

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