Помогите Как сделать Delay на команду?

Статус
Закрыто для дальнейших ответов.

Conorfish

Активный участник
Пользователь
Баллы
76
Нужно сделать delay на команду.
Вводишь команду, следующий раз можешь ее вести только через сколько-то милисекунд.
Помогите в реализации. Спасибо

Плагины на delay не предлогать
 
Код:
public class CooldownManager {
    public static HashMap<String, Cooldown> cooldowns = new HashMap<>();

    public static void setCooldown(String player, String value, int time) {
        double delay = System.currentTimeMillis() + time;
        cooldowns.put(player + value, new Cooldown(player, value, delay));
    }

    public static String getCooldown(String player, String value) {
        return String.format("%.1f", (cooldowns.get(player + value).getTime() - System.currentTimeMillis()) / 1000);
    }

    public static boolean hasCooldown(String player, String value) {
        String pv = player + value;
        if(!cooldowns.containsKey(pv) || cooldowns.get(pv).getTime() <= System.currentTimeMillis()) {
            cooldowns.remove(pv);
            return false;
        }
        return true;
    }

    private static class Cooldown {
        private final String player;
        private final String value;
        private final double time;
        public Cooldown(String player, String value, double time) {
            this.player = player;
            this.value = value;
            this.time = time;
        }
        public String getPlayer() {
            return player;
        }
        public String getValue() {
            return value;
        }
        public double getTime() {
            return time;
        }
    }
}

Потом после ввода команды:

Код:
if(CooldownManager.hasCooldown(player.getName(), "command"))
    player.sendMessage(Util.colored(instance.getMessages().getString("command_cooldown")
            .replaceAll("%sec%", String.valueOf(CooldownManager.getCooldown(player.getName(), "command")))));
    event.setCancelled(true);
    return;
}
CooldownManager.setCooldown(player.getName(), "command", instance.getConfig().getInt("Settings.cooldown_time"));
 
Код:
public class CooldownManager {

public static HashMap<String, Cooldown> cooldowns = new HashMap<>();

public static void setCooldown(String player, String value, int time) {
    double delay = System.currentTimeMillis() + time;
    cooldowns.put(player + value, new Cooldown(player, value, delay));
}

public static String getCooldown(String player, String value) {
    return String.format("%.1f", (cooldowns.get(player + value).getTime() - System.currentTimeMillis()) / 1000);
}

public static boolean hasCooldown(String player, String value) {
    String pv = player + value;
    if(!cooldowns.containsKey(pv) || cooldowns.get(pv).getTime() <= System.currentTimeMillis()) {
        cooldowns.remove(pv);
        return false;
    }
    return true;
}

    private static class Cooldown {

        private final String player;
        private final String value;
        private final double time;

        public Cooldown(String player, String value, double time) {
            this.player = player;
            this.value = value;
            this.time = time;
        }

        public String getPlayer() {
            return player;
        }

        public String getValue() {
            return value;
        }

        public double getTime() {
            return time;
        }

    }

}

Потом после ввода команды:

Код:
if(CooldownManager.hasCooldown(player.getName(), "command")) {
            player.sendMessage(Util.colored(instance.getMessages().getString("command_cooldown")
                    .replaceAll("%sec%", String.valueOf(CooldownManager.getCooldown(player.getName(), "command")))));
            event.setCancelled(true);
            return;
        }
        CooldownManager.setCooldown(player.getName(), "command", instance.getConfig().getInt("Settings.cooldown_time"));
Перед окончанием действия команды надо 2 код вставить?
 
Спасибо, больше не нужно.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх