Помогите Как сделать, чтобы команду можно было юзать раз в пять минут?

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

kovand

Участник
Пользователь
Баллы
36
Имя в Minecraft
1kovand1
Я пишу свой плагин на рандомтп, мне надо чтобы телепортироваться можно было только раз в пять минут
 
Я бы сделал просто.
Создаёшь HashSet<Player>.
Когда игрок вводит УСПЕШНО команду (мало ли он без аргументов ввёл), то заносишь его в этот лист и запускаешь задачу с задержкой на время, через которое этого игрока удалить нужно с этого листа. Ну и конечно же перед вводом команды проверяешь, есть ли игрок в этом листе или нет. Если есть, то задача его ещё не удалила, а значит установленное время ещё не прошло. И говоришь ему мол гуляй.
 
Я бы сделал просто.
Создаёшь HashSet<Player>.
Когда игрок вводит УСПЕШНО команду (мало ли он без аргументов ввёл), то заносишь его в этот лист и запускаешь задачу с задержкой на время, через которое этого игрока удалить нужно с этого листа. Ну и конечно же перед вводом команды проверяешь, есть ли игрок в этом листе или нет. Если есть, то задача его ещё не удалила, а значит установленное время ещё не прошло. И говоришь ему мол гуляй.
А как посмотреть время оставшееся до разблокировки команды?
 
А как посмотреть время оставшееся до разблокировки команды?
Тогда хеш мап юзай и никаких тасков не надов. Имя игрока и время последнего юзания в этот массив кидай.
 
Посмотри в essentials. Там есть и таймеры и задершки, датадифф и датаформат.
 
Посмотри в essentials. Там есть и таймеры и задершки, датадифф и датаформат.
Это оно?
Java:
  public void cooldown(boolean check)
    throws Exception
  {
    Calendar time = new GregorianCalendar();
    if (this.teleportOwner.getLastTeleportTimestamp() > 0L)
    {
      double cooldown = this.ess.getSettings().getTeleportCooldown();
      Calendar earliestTime = new GregorianCalendar();
      earliestTime.add(13, -(int)cooldown);
      earliestTime.add(14, -(int)(cooldown * 1000.0D % 1000.0D));
 
      long earliestLong = earliestTime.getTimeInMillis();
 
      Long lastTime = Long.valueOf(this.teleportOwner.getLastTeleportTimestamp());
      if (lastTime.longValue() > time.getTimeInMillis())
      {
        this.teleportOwner.setLastTeleportTimestamp(time.getTimeInMillis());
        return;
      }
      if ((lastTime.longValue() > earliestLong) && (!this.teleportOwner.isAuthorized("essentials.teleport.cooldown.bypass")))
      {
        time.setTimeInMillis(lastTime.longValue());
        time.add(13, (int)cooldown);
        time.add(14, (int)(cooldown * 1000.0D % 1000.0D));
        throw new Exception(I18n.tl("timeBeforeTeleport", new Object[] { DateUtil.formatDateDiff(time.getTimeInMillis()) }));
      }
    }
    if (!check) {
      this.teleportOwner.setLastTeleportTimestamp(time.getTimeInMillis());
    }
  }
 
Последнее редактирование:
Это оно?
Java:
  public void cooldown(boolean check)
    throws Exception
  {
    Calendar time = new GregorianCalendar();
    if (this.teleportOwner.getLastTeleportTimestamp() > 0L)
    {
      double cooldown = this.ess.getSettings().getTeleportCooldown();
      Calendar earliestTime = new GregorianCalendar();
      earliestTime.add(13, -(int)cooldown);
      earliestTime.add(14, -(int)(cooldown * 1000.0D % 1000.0D));

      long earliestLong = earliestTime.getTimeInMillis();

      Long lastTime = Long.valueOf(this.teleportOwner.getLastTeleportTimestamp());
      if (lastTime.longValue() > time.getTimeInMillis())
      {
        this.teleportOwner.setLastTeleportTimestamp(time.getTimeInMillis());
        return;
      }
      if ((lastTime.longValue() > earliestLong) && (!this.teleportOwner.isAuthorized("essentials.teleport.cooldown.bypass")))
      {
        time.setTimeInMillis(lastTime.longValue());
        time.add(13, (int)cooldown);
        time.add(14, (int)(cooldown * 1000.0D % 1000.0D));
        throw new Exception(I18n.tl("timeBeforeTeleport", new Object[] { DateUtil.formatDateDiff(time.getTimeInMillis()) }));
      }
    }
    if (!check) {
      this.teleportOwner.setLastTeleportTimestamp(time.getTimeInMillis());
    }
  }
Ну да ты на правильном пути. Там есть и сами шедулеры и проверка на движение и тд и тп.
DateUtil.formatDateDiff тут приводит в читабельный вид уникс тиме. Хотя оно не совсем корректно на русском языке, но не суть.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх