Помогите Таймер для обратного отчета времени.

  • Автор темы Автор темы Grazy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Grazy

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Prost
Помогите, как мне сделать таймер который-бы запускался при вводе команды. Если ввести эту команду повторно выполнялась проверка на этот таймер, и если он запущен в чат выводилось время до окончание этого таймера.
 
Помогите, как мне сделать таймер который-бы запускался при вводе команды. Если ввести эту команду повторно выполнялась проверка на этот таймер, и если он запущен в чат выводилось время до окончание этого таймера.
Java:
package me.xDark.darkAPI.time;

public class Timer {

    private long startMS;

    public Timer() {
        reset();
    }

    public void reset() {
        startMS = System.currentTimeMillis();
    }

    public long getMSPassed() {
        return (System.currentTimeMillis() - startMS);
    }

    public boolean hasMSPassed(long time) {
        return getMSPassed() >= time;
    }
}
 
Можно поподробней, как мне использовать переменные из этого класса в методе OnCommand.
 
Можно поподробней, как мне использовать переменные из этого класса в методе OnCommand.
reset - старт таймера
getMSPassed() - сколько времени прошло
hasMSPassed - сама проверка на пройденное время.
P.S.Если я всё правильно понял.
 
Ясн, мне бы примеры в самом событии OnCommand.
 
Помогите, как мне сделать таймер который-бы запускался при вводе команды. Если ввести эту команду повторно выполнялась проверка на этот таймер, и если он запущен в чат выводилось время до окончание этого таймера.
Screenshot_1.png
 
Блин, не знаю в чем проблема, но (или)
else {
p.sendMessage("Подождите" + ((col.get(p) - System.currentTimeMillis()))));
}
не работает. Выполняется лишь код что в самой проверке.
Код:
public class Rtptp implements Listener, CommandExecutor{
    Map<Player, Long> col = new WeakHashMap<Player, Long>();
  
    public boolean abs(CommandSender sender){
        if(sender instanceof Player){
            return false;
        }
        return true;
    }
    @Override
    public boolean onCommand (CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("Effect")){
            if (abs(sender)){
                return true;
            }
            Player p = (Player) sender;
            if (!col.containsKey(p) || col.get(p) < System.currentTimeMillis() || p.isOp()) {
            p.playSound(p.getLocation(), Sound.MAGMACUBE_JUMP, 1, 1);
            p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 150, 1));
            p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 150, 0));
            col.put(p, System.currentTimeMillis() + 10000);
            p.sendMessage("Все ок!");
            return true;
            } else {
                p.sendMessage("Подождите" + ((col.get(p) - System.currentTimeMillis()))));
            }
            return true;
        }
        return true;
    }
}
 
Тебе просто задержку нада? Тогда таймер тут лишний.
Java:
    static WeakHashMap<Player, Long> usertime = new WeakHashMap<Player, Long>();
    //Передаем игрока и время задержки в метод check
    //Вернет false если время не прошло.
    static boolean check(Player user, long tmp) {
        long time = System.currentTimeMillis();
        Long last = usertime.get(user);
        if(last!= null) {
            if((time-last)<tmp) {
                //Тут можно вывести остаток времени игроку.
                //user.sendMessage(...);
                return false;
            }
        }
        usertime.put(user, time);
        return true;
    }
 
Последнее редактирование:
При вводе добавляет в список, но не удаляет потом, как задать время?
Код:
    static WeakHashMap<Player, Long> col = new WeakHashMap<Player, Long>();
    long time = System.currentTimeMillis();
    int tmp = 20;
    public boolean abs(CommandSender sender){
        if(sender instanceof Player){
            return false;
        }
        return true;
    }
    @Override
    public boolean onCommand (CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase("Effect")){
            if (abs(sender)){
                return true;
            }
            Player p = (Player) sender;
            Long last = col.get(p);
            if (last!= null){
               if((time-last)<tmp) {
                  p.sendMessage("1"+  (col.get(p) - time)); // выводит вобще ноль
                   return true;
               }
            }
            col.put(p, time);
            p.sendMessage("3" +  (col.get(p) - time));
            return true;
        }
        return true;
    }
}
 
Ниче сами сделать не могут... А математики в школе сосем уже не учат.
Java:
    static WeakHashMap<Player, Long> usertime = new WeakHashMap<Player, Long>();

    static boolean check(Player user, long tmp) {
        long time = System.currentTimeMillis();
        Long last = usertime.get(user);
        if(last!= null) {
            if((time-last)<tmp) {
                user.sendMessage(tmp-(time-last)+"");
                return false;
            }
        }
        usertime.put(user, time);
        return true;
    }

Java:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] arg) {
        if(sender instanceof Player) {
            //5000 = 5 секунд.
            if(check((Player) sender, 5000)) {
                //Можно выполнять что то.
            }
        }
        return true;
    }
 
Последнее редактирование:
Да, туплю немного я сегодня. Спасибо, что помог мне) А можно еще как-то округлить 5000 к 5, получается нулики убрать.
 
Ясн, но если я умножу то и число станет больше.
Спасибо всем за помощь, я разобрался.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх