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

Отсчёт времени.

Тема в разделе "Разработка плагинов для новичков", создана пользователем _DokeR_, 23 сен 2013.

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

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

    Баллы:
    103
    Skype:
    gta-ilya
    Имя в Minecraft:
    SuperDoker
    Как сделать допустим, если человек сломал блок то через 10 секунд убить его. Тут интересует именно как отсчитать 10 секунд
     
  2. Sasha2dx

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

    Баллы:
    88
    Имя в Minecraft:
    Sasha2dx
    Кстати, присоединяюсь к воросу, тоже интересно.
    ...
    Мои догадки: запомнить количество тиков на данный момент, добавить 200, запустить цикл, который будет постоянно проверять тики и что то ещё делать... Вот только как их проверять...
     
  3. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Запустить шедулер
    Код:
    getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    @Override
    public void run() {
    // действия
    }
    }, 20L * 10);
     
    AngryLogic, DavidShabaev и Sasha2dx нравится это.
  4. Автор темы
    _DokeR_

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

    Баллы:
    103
    Skype:
    gta-ilya
    Имя в Minecraft:
    SuperDoker
    а как получить значения сколько времени осталось до конца?
     
  5. gamelax

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

    Баллы:
    103
    Имя в Minecraft:
    gamelax
    Класс MinecraftServer хранит у себя значение текущего тика (MinecraftServer.currentTick), 20 тиков - секунда (стоит помнить, что при фризе сервера более чем на 2 секунды, выполнится только 40 тиков).

    Если необходимо на протяжении всего времени информировать, то лучше уж запустить повторяющийся Scheduler, передать ему класс с реализацией интерфейса Runnable, в котором и будет вывод информации и собственное завершение по окончанию.
    К счастью, для Вас, у меня нашлась лишняя минутка на написание примера.

    Класс SimpleScheduler:
    Код:
    import org.bukkit.entity.Player;
    import org.bukkit.scheduler.BukkitScheduler;
     
    public class SimpleScheduler implements Runnable
    {
     
        private int schedulerID, ticksLeft;
        private BukkitScheduler bukkitScheduler;
        private Player target;
     
        public SimpleScheduler(BukkitScheduler bukkitScheduler, Player target, int ticksAmount)
        {
            this.bukkitScheduler = bukkitScheduler;
            this.target = target;
            this.ticksLeft = ++ticksAmount;
            this.schedulerID = -1;
        }
     
        public void setSchedulerID(int schedulerID)
        {
            this.schedulerID = schedulerID;
        }
     
        @Override
        public void run()
        {
            if (--this.ticksLeft == 0)
            {
                /*
                * Do something
                */
                this.bukkitScheduler.cancelTask(this.schedulerID);
            }
            else
            {
                this.target.sendMessage(new StringBuilder().append("Осталось ").append(Integer.toString(this.ticksLeft)).append(" сек.").toString());
            }
        }
    }
    
    Входные параметры:
    - BukkitScheduler;
    - Player (цель);
    - Количество тиков для отсчета.

    Пример запуска:
    Код:
    SimpleScheduler simpleScheduler = new SimpleScheduler(this.getServer().getScheduler(), (Player)null, 10);
    simpleScheduler.setSchedulerID(this.getServer().getScheduler().scheduleSyncRepeatingTask(this, simpleScheduler, 0L, 20L));
    
     
    ql_Nik_lp, Sasha2dx и Den_Abr нравится это.

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