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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Grazy, 27 май 2017.

Статус темы:
Закрыта.
  1. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Помогите, как мне сделать таймер который-бы запускался при вводе команды. Если ввести эту команду повторно выполнялась проверка на этот таймер, и если он запущен в чат выводилось время до окончание этого таймера.
     
  2. Хостинг MineCraft
    <
  3. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Код:
    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;
        }
    }
     
  4. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Можно поподробней, как мне использовать переменные из этого класса в методе OnCommand.
     
  5. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    reset - старт таймера
    getMSPassed() - сколько времени прошло
    hasMSPassed - сама проверка на пройденное время.[DOUBLEPOST=1495883832,1495883618][/DOUBLEPOST]P.S.Если я всё правильно понял.
     
  6. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Ясн, мне бы примеры в самом событии OnCommand.
     
  7. demkom

    demkom Администратор Пользователь

    Баллы:
    76
    Skype:
    demkom1983
    Имя в Minecraft:
    G_demkom_G
    [​IMG]
     
  8. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Блин, не знаю в чем проблема, но (или)
    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;
        }
    }
    
     
  9. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Тебе просто задержку нада? Тогда таймер тут лишний.
    Код:
        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;
        }
     
    Последнее редактирование: 27 май 2017
  10. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    При вводе добавляет в список, но не удаляет потом, как задать время?
    Код:
        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;
        }
    }
    
     
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ниче сами сделать не могут... А математики в школе сосем уже не учат.
    Код:
        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;
        }
    Код:
        @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;
        }
     
    Последнее редактирование: 27 май 2017
  12. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Да, туплю немного я сегодня. Спасибо, что помог мне) А можно еще как-то округлить 5000 к 5, получается нулики убрать.
     
  13. demkom

    demkom Администратор Пользователь

    Баллы:
    76
    Skype:
    demkom1983
    Имя в Minecraft:
    G_demkom_G
    Умножай tmp на 1000, или ты даже такого понять не можешь?
    Иди учи Яву...
     
  14. Автор темы
    Grazy

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

    Баллы:
    76
    Имя в Minecraft:
    Prost
    Ясн, но если я умножу то и число станет больше.[DOUBLEPOST=1495915934,1495907605][/DOUBLEPOST]Спасибо всем за помощь, я разобрался.
     
Статус темы:
Закрыта.

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