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

Помогите Глобальные таймеры

Тема в разделе "Разработка плагинов для новичков", создана пользователем DevAngel, 31 июл 2015.

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

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

    Баллы:
    66
    Имя в Minecraft:
    LifeAngel
    Суть задачи в чем: когда игрок заходит на сервер должен запустится таймер из функции onJoin. Нужно сделать так, что бы из функции onLeave можно было этот таймер убить. Сталкивался кто с такой проблемой?
     
  2. Хостинг MineCraft
    <
  3. leonmark061

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

    Баллы:
    76
    Так а в чем проблема? Есть несколько способов сделать таймер. Один из них - Bukkit Scheduler.
    В onJoin создаете таск(BukkitScheduler#scheduleAsyncRepeatingTask)
    и присваеваете его к переменной типа int. В onLeave отменяете таск с идом, который получили из onJoin
     
  4. Автор темы
    DevAngel

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

    Баллы:
    66
    Имя в Minecraft:
    LifeAngel
    Сам код из примера такой
    Код:
    public void onEnable() {
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            scheduler.scheduleSyncDelayedTask(this, new Runnable() {
                @Override
                public void run() {
                    // Do something
                }
            }, 20L);
        }
    Однако мне не понятно где тут его ид и как мне потом можно будет его убрать. Не подскажете?
     
  5. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    int id = 0;
    id=scheduler.scheduleSyncDelayedTask(this, new Runnable() ..
    А потом по айди оффай.
     
  6. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Уже в теме твоего плагина написал про индусский код, напишу и тут.
    Зачем ты делаешь?
    Сначала int id = 0;
    Потом id = .....
    Если можно int id = ...
     
  7. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Что бы можно было получать айди с любого места.
    Я имел виду, поставить int id = 0; вне методов.[DOUBLEPOST=1438417122,1438417080][/DOUBLEPOST]
    Ты так и не показал где у меня индусский код.
     
  8. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    sheduleTask* методы устарели. Используйте runTask*.
    Код:
    BukkitTask task = Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
           @Override
           public void run() {
           }
         }, 20);
         task.cancel(); // Остановить
     
  9. Автор темы
    DevAngel

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

    Баллы:
    66
    Имя в Minecraft:
    LifeAngel
    Опять же. Как мне убить его из другой функции?
     
  10. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    В чём проблема создать HashMap со ссылками на таймеры?
     
  11. Автор темы
    DevAngel

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

    Баллы:
    66
    Имя в Minecraft:
    LifeAngel
    Проблема в неопытности. Понятия не имею о чем речь, если честно
     
  12. CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Тогда сначала выучите язык, а потом пишите что-то.
     
  13. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Код:
    public final HashMap<UUID,BukkitRunnable> players = new HashMap<UUID,BukkitRunnable>();
    @EventHandler
    public void onJoin(PlayerJohelEvent e)
    {   BukkitRunnable br = new BukkitRunnableExtension(e.getPlayer());
        br.runTaskTimer(plugin, 10, 20);
        players.put(e.getPlayer().getUUID(),br);   }
    @EventHandler
    public void onLeave(PlayerLevelEvent e)
    {   BukkitRunnable br = players.remove(e.getPlayer().getUUID());
        if(br!=null) br.cancel();
       }
    [DOUBLEPOST=1438424563,1438424233][/DOUBLEPOST]
    Код:
    public final class BukkitRunnableExtension extends BukkitRunnable
    {
        private final Player p;
        public BukkitRunnableExtension(Player p) { this.p = p; }
        @Override
        public void run()
        {   p.damage(1);   }
    }
     

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