Solved "Simple" Countdown Timer Help

Discussion in 'Plugin Development' started by BlazingBroGamer, Apr 27, 2014.

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

    BlazingBroGamer

    The title suggests it. So far, I have been using the hard way around with the countdown, and since I want minuites, I need to split them with ":", so I needed to make 3 variables, and whenever I want to use scoreboards, I need to create 3 hashmaps, which makes things a lot more hard. So I need a "Simple" way of doing this, easily
     
  2. BlazingBroGamer I really don't understand. Can you try and explain it better please? Also, please post the code you're currently using.
     
  3. Offline

    BlazingBroGamer

    AdamQpzm
    Hmm sure
    Code:
    plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable(){
    
                @Override
                public void run() {
                    if(number.get(p) > 0 && number2.get(p) == 0 && number3.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "There is " + number.get(p) + " minuites left in the game!");
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number.put(p, number.get(p) - 1);
                        number2.put(p, 5);
                        number3.put(p, 9);
                    }else if(number.get(p) == 0 && number2.get(p) == 0 && number3.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time is UP! People alive will be sent to the Death Arena!");
                    }else if(number.get(p) > 0 && number3.get(p) != 0 && number2.get(p) != -1){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, number3.get(p) - 1);
                    }else if(number3.get(p) == 0 && number.get(p) > 0 && number2.get(p) != -1){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, 9);
                        number2.put(p, number2.get(p) - 1);
                    }else if(number3.get(p) == 0 && number2.get(p) == 0 && number.get(p) > 0){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, 9);
                        number2.put(p, 5);
                        number.put(p, number.get(p) - 1);
                    }else if(number.get(p) == 0 && number3.get(p) != 0){
                        number2.put(p, 5);
                        number3.put(p, 9);
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number2.get(p) + number3.get(p) + "seconds left");
                    }else if(number.get(p) == 0 && number3.get(p) == 0 && number2.get(p) != -1){
                        number3.put(p, 9);
                        number2.put(p, number2.get(p) - 1);
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number2.get(p) + number3.get(p) + "seconds left");
                    }if(number2.get(p) == 3 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number2.get(p) == 1 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number3.get(p) < 6 && number2.get(p) == 0 && number.get(p) == 0 && number3.get(p) > 1){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number3.get(p) == 1 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "second left!");
                    }
                }
                
            }, 0L, 20L);
    And also, what I meant was, that I wanted the timer to be a string, with the ":", and countdown normally, second by second, if that makes sense
     
  4. BlazingBroGamer The whole code please, I'm not sure what number, number2 and number3 are :)
     
  5. Offline

    BlazingBroGamer

    AdamQpzm
    Errrr ok here is "possibly" the "whole code"
    Code:
    package me.BlazingBroGamer.GreatRace;
    
    import java.util.HashMap;
    
    import me.confuser.barapi.BarAPI;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.GameMode;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    
    public class StartGame implements Listener{
        public static GreatRace plugin;
        public StartGame(GreatRace instance){
            plugin = instance;
        }
        public final HashMap<Player, Integer> number = new HashMap<Player, Integer>();
        public final HashMap<Player, Integer> number2 = new HashMap<Player, Integer>();
        public final HashMap<Player, Integer> number3 = new HashMap<Player, Integer>();
        public final HashMap<Player, String> string = new HashMap<Player, String>();
        public void raceTimer(final Player p){
            number.put(p, 5);
            number2.put(p, 0);
            number3.put(p, 0);
            string.put(p, " ");
            plugin.bl.enabled = true;
            Location loc = p.getLocation();
            loc.setX(-738);
            loc.setY(65.0);
            loc.setZ(112.0);
            for(Player p2 : Bukkit.getOnlinePlayers()){
            p2.teleport(loc);
            p2.setGameMode(GameMode.SURVIVAL);
            p2.setWalkSpeed(0.5F);
            }
            plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable(){
    
                @Override
                public void run() {
                    if(number.get(p) > 0 && number2.get(p) == 0 && number3.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "There is " + number.get(p) + " minuites left in the game!");
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number.put(p, number.get(p) - 1);
                        number2.put(p, 5);
                        number3.put(p, 9);
                    }else if(number.get(p) == 0 && number2.get(p) == 0 && number3.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time is UP! People alive will be sent to the Death Arena!");
                    }else if(number.get(p) > 0 && number3.get(p) != 0 && number2.get(p) != -1){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, number3.get(p) - 1);
                    }else if(number3.get(p) == 0 && number.get(p) > 0 && number2.get(p) != -1){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, 9);
                        number2.put(p, number2.get(p) - 1);
                    }else if(number3.get(p) == 0 && number2.get(p) == 0 && number.get(p) > 0){
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number.get(p) + ":" + number2.get(p) + number3.get(p));
                        number3.put(p, 9);
                        number2.put(p, 5);
                        number.put(p, number.get(p) - 1);
                    }else if(number.get(p) == 0 && number3.get(p) != 0){
                        number2.put(p, 5);
                        number3.put(p, 9);
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number2.get(p) + number3.get(p) + "seconds left");
                    }else if(number.get(p) == 0 && number3.get(p) == 0 && number2.get(p) != -1){
                        number3.put(p, 9);
                        number2.put(p, number2.get(p) - 1);
                        BarAPI.setMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA + "Time Left: " + number2.get(p) + number3.get(p) + "seconds left");
                    }if(number2.get(p) == 3 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number2.get(p) == 1 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number3.get(p) < 6 && number2.get(p) == 0 && number.get(p) == 0 && number3.get(p) > 1){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "seconds left!");
                    }if(number3.get(p) == 1 && number2.get(p) == 0 && number.get(p) == 0){
                        Bukkit.broadcastMessage(ChatColor.YELLOW.toString() + ChatColor.BOLD + "[GreatRace]" + ChatColor.AQUA  + number2.get(p) + number3.get(p) + "second left!");
                    }
                }
                
            }, 0L, 20L);
        }
    }
    
     
  6. Offline

    BillyGalbreath

    You are making this far too difficult on yourself by splitting the numbers. From looking at the code I see 5 minutes (5:00). That's simply 300 seconds (one variable).

    Code:java
    1.  
    2. int countdown = 300; // 300 seconds (5 minutes)
    3.  
    4. int seconds = countdown % 60;
    5. int minutes = countdown / 60;
    6.  
    7. String displayTime = minutes + ":" + seconds;
    8.  


    Keep you logic simple, and just format it differently for display purposes. This way you can easily just count down the single variable and not have to worry about the intricate details of each digit.
     
    AdamQpzm and BlazingBroGamer like this.
  7. Offline

    BlazingBroGamer

  8. BlazingBroGamer Yeah, I see what you mean now. So number is the number of minutes left, and number2 and 3 is the what? One of the seconds and the other?
     
Thread Status:
Not open for further replies.

Share This Page