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

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

Discussion in 'Разработка плагинов для новичков' started by Grazy, May 27, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    Grazy

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

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

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Code:
    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 Активный участник Пользователь

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

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

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

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

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

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

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Prost
    Блин, не знаю в чем проблема, но (или)
    else {
    p.sendMessage("Подождите" + ((col.get(p) - System.currentTimeMillis()))));
    }
    не работает. Выполняется лишь код что в самой проверке.
    Code:
    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 Администратор

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Prost
    При вводе добавляет в список, но не удаляет потом, как задать время?
    Code:
        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 Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ниче сами сделать не могут... А математики в школе сосем уже не учат.
    Code:
        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;
        }
    Code:
        @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;
        }
     
    Last edited: May 27, 2017
  12. Автор темы
    Grazy

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

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

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

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Prost
    Ясн, но если я умножу то и число станет больше.[DOUBLEPOST=1495915934,1495907605][/DOUBLEPOST]Спасибо всем за помощь, я разобрался.
     
Thread Status:
Not open for further replies.

Share This Page