syncRepeatingTask not canceling, Help me :O

Discussion in 'Plugin Development' started by ice374, Aug 20, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    ice374

    Ok, so this is what i WAS doing:
    Code:
    public int number = 30;
     
    //later on...
    public void startArena(){
     
            getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
            {
                public void run()
                {
                    if (number != -1){
                        if (number == 30){
                            Bukkit.broadcastMessage(GOOD + "A game of spleef is starting!");
                            Bukkit.broadcastMessage(INFO + "To join in type /warp spleef and select your position.");
                            number--;
                        }
                        else if (number == 20 || number == 10){
                            Bukkit.broadcastMessage(INFO + "" + number + " seconds until spleef starts.");
                            number--;
                        }
                        else if (number <= 5 && number > 0){
                            Bukkit.broadcastMessage(INFO + "" + number);
                            number--;
                        }
                        else if(number == 0){
                            if (gamePlayers.size() >= 2){
                                Bukkit.broadcastMessage(GOOD + "Spleef has started!");
                                gameState.add("on");
                                number--;
                            }else{
                                for(Player p : gamePlayers){
                                    notEnoughPlayers(p);
                                }
                                number--;
                            }
                        }else{
                            number--;
                        }
                    }
                }
            }, 20, 20);
        }
    and this is my problem:

    when i call it again at a later time , it wont fire because the syncRepeatingTask is still firing, and if i set it back to 30 when it reaches -1 it will just keep looping
    how do i get around this?
    this is what i tryed now:
    Code:
    int taskID = 0;
       
        public void startArena(){
           
            taskID = getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
            {
                public void run()
                {
                    if (number != -1){
                        if (number == 30){
                            Bukkit.broadcastMessage(GOOD + "A game of spleef is starting!");
                            Bukkit.broadcastMessage(INFO + "To join in type /warp spleef and select your position.");
                            number--;
                        }
                        else if (number == 20 || number == 10){
                            Bukkit.broadcastMessage(INFO + "" + number + " seconds until spleef starts.");
                            number--;
                        }
                        else if (number <= 5 && number > 0){
                            Bukkit.broadcastMessage(INFO + "" + number);
                            number--;
                        }
                        else if(number == 0){
                            if (gamePlayers.size() >= 2){
                                Bukkit.broadcastMessage(GOOD + "Spleef has started!");
                                gameState.add("on");
                                number--;
                            }else{
                                for(Player p : gamePlayers){
                                    notEnoughPlayers(p);
                                }
                                number--;
                            }
                        }
                        else if (number == -1){
                            Bukkit.getServer().getScheduler().cancelTask(taskID);
     
                        }else{
                            number--;
                        }
                    }
                }
            }, 20, 20);
        }
    
    Thanks in advance :)
     
  2. Offline

    Staartvin

    You should cancel your repeating task once it's not needed anymore.

    Move this:

    Code:java
    1. else if (number == -1){
    2. Bukkit.getServer().getScheduler().cancelTask(taskID);
    3. }


    outside of the first if statement.

    This is your first if statement:

    Code:java
    1. if (number != -1){
    2.  
    3. }


    This would never work.

    You try to check if the number is -1 when it can never be -1.
     
Thread Status:
Not open for further replies.

Share This Page