Problem with countdowns and hashmaps?

Discussion in 'Plugin Development' started by Treeline1, Feb 1, 2015.

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

    Treeline1

    So basically, im trying to make it so when a player stands at a location for a certain amount of time, and if they are on there for that amount of time they win. For some reason, when they are on the location, it doesn't let them win/start the countdown.. Not sure why.

    Code:
    package me.liam.KOTH;
    
    import java.util.HashMap;
    
    import me.liam.main.Kitpvp;
    import me.liam.util.Hill;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Main implements CommandExecutor, Listener {
    
        private static Kitpvp plugin;
        public Main(Kitpvp instance){
            this.plugin = instance;
        }
    
        String a;
        public HashMap<String, Integer> numbers = new HashMap<String, Integer>();
        public HashMap<String, Integer> players = new HashMap<String, Integer>();
    
        public HashMap<String, Integer> time = new HashMap<String, Integer>();
    
        public HashMap<String, Long> hillplayers = new HashMap<String, Long>();
        @SuppressWarnings("deprecation")
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if(!(sender instanceof Player)){
                return false;
            }
            final Player player = (Player)sender;
    
            if (command.getName().equalsIgnoreCase("KOTH")){
                players.put(player.getName(), 1);
                numbers.put(player.getName(), +1);
            }
    
    
            if(numbers.size() == 2){
    
                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                    public void run() {
                        Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 30 seconds! /KOTH to join!");
    
                        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                            public void run() {
                                Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 20 seconds! /KOTH to join!");
    
                                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                    public void run() {
                                        Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 10 seconds! /KOTH to join!");
    
                                        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                            public void run() {
                                                Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 5 seconds! /KOTH to join!");
    
                                                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                    public void run() {
                                                        Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 4 seconds! /KOTH to join!");
    
                                                        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                            public void run() {
                                                                Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 3 seconds! /KOTH to join!");
    
                                                                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                                    public void run() {
                                                                        Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 2 seconds! /KOTH to join!");
    
                                                                        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                                            public void run() {
                                                                                Bukkit.broadcastMessage(ChatColor.RED + "KOTH starting in 1 seconds! /KOTH to join!");
    
                                                                                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                                                    public void run() {
                                                                                        Bukkit.broadcastMessage(ChatColor.RED + "KOTH has started!");
                                                                                        Location loc = new Location(Bukkit.getServer().getWorld("KOTH"), 0, 69, 0);
    
                                                                                        for(Player player :  Bukkit.getServer().getOnlinePlayers()) {
                                                                                            if(numbers.containsKey(player.getName())){
                                                                                                player.teleport(loc);
                                                                                            }               
                                                                                        }
                                                                                        Bukkit.broadcastMessage(ChatColor.RED + "You have 2 minutes of invincibilty!");
                                                                                        Bukkit.broadcastMessage(ChatColor.RED + "After invincibilty is over, hold the hill for 45 seconds to win!");
    
                                                                                        Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new BukkitRunnable() {
                                                                                            public void run() {
                                                                                                Bukkit.broadcastMessage(ChatColor.RED + "Invincibilty is over!");
                                                                                                time.put(a, 1);
    
    
                                                                                            }
                                                                                        }, 20 * 10);
    
                                                                                    }
                                                                                }, 20 * 1);
    
                                                                            }
                                                                        }, 20 * 1);
                                                                    }
                                                                }, 20 * 1);
                                                            }
                                                        }, 20 * 1);
                                                    }
                                                }, 20 * 1);
                                            }
                                        }, 20 * 5);
                                    }
                                }, 20 * 10);
                            }
                        }, 20 * 10);
                    }
                }, 20 * 10);
    
    
            }
    
            return true;
    
        }
        static int taskID;
        public int HILL_TIME = 3;
    
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onMove(PlayerMoveEvent event){
            final Player player = event.getPlayer();
            if (player.getLocation().getWorld().getName().equalsIgnoreCase("KOTH")) {
                if(time.containsKey(a)){
                    if(Hill.isCloseToSpawn(player.getLocation())){ 
                        if(!(hillplayers.containsKey(player.getName()))) {
                            hillplayers.put(player.getName(), System.currentTimeMillis());
                            if(hillplayers.get(player.getName()) > (System.currentTimeMillis() - HILL_TIME * 1000)) {
                                taskID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new BukkitRunnable() {
                                    public void run() {
                                        Bukkit.broadcastMessage(ChatColor.RED + "YOU WIN!");
                                        Location loc = new Location(Bukkit.getServer().getWorld("world"), -491.5, 97, -433.5);
                                player.teleport(loc);
                                hillplayers.clear();
    
                                    }
                                },20 * 15);
                            }
                        }
                    }
                }
    
                if (player.getLocation().getWorld().getName().equalsIgnoreCase("KOTH")) {
                    if(!(Hill.isCloseToSpawn(player.getLocation()))){
                        for(Player p :  Bukkit.getServer().getOnlinePlayers()) {
                            if(numbers.containsKey(p.getName())){
                                hillplayers.remove(p.getName());
                                plugin.getServer().getScheduler().cancelTask(taskID);
    
                            }
                        }
                    }
                }
            }   
        }
    
        @EventHandler
        public void  onDamage(EntityDamageEvent event){
            if(event.getEntity() instanceof Player) {
                Player player = (Player)event.getEntity();
                if (player.getLocation().getWorld().getName().equalsIgnoreCase("KOTH")) {
                if(time.containsKey(a)){
                    event.setCancelled(false);
                }else{
                    event.setCancelled(true);
                }
    
            }
            }
        }
    
        @EventHandler
        public void deathEvent(PlayerDeathEvent e) {
            Player player = e.getEntity();
            hillplayers.remove(player.getName());
            numbers.remove(player.getName());
        }
    
    
    }
    
    Also, for some reason I cannnot damage someone after the invincibilty is up.
    Both problems are related because they both use the time hashmap... So im not sure whats up with that! Any help?
     
  2. Offline

    Treeline1

    Hello? D:
     
  3. Offline

    teej107

    @Treeline1
    1. You can do better than just schedule a bunch of tasks one after another.
    2. Don't use Async tasks for Bukkit methods you are using.
     
  4. Offline

    sirrus86

    I think it needs more tasks.
     
  5. Offline

    Treeline1

    Ok, thats fixed with the Async... but how do I fixed my current problem?
     
  6. Offline

    BlackDereker

    Seriously? Why so many tasks? Why you can't just do a HashMap with a <String, Float> and do a timer? It's better and more organized!
     
  7. Offline

    caderape

    @Treeline1
    where's do you assign 'a' ? before to put it in the hashmap ?

    I might miss it. Get a look to repeating task. it will help you a lot.

    Another way, use the system.currentmillis and the event entityDamageByEntity.
     
Thread Status:
Not open for further replies.

Share This Page