Войти или зарегистрироваться

Помогите Scheduler отрубается для всех

  • Автор темы Автор темы AxmeD
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

AxmeD

Старожил
Пользователь
Баллы
103
Когда игрок атакует моба, его полоска экспы опускается до нуля, а потом со временем набирается полностью. Всё отлично работает, когда игрок на сервере один, но если, допустим, я ударю моба, а потом через 1 секунду другой игрок ударит моба, то когда моя полоска наберётся, то его остановится на месте, где она была, так никогда и не дойдя до конца. Что делать? Вот код scheduler'a:

Код:
int countdown;
public void setCooldown(final Player p, final double t)
   {
     p.setExp((float)0.0);
     countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() 
     {
       @Override
       public void run()
       {
         if(p.getExp() < (float)0.99)
         {
           p.setExp((float) (p.getExp() + (1F /(t * 20))));
         }
         else
         {
           p.setExp((float)0.99);
           Bukkit.getScheduler().cancelTask(countdown);
         }
       }
   
     }, 1, 1);
   }
 
Когда игрок атакует моба, его полоска экспы опускается до нуля, а потом со временем набирается полностью. Всё отлично работает, когда игрок на сервере один, но если, допустим, я ударю моба, а потом через 1 секунду другой игрок ударит моба, то когда моя полоска наберётся, то его остановится на месте, где она была, так никогда и не дойдя до конца. Что делать? Вот код scheduler'a:

Код:
int countdown;
public void setCooldown(final Player p, final double t)
   {
     p.setExp((float)0.0);
     countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
     {
       @Override
       public void run()
       {
         if(p.getExp() < (float)0.99)
         {
           p.setExp((float) (p.getExp() + (1F /(t * 20))));
         }
         else
         {
           p.setExp((float)0.99);
           Bukkit.getScheduler().cancelTask(countdown);
         }
       }
  
     }, 1, 1);
   }
countdown вне функции, А тоесть можно попробывать так
Код:
[LIST=1]
[*]public void setCooldown(final Player p, final double t)
[*]   {
[*]   final int countdown;
[*]     p.setExp((float)0.0);
[*]     countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
[*]     {
[*]       @Override
[*]       public void run()
[*]       {
[*]         if(p.getExp() < (float)0.99)
[*]         {
[*]           p.setExp((float) (p.getExp() + (1F /(t * 20))));
[*]         }
[*]         else
[*]         {
[*]           p.setExp((float)0.99);
[*]           Bukkit.getScheduler().cancelTask(countdown);
[*]         }
[*]       }
[*]   
[*]     }, 1, 1);
[*]   }
[*][\CODE]
[/LIST]
 
Не получится, нужно инициализировать countdown, а если это сделать, то:
The local variable countdown may not have been initialized
 
countdown который перед scheduler'ом просит убрать final, а который внутри, просит поставить.
Если поставить final int coundown = Bukkit.getScheduler().ляляля
то опять же The local variable countdown may not have been initialized
 
countdown который перед scheduler'ом просит убрать final, а который внутри, просит поставить.
Если поставить final int coundown = Bukkit.getScheduler().ляляля
то опять же The local variable countdown may not have been initialized
final int countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask...
 
final int countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask...
222d59004ac5353e0548a869e7166ee7.png
 
Последнее редактирование:
А у меня работает...
Странно.
Если я смогу впихнуть переменную в сам ивент, то, по идее, должно исправиться, да?
Кинь как у тебя выглядит этот код, может я где-то не так сделал или ты что-то добавил.
Помощь, плиз
Нашёл решение, может кому нужно будет:
Код:
public void setCooldown(final Player p, final double t)
   {
     p.setExp((float)0.0);
     new BukkitRunnable()
     {
       @Override
       public void run()
       {
         if(p.getExp() < (float)0.99)
         {
           p.setExp((float) (p.getExp() + (1F /(t * 20))));
         }
         else
         {
           p.setExp((float)0.99);
           this.cancel();
         }
       }
   
     }.runTaskTimer(this, 1, 1);
   }
Закрыл :3
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх