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

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

DevAngel

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
LifeAngel
Суть задачи в чем: когда игрок заходит на сервер должен запустится таймер из функции onJoin. Нужно сделать так, что бы из функции onLeave можно было этот таймер убить. Сталкивался кто с такой проблемой?
 
Так а в чем проблема? Есть несколько способов сделать таймер. Один из них - Bukkit Scheduler.
В onJoin создаете таск(BukkitScheduler#scheduleAsyncRepeatingTask)
и присваеваете его к переменной типа int. В onLeave отменяете таск с идом, который получили из onJoin
 
Сам код из примера такой
JavaScript:
public void onEnable() {
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
        scheduler.scheduleSyncDelayedTask(this, new Runnable() {
            @Override
            public void run() {
                // Do something
            }
        }, 20L);
    }
Однако мне не понятно где тут его ид и как мне потом можно будет его убрать. Не подскажете?
 
Сам код из примера такой
JavaScript:
public void onEnable() {
        BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
        scheduler.scheduleSyncDelayedTask(this, new Runnable() {
            @Override
            public void run() {
                // Do something
            }
        }, 20L);
    }
Однако мне не понятно где тут его ид и как мне потом можно будет его убрать. Не подскажете?
int id = 0;
id=scheduler.scheduleSyncDelayedTask(this, new Runnable() ..
А потом по айди оффай.
 
int id = 0;
id=scheduler.scheduleSyncDelayedTask(this, new Runnable() ..
А потом по айди оффай.
Уже в теме твоего плагина написал про индусский код, напишу и тут.
Зачем ты делаешь?
Сначала int id = 0;
Потом id = .....
Если можно int id = ...
 
Уже в теме твоего плагина написал про индусский код, напишу и тут.
Зачем ты делаешь?
Сначала int id = 0;
Потом id = .....
Если можно int id = ...
Что бы можно было получать айди с любого места.
Я имел виду, поставить int id = 0; вне методов.
Уже в теме твоего плагина написал про индусский код, напишу и тут.
Зачем ты делаешь?
Сначала int id = 0;
Потом id = .....
Если можно int id = ...
Ты так и не показал где у меня индусский код.
 
sheduleTask* методы устарели. Используйте runTask*.
Java:
BukkitTask task = Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
       @Override
       public void run() {
       }
     }, 20);
     task.cancel(); // Остановить
 
sheduleTask* методы устарели. Используйте runTask*.
Java:
BukkitTask task = Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
       @Override
       public void run() {
       }
     }, 20);
     task.cancel(); // Остановить
Опять же. Как мне убить его из другой функции?
 
Java:
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();
   }

Java:
public final class BukkitRunnableExtension extends BukkitRunnable
{
    private final Player p;
    public BukkitRunnableExtension(Player p) { this.p = p; }
    @Override
    public void run()
    {   p.damage(1);   }
}
 

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

Назад
Верх