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

[Решено] Задержка между сообщениями в PlayerPickupItemEvent

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

  1. Автор темы
    _Timoxa_

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

    Баллы:
    76
    Имя в Minecraft:
    T1MOX4
    Доброй ночи.
    Я только начал разбираться в яве, и сам не смог в этом разобраться.
    Суть проблемы:
    В плагине NoFlyPvP нет задержки между сообщениями когда игрок с режимом полёта подходит к лежащему на земле предмету, и идет лишний спам в чате.
    Как мне добавить задержку между сообщениями допустим в 3 секунды ?

    PHP:
    @EventHandler
      
    public void onPlayerPickupItem(PlayerPickupItemEvent event)
      {
        if ((
    event.getPlayer().getAllowFlight()) && (Settings.pickUpItemBlocked()) && (!event.getPlayer().hasPermission("noflypvp.exempt.pickupitem")))
        {
          
    String warningMsg Settings.getPickUpItemWarningMsg();
          
    String disableMsg Settings.getPickUpItemDisableMsg();
          if ((
    warningMsg != "") && (warningMsg.length() > 0)) {
            
    noflypvp.sendMsg(event.getPlayer(), "PickUpItemWarning"warningMsg);
          }
          if ((
    disableMsg != "") && (disableMsg.length() > 0)) {
            
    noflypvp.sendMsg(event.getPlayer(), "PickUpItemDisable"disableMsg);
          }
          
    event.getPlayer().updateInventory();
          
    event.setCancelled(true);
        }
      }
     
  2. Хостинг MineCraft
    <
  3. XjCyan1de

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

    Баллы:
    76
    Имя в Minecraft:
    XjCyan1de
    Как вариант это сообщение можно выводить на титл, а если с сообщением то делаем так:
    Во время эвента добавляем игрока в хэшмап и в onEnable сделать шедулер который будет отправлять сообщение игрокам в хэшмапе, а затем их удалять от туда.

    Возможно это говнокод и есть варианты лучше, но это то что пришло мне в голову
     
  4. Автор темы
    _Timoxa_

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

    Баллы:
    76
    Имя в Minecraft:
    T1MOX4
    Спасибо.
    Желательно бы написать хоть примерно что да как, так как я совсем не знаю функций баккита :)
     
  5. Blc_Dragon

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Перефразируем:

     
  6. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Вот пример класса с отправкой сообщений с задержкой:
    Код:
    import java.util.concurrent.TimeUnit;
    
    import org.bukkit.command.CommandSender;
    
    import com.google.common.cache.Cache;
    import com.google.common.cache.CacheBuilder;
    
    public final class LatencyMessageSender
    {
        private final Cache<CommandSender, Object> cache;
    
        public LatencyMessageSender(long latency)
        {
            this.cache = CacheBuilder.newBuilder().weakKeys().expireAfterWrite(latency, TimeUnit.SECONDS).build();
        }
    
        public boolean sendMessage(CommandSender sender, String message)
        {
            if (this.cache.getIfPresent(sender) != null)
                return false;
    
            sender.sendMessage(message);
            this.cache.put(sender, new Object());
            return true;
        }
    }
     
  7. Qmaks

    Qmaks Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    Лол, я даже не знал о таких классах :/
    Я бы сделал через new Thread...Thread.sleep
     
  8. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    +1 Что там стоит заюзать целую либу ради мапы :D.
     
  9. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Если Google Guava идёт в комплекте с сервером, то почему бы её не использовать (как и многие другие плюшки)?
     
  10. Автор темы
    _Timoxa_

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

    Баллы:
    76
    Имя в Minecraft:
    T1MOX4
    Не совсем так, я вчера часа полтора пытался сделать, но ничего не вышло.
    И я действительно пока плохо знаком с явой.
     
  11. Qmaks

    Qmaks Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Qmaks
    В общем-то можно, но я о таких даже не знал)
     
  12. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Я тоже раньше не знал, но, когда пару раз столкнулся с подобными необычными штуками, заинтересовался и решил ознакомиться с содержимым нескольких библиотек. Теперь вот пользуюсь. :)
     
  13. GoodCoder

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

    Баллы:
    76
    Я бы создал map, где хранил бы время отправки последнего сообщения.
     
  14. Автор темы
    _Timoxa_

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

    Баллы:
    76
    Имя в Minecraft:
    T1MOX4
    Всем спасибо, я попытался сделать задержку, но я такой рукопоп что полезли ошибки из других мест.
    В общем я забил на это и нашел аналог
    http://rubukkit.org/threads/admn-se...kontrol-tvorcheskogo-rezhima-1-7-1-11.106125/

    Но все же мне было интересно почитать разные способы реализации задержки отправки сообщений.
     
  15. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Да оно все сводится к мапе с часиками, только в разных обертках. Ну или глобальной переменной для общего интервала всем игрокам.
     

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