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

Таймеры

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

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

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

    Баллы:
    78
    Возникла небольшая проблема с таймером.
    При запуске таймера 2 раз скорость отчета увеличивается и так до бесконечности.
     
  2. Хостинг MineCraft
    <
  3. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    А зачем тебе его запускать 2 раза?
     
  4. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    вообще таймер вызывается командой 1 раз, но при 2 выполнении команды скорость таймера увеличивается
     
  5. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Вызов команды
    Если bool'еановская переменная isTimerEnabled = false, то запускаешь таймер и присваиваешь isTimerEnabled true; если true, то не запускаешь.
     
  6. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    попробуем
     
    Последнее редактирование: 20 янв 2015
  7. AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Просто создай переменную сначала пустую. Потом в коде, где запускаешь таймер, одновременно с включением таймера установи нужное значение, перед этим проверяя чему это значение равно на данный момент.
     
  8. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Дык если он проверит пустую переменную, то краш будет.
    Так-что лучше пусть false будет
     
  9. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    чет не получается, в момент старта ставлю на true а после окончания на false, но никак не могу понять где ставить метод else if

    Код:
                  this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
                      
                        public void run(){
                            boolean isTimerEnabled = false;
                            if (i!=-1){
                                if(i != 0){
                                    isTimerEnabled = true;
                                    player.sendMessage("&a " + i + " sec");
                                    i--;
                                } else {
                                    isTimerEnabled = false;
                                    player.sendMessage("DieFFFF sec");
                                    i--;
                                }
                            }
                        }
                    }, 10L, 20L ); i = 5;
    
     
    Последнее редактирование: 20 янв 2015
  10. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Что за i?
    И isTimerEnabled надо ставить где-то "вне"
     
  11. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    i - сам таймер, а точнее секунды.
    таймер поставил перед запуском, но все равно не помогает. .-.
     
  12. AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    Потому что он у тебя заново ставится на false постоянно[DOUBLEPOST=1421768055,1421767928][/DOUBLEPOST]Вообще перед самим ивентом, где-то наверху, отдельно напиши boolean isEnabled = false;
    Тогда у тебя будет переменная, у которой будет первоначальное значение. Дальше, в своём ивенте проверяешь, true он или false. Если false, то ставишь true и запускаешь таймер, который по истечению времени ставит обратно false.
     
  13. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    прикол в том что у меня команда сама по себе использует else if
     
  14. AxmeD

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

    Баллы:
    103
    Skype:
    ahmed136323
    В смысле?
    Кинь код команды весь
     
  15. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    warning shitlycode
    Код:
            if (commandLabel.equalsIgnoreCase("ctMI")) {
           
                if (args.length == 0){
                    null
            } else if (args.length == 1) {
                if(player.getServer().getPlayer(args[0]) != null){
                    Player targetPlayer = getServer().getPlayer(args[0]);
    null
                }  else if(args[0].equalsIgnoreCase("reloadConfig")) {
    null
                } else {
    null
                }
           
            }
            else if (args.length == 2) {
    null
                }  else if (args[1].equalsIgnoreCase("Firetron")) {
    
                    null
               
                    player.sendMessage(colorize(null));
                    this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
                        boolean isTimerEnabled = false;
                        public void run(){
                       
                            if (i!=-1){
                                if(i != 0){
                                    isTimerEnabled = true;
                                    player.sendMessage("&a " + i + " sec");
                                    i--;
                                } else {
                                    isTimerEnabled = false;
                                    player.sendMessage("DieFFFF sec");
                                    i--;
                                }
                            }
                        }
                    }, 10L, 20L ); i = 5;
               
                }  else if(args[1].equalsIgnoreCase("test")) {
      copy
                } else {
    // null
                }
           
            }
            }
       
            return false;
        }
    
     
  16. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Так вы с каждой командой запускаете всё новый шедулер, а isTimerEnabled вы даже нигде и не проверяете, не говоря уже о том, что он находится внутри анонимного класса.
     
  17. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    А каким образом можно убрать запуск нового шедулера?
     
    Последнее редактирование: 20 янв 2015
  18. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Создайте свой класс, реализующий runnable, создав нужные методы для удобства хренения и оперирования с данными. При выполнении команды в первый раз, инициализируйте объект вашего класса, сохраните в какую ни будь переменную и запустите с ним таск. При последующих командах проверяйте уже ваш сохранённый класс(любым удобным методом).
    Код давать не буду, ибо это уже из ряда вон.
    В таком смысле, что несмотря на наши рекомендации вы настойчиво отказываетесь изучать язык, творя чушь.
     
  19. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    А вы ни разу не советовали мне с чего стоит начать, и такое ощущение что вы прям как только родились все про Java знали.
     
  20. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну я хотя бы не задавал таких вопросов(3 раза кажется только спрашивал), а решал свои проблемы самостоятельно, пользуясь яндексом и чужим кодом.
     
  21. Автор темы
    TheBlacK.Z

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

    Баллы:
    78
    ну дык я тоже 3 раз спрашиваю.
     
Статус темы:
Закрыта.

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