Bukkit timer using schedulers

Discussion in 'Plugin Development' started by Prorockband, Feb 28, 2015.

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

    Prorockband

    So I know theres about a billion of this posts, but i'm finding a hard time understanding the schedulers. What i'm trying to do in the code below is create a 30 second timer. Any help either explaining what i did wrong or even just explaining the code would be appreciated.

    Code:
    int taskid = this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    public void run() {
            if(number != -1) {
                number--;
                if(number == 30) {
                    Bukkit.broadcastMessage(ChatColor.GOLD + "30 seconds left!");
                } else if(number == 15) {
                    Bukkit.broadcastMessage(ChatColor.GOLD + "15 seconds left!");
                } else if(number <= 10 && number > 0){
                    Bukkit.broadcastMessage("" + ChatColor.GOLD + number + " seconds left!");
                }
            } else {
                Bukkit.getServer().getScheduler().cancelTask(taskid);
                Bukkit.broadcastMessage("Done");
                number--;
                return;
            }
        }
    }, 0L, 20L);
     
  2. Offline

    dlange

    I would normally do something along the lines of:

    Code:
                for (final Player p : Bukkit.getServer().getOnlinePlayers()) {
                    Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(Core.getPlugin(), new Runnable() {
                        @Override
                        public void run() {
                            if (number == 30 || number == 15 || number <= 10 && number >0) {
                                p.sendMessage(ChatColor.GOLD + "" + number + " seconds left!");
                            }
                            if (number == 0) {
                                p.sendMessage("Done");
                                return;
                            }
                            if (number > 0) {
                                number--;
                            }
                        }
                    }, 10L, 20L);
                }
    
     
  3. Offline

    mine-care

    your code is more or less right. The only problem is this: ...}, 0L, 20L); here you say to the timer to run every 20 ticks. (1 second = 20 ticks) so to fix it, simply put yourminutes*60*20 there.
     
  4. Offline

    Webbeh

    No, mine-care. Look better.

    Prorockband ->
    Did you initialize "number" ? Where is it initialized ? At which value ? Is it final ?

    Also instead of (number != -1) I'd use (number != 0).

    Also error messages would help us determine what's wrong.
     
Thread Status:
Not open for further replies.

Share This Page