1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Передать параметр в таймер.

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Здравствуйте.
    Сделал таймер :)
    Код:
    Timer timer=new Timer(15000, new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  //Послать сообщение игроку
                   timer.stop();
              }
          });
    
    В PlayerJoinEvent вызываю timer.start(), чтобы через 15 секунд игрок получил сообщение. Но как передать ник игрока? Ведь из таймера не получится вызвать event.getPlayer().getName().
     
    KoBoT нравится это.
  2. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Напиши в самом верху кода(внутри класса :D)
    Код:
    public final String playername;
    Потом в PlayerJoinEvent напиши:
    Код:
    playername = event.getPlayer().getName();
    а в таймере playername - имя игрока.
     
  3. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Можно ещё не таймером, а шедулером пользоваться, запостив ему Runnable на запуск через 15*20 тиков, тогда оно будет синхронно вызвано и внутри него просто используй event.getPlayer().getName(). И event в прототипе метода сделать конечно final.
     
  4. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Так это и логично. Меня смутило вот что - если во время тех 15 секунд, которые идут пока игроку не напишет сообщение зайдет еще один игрок. Что станет с playername?
     
    Последнее редактирование: 7 фев 2014
    KoBoT нравится это.
  5. Hilgert

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    каждый раз когда входит игрок - создавай новый таймер =)
     
  6. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Если я прямо так сделаю - каждый раз будет новый таймер создаваться?
    Код:
    @EventHandler
          public void onJoin(PlayerJoinEvent event){           
               final String name = event.getPlayer().getName();
               new Timer(15000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Bukkit.broadcastMessage("Игрок " + name + " зашел на сервер 15 секунд назад!");
                }
              });
           }
    
    Тогда еще не понятно как его остановить :confused:
     
    KoBoT нравится это.
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Не понятно, зачем использовать какой то непонятный Timer, когда есть ScheduledTask?
     
    ql_Nik_lp нравится это.
  8. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    У меня не получается его останавливать. Мне надо, чтобы 1 раз написало и все.
    А там нет ни close(), ни stop(), точнее, я не нашел =)
     
    KoBoT нравится это.
  9. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    runTaskLater(..., 15000);
     
    Hilgert и Iggi нравится это.
  10. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Оно выполнится 1 раз?
     
    KoBoT нравится это.
  11. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Да, через нужное время.
     
    Iggi нравится это.

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