Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов 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. Хостинг MineCraft
    <
  3. Hilgert

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

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

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

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

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

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

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

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    каждый раз когда входит игрок - создавай новый таймер =)
     
  7. Автор темы
    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 нравится это.
  8. Den_Abr

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

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

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

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

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

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

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

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

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

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

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