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

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

Discussion in 'Разработка плагинов для новичков' started by DevAngel, Jul 31, 2015.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    Skype:
    lokivava
    Code:
    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]
    Code:
    public final class BukkitRunnableExtension extends BukkitRunnable
    {
        private final Player p;
        public BukkitRunnableExtension(Player p) { this.p = p; }
        @Override
        public void run()
        {   p.damage(1);   }
    }
     

Share This Page