Войти или зарегистрироваться

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

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

_DokeR_

Старожил
Пользователь
Баллы
103
Имя в Minecraft
SuperDoker
Как сделать допустим, если человек сломал блок то через 10 секунд убить его. Тут интересует именно как отсчитать 10 секунд
 
Кстати, присоединяюсь к воросу, тоже интересно.
...
Мои догадки: запомнить количество тиков на данный момент, добавить 200, запустить цикл, который будет постоянно проверять тики и что то ещё делать... Вот только как их проверять...
 
Запустить шедулер
Код:
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
// действия
}
}, 20L * 10);
 
а как получить значения сколько времени осталось до конца?
 
а как получить значения сколько времени осталось до конца?
Класс 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));
 
Назад
Верх