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

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

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().
 
Напиши в самом верху кода(внутри класса :D)
Код:
public final String playername;
Потом в PlayerJoinEvent напиши:
Код:
playername = event.getPlayer().getName();
а в таймере playername - имя игрока.
 
Можно ещё не таймером, а шедулером пользоваться, запостив ему Runnable на запуск через 15*20 тиков, тогда оно будет синхронно вызвано и внутри него просто используй event.getPlayer().getName(). И event в прототипе метода сделать конечно final.
 
Напиши в самом верху кода(внутри класса :D)
Код:
public final String playername;
Потом в PlayerJoinEvent напиши:
Код:
playername = event.getPlayer().getName();
а в таймере playername - имя игрока.
Так это и логично. Меня смутило вот что - если во время тех 15 секунд, которые идут пока игроку не напишет сообщение зайдет еще один игрок. Что станет с playername?
 
Последнее редактирование:
Так это и логично. Меня смутило вот что - если во время тех 15 секунд, которые идут пока игроку не напишет сообщение зайдет еще один игрок. Что станет с playername?
каждый раз когда входит игрок - создавай новый таймер =)
 
каждый раз когда входит игрок - создавай новый таймер =)
Если я прямо так сделаю - каждый раз будет новый таймер создаваться?
Код:
@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 секунд назад!");
            }
          });
       }
Тогда еще не понятно как его остановить o_O
 
Если я прямо так сделаю - каждый раз будет новый таймер создаваться?
Код:
@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:
Не понятно, зачем использовать какой то непонятный Timer, когда есть ScheduledTask?
 
Не понятно, зачем использовать какой то непонятный Timer, когда есть ScheduledTask?
У меня не получается его останавливать. Мне надо, чтобы 1 раз написало и все.
А там нет ни close(), ни stop(), точнее, я не нашел =)
 

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

Назад
Верх