Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Простейшие кулдауны для ваших команд

Метки:
Теги Теги
cooldowns hashmap

Будет ли данная тема полезна новичкам?

  • Да

    9 голосов 56,3%
  • Нет

    5 голосов 31,3%
  • Не знаю

    2 голосов 12,5%

AlexQFG

Новичок
Баллы
6
Имя в Minecraft
TwixGo
Решил написать этот стартап, так-как на русском языке практически ничего нету (Есть, но без нормальных пояснений). Второй причиной является то, что когда я сам начинал кодить плагины, я искал темы на русском, и, в итоге, мало чего находил. Сейчас я стал умнее и ищу все, что мне нужно, исключительно на английском. Но, как известно, многие новички вряд-ли знают английский на столько хорошо, чтобы самим читать гайды, при этом понимая, что же там написано.

Ближе к сути. В этой теме я расскажу новичкам, как-же делать простейшие(!) кулдауны.

Код:
HashMap<String, Integer> cooldown = new HashMap<String, Integer>();
boolean onCommand(CommandSender s, Command cmd, String label, String args[]){
 switch(cmd.getName().toLowerCase()){
    case "command1":
      if( cooldown.get(s.getName())!=null && cooldown.get(sender.getName())>System.currentTimeMillis() {
        s.sendMessage("Подождите 10 секунд, перед тем, как использовать команду снова");
        return true;
      }
      else сooldown.remove(s.getName());
      s.sendMessage("Это моя тестовая команда");
      cooldown.put(s.getName(), System.currentTimeMillis() + 10000);
      break;
    case "commandwithoutcooldown":
      s.sendMessage("Это моя тестовая команда без кулдауна");
      break;
  }
}
Теперь пояснения:
Код:
HashMap<String, Integer> cooldown = new HashMap<String, Integer>();
Создаем хэшмап с именем cooldown. Что такое хэшмап? Это набор значений типа ключ:объект. Вызывая ключ мы получим объект. В таких вот (<>) скобочках мы пишем типы ключа и объекта (Так-же можно использовать конструкцию <String, HashMap<String, String>>, но сейчас не об этом)

HashMap имеет несколько основных методов, которых для начала должно хватить:
put (Ключ, Объект) - Добавляет значение в хэшмап.
get (Ключ) - Вызвать ключ, после чего получим объект
remove (Ключ) - Удалить ключ вместе с объектом

Как это все работает в коде:
1. Проверяем, установлен ли кулдаун для данного игрока:
Код:
if( cooldown.get(s.getName()) != null ...
2. Проверяем, действителен ли еще наш кулдаун: (Если он все еще больше системного времени, то да)
Код:
... && cooldown.get(s.getName()) > System.currentTimeMillis()){ ...
3. Если кулдан не действителен, то удаляем его (Не обязательно)
Код:
else cooldown.remove(s.getName());
4. После выполнения всей команды создаем новый кулдаун;
Код:
cooldown.put(s.getName(), System.currentTimeMillis() + 10000);
У некоторых может возникнуть вопрос: Что за число - 10000? Все просто - это наше время в мили секундах (секунды*1000). Вместо этого числа можно использовать кастомное значемие из конфига:
Код:
cooldown.put(s.getName(), System.currentTimeMillis() + getConfig().getInt("cooldownTime"));

Эту тему я создал так же для того, чтобы новички разобрались в понятии HashMap, ведь в начале для меня это было что-то заоблачное.

Это, в принципе, и все. Не так уж и трудно, да? Я знаю, что лучше делать кулдауны через scheduler, но для новичков в кодинге на баките и такого будет достаточно.
 
Последнее редактирование:
Создавать HashMap надо вне метода, а так он будет перезаписываться каждый раз, нет?
 
.toLowerCase() а проверяешь на myCommand1, чуток заплутать можно
 
Последнее редактирование:
Нате вам.

Код:
    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) {
                return false;
            }
        }
        usertime.put(user, time);
        return true;
    }
Где ретурн false можно отправлять сообщение игроку.
 
*facepalm*
Держите нормальные классы, а не это:
CoolDownManager.java https://pastebin.com/dFvA7mVt
CoolDown.java https://pastebin.com/bPJiGSe0
Конечно, спасибо за классы, но тупо копипастом ничему научиться не получится. Чтобы узнать что-то новое человек должен сам это искать и впихивать в свой код.
Я эту тему писал не для "топ" кодеров, а для новичков.
 

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

Назад
Верх