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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем AxmeD, 12 фев 2016.

Статус темы:
Закрыта.
  1. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Когда игрок атакует моба, его полоска экспы опускается до нуля, а потом со временем набирается полностью. Всё отлично работает, когда игрок на сервере один, но если, допустим, я ударю моба, а потом через 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);
       }
     
  2. Хостинг MineCraft
    <
  3. Sonicxd2

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

    Баллы:
    76
    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]
     
  4. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Не получится, нужно инициализировать countdown, а если это сделать, то:
    The local variable countdown may not have been initialized
     
  5. Sonicxd2

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

    Баллы:
    76
    final int countdown=0;
     
  6. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    countdown который перед scheduler'ом просит убрать final, а который внутри, просит поставить.
    Если поставить final int coundown = Bukkit.getScheduler().ляляля
    то опять же The local variable countdown may not have been initialized
     
  7. Sonicxd2

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

    Баллы:
    76
    final int countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask...
     
  8. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    [​IMG]
     
    Последнее редактирование: 12 фев 2016
  9. Sonicxd2

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

    Баллы:
    76
    А у меня работает...
     
  10. Автор темы
    AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Странно.
    Если я смогу впихнуть переменную в сам ивент, то, по идее, должно исправиться, да?
    Кинь как у тебя выглядит этот код, может я где-то не так сделал или ты что-то добавил.[DOUBLEPOST=1455348291,1455298490][/DOUBLEPOST]Помощь, плиз[DOUBLEPOST=1455350066][/DOUBLEPOST]Нашёл решение, может кому нужно будет:
    Код:
    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
     
Статус темы:
Закрыта.

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