package me.BukkitPVP.bedwars;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import net.milkbowl.vault.economy.Economy;
import net.minecraft.util.org.apache.commons.io.FileUtils;

import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Sign;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
import org.bukkit.scoreboard.Team;

public class main extends JavaPlugin{
	
	public ArrayList<String> playerlist = new ArrayList<String>();
	public Economy economy;
	
	HashMap<String, ItemStack[]> inventory = new HashMap<>();
	HashMap<String, ItemStack[]> armor = new HashMap<>();
	
	public void onEnable(){
		String name = ChatColor.GOLD + "[" + ChatColor.RED + this.getDescription().getName() + ChatColor.GOLD + "] " + ChatColor.YELLOW;
		manager = Bukkit.getScoreboardManager();
		Boolean EnableMetrics = Boolean.valueOf(getConfig().getBoolean("EnableMetrics"));
		Boolean EnableUpdater = Boolean.valueOf(getConfig().getBoolean("EnableUpdater"));
		Double WinReward = Double.valueOf(getConfig().getDouble("WinReward"));
		Bukkit.getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "------------------------");
		Bukkit.getConsoleSender().sendMessage(name + "Plugin enabled");
		PluginManager pm = this.getServer().getPluginManager();
		loadConfig();
		Bukkit.getConsoleSender().sendMessage(name + "Configuration loaded");
		if(EnableMetrics == true){
			try {
			    Metrics metrics = new Metrics(this);
			    metrics.start();
			    Bukkit.getConsoleSender().sendMessage(name + "Metrics started");
			} catch (IOException e) {
				Bukkit.getConsoleSender().sendMessage(name + "Coud not send stats to mcstats.org");
			}
		}
		if(WinReward > 0){
			setupEconomy();
		}
		if(EnableUpdater == true){
			@SuppressWarnings("unused")
			Updater updater = new Updater(this, 68003, this.getFile(), Updater.UpdateType.DEFAULT, false);
			}
		if((new File("plugins/Bedwars/worlds")).exists()){		
		}else{
			boolean success = (new File("plugins/Bedwars/worlds")).mkdir();
			if(success){
				Bukkit.getConsoleSender().sendMessage(name + "Created new folder at " + ChatColor.GREEN + "plugins/Bedwars/worlds");
			}
		}
		if((new File("plugins/Bedwars/temp")).exists()){
		}else{
			boolean success = (new File("plugins/Bedwars/temp")).mkdir();
			if(success){
				Bukkit.getConsoleSender().sendMessage(name + "Created new folder at " + ChatColor.GREEN + "plugins/Bedwars/temp");
			}
		}
		//LOL
		Player aplayer[];
		int j = (aplayer = Bukkit.getServer().getOnlinePlayers()).length;
        for(int i = 0; i < j; i++)
        {
            Player player = aplayer[i];
            String name2 = player.getName();
            resetPlayerColours(player);
            if(playerInGame(name2))
                player.setScoreboard(manager.getNewScoreboard());
        }
		//Listener
		pm.registerEvents(new ChatEvent(this), this);
		pm.registerEvents(new PlayerListener(this), this);
		Bukkit.getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "------------------------");
	}
	public void onDisable(){
		String name = ChatColor.GOLD + "[" + ChatColor.RED + this.getDescription().getName() + ChatColor.GOLD + "] " + ChatColor.YELLOW;
		Bukkit.getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "------------------------");
		Bukkit.getConsoleSender().sendMessage(name + "Plugin disabled");
		Bukkit.getConsoleSender().sendMessage(name + "Save configuration");
		this.getConfig().options().copyDefaults();
		this.saveConfig();
		//LOL
		Player aplayer[];
        int j = (aplayer = Bukkit.getServer().getOnlinePlayers()).length;
        for(int i = 0; i < j; i++)
        {
            Player player = aplayer[i];
            String name2 = player.getName();
            if(player.getWorld().getName().contains(mapPrefix))
            {
                resetPlayerState(player);
                player.setScoreboard(manager.getNewScoreboard());
                if(playerInGame(name))
                {
                    Game game = getPlayerGame(name2);
                    PlayerListener.playerElim(name2, game);
                }
            }
            

        Sign sign;
        for(Iterator iterator = games.iterator(); iterator.hasNext(); sign.update(true))
        {
            Game game = (Game)iterator.next();
            sign = game.getSign();
            sign.setLine(titleSignLine, (new StringBuilder()).append(signTitleColour).append(signTitle).toString());
            sign.setLine(playersSignLine, (new StringBuilder("0/")).append(game.maxPlayers()).toString());
            sign.setLine(statusSignLine, waitingSignMsg);
        }
		Bukkit.getConsoleSender().sendMessage(ChatColor.LIGHT_PURPLE + "------------------------");
        }
	}
	@SuppressWarnings("deprecation")
	public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, String[] args){
		Player p = (Player)sender;
		String name = ChatColor.GOLD + "[" + ChatColor.RED + this.getDescription().getName() + ChatColor.GOLD + "] " + ChatColor.YELLOW;
		if(cmd.getName().equalsIgnoreCase("bw")){
			if(args.length == 0){
				if(p.hasPermission("bw.info")){
				p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
				p.sendMessage(name + this.getDescription().getDescription());
				p.sendMessage(name + "Plugin by" + " " + ChatColor.GOLD + this.getDescription().getAuthors());
				p.sendMessage(name + "Version:" + " " + ChatColor.GOLD + this.getDescription().getVersion());
				p.sendMessage(name + "For help type" + ChatColor.GOLD + " /bw help");
				p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
			}else{
				p.sendMessage(name + "No Permission");
			}
			}else{
				
				if(args[0].equalsIgnoreCase("reload")){
					if(args.length == 1){
						if(p.hasPermission("bw.setup")){
							reloadBedwars(sender);
							p.sendMessage(name + "Config reloaded");
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw reload");
					}
				}
				if(args[0].equalsIgnoreCase("help")){
					if(args.length == 1){
						if(p.hasPermission("bw.help")){
							p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
							p.sendMessage(name + "/bw " + ChatColor.GOLD + "Basic command and some informations");
							p.sendMessage(name + "/bw help " + ChatColor.GOLD + "Shows this page");
//							p.sendMessage(name + "/bw list " + ChatColor.GOLD + "Shows all games");
							p.sendMessage(name + "/bw reload " + ChatColor.GOLD + "Reload the plugin configuration");
							p.sendMessage(name + "/bw add [game] [world] " + ChatColor.GOLD + "Create a new game");
							p.sendMessage(name + "/bw del [game] " + ChatColor.GOLD + "Delete an game");
							p.sendMessage(name + "/bw setbed [game] " + ChatColor.RED + "red" + ChatColor.YELLOW + "|" + ChatColor.BLUE + "blue" + " " + ChatColor.YELLOW +  "[game]" + " " + ChatColor.GOLD + "Sets the beds");
							p.sendMessage(name + "/bw setmax [maxplayers] " + ChatColor.GOLD + "Define the maximal players");
							p.sendMessage(name + "/bw stop [game] " + ChatColor.GOLD + "Stop a game");
							p.sendMessage(name + "/bw start [game] " + ChatColor.GOLD + "Start a game");
							p.sendMessage(name + "/bw join [game] " + ChatColor.GOLD + "Join a game");
							p.sendMessage(name + "/bw vote " + ChatColor.GOLD + "Vote to start a game");
							p.sendMessage(name + "/bw leave " + ChatColor.GOLD + "Leave your current game");
							p.sendMessage(name + "/bw spectate [game] " + ChatColor.GOLD + "Spectate a game - Coming soon");
							p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
						}else{
							p.sendMessage(name + "No Permission");
						}	
					}else{
						p.sendMessage(name + "/bw help");
					}
				}
				//Game
				if(args[0].equalsIgnoreCase("add")){
					if(args.length == 3){
						if(p.hasPermission("bw.setup")){
							if(Bukkit.getWorld(args[2]) != null) {
								if(getConfig().contains("games." + args[1])){
									p.sendMessage(name + "There is already a game called " + ChatColor.BLUE + args[1]);
								}else{
									getConfig().set("games." + args[1] + ".world", args[2]);
									getConfig().set("games." + args[1] + ".name", args[1]);
									saveConfig();
									reloadConfig();
									WorldUtils.importWorld(p, args[2]);
									p.sendMessage(name + "You added " + ChatColor.BLUE + args[1] + ChatColor.YELLOW + " in world " + ChatColor.GREEN + args[2]);
								}	
							}else{
								p.sendMessage(name + "There is not a world called '" + ChatColor.GREEN + args[2] + ChatColor.YELLOW + "'");
							}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw add [game] [world]");
					}
					}
				if(args[0].equalsIgnoreCase("list")){
					if(args.length == 1){
						if(p.hasPermission("bw.play")){
							p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
							for (String key : this.getConfig().getConfigurationSection("games").getKeys(false)) {
								if(!(key == null)){
									p.sendMessage(name + this.getConfig().getString("games." + key + ".name"));
								}
							}
							p.sendMessage(name + ChatColor.LIGHT_PURPLE + "------------------------");
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw list");
					}
				}
				if(args[0].equalsIgnoreCase("del")){
					if(args.length == 2){
						if(p.hasPermission("bw.setup")){
							if(getConfig().contains("games." + args[1])){
								String world = getConfig().getString("games." + args[1] + ".world");
								
								File dir = new File("/plugins/Bedwars/worlds/" + world);
								p.sendMessage(name + dir);
								WorldUtils.deleteDir(dir);
								
								getConfig().getConfigurationSection("games").set(args[1], null);
								saveConfig();
								reloadConfig();
								p.sendMessage(name + ChatColor.BLUE + args[1] + ChatColor.YELLOW + " was deleted");
							}else{
								p.sendMessage(name + "There is not a game called " + ChatColor.BLUE + args[1]);
							}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw del [game]");
					}
				}
				if(args[0].equalsIgnoreCase("stop")){
					if(args.length == 2){
						if(p.hasPermission("bw.setup")){
							if(getConfig().contains("games." + args[1])){
								Game game = getPlayerGame(p.getName());
								game.cleanUp();
								p.sendMessage(name + ChatColor.BLUE + args[1] + ChatColor.YELLOW + " stopped");
							}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw stop [game]");
					}
				}
				if(args[0].equalsIgnoreCase("spectate")){
					if(args.length == 2){
						if(p.hasPermission("bw.spectate")){
							if(getConfig().contains("games." + args[1])){
								p.sendMessage(name + "Coming soon!!!");
							}else{
								p.sendMessage(name + "There is not a game called " + ChatColor.BLUE + args[1]);
							}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw spectate [game]");
					}
				}
				//LOL
				//TODO
				String pname = p.getName();
				if(args.length >= 1)
	            {
	                if(args[0].equalsIgnoreCase("join"))
	                {
	                    if(p.hasPermission("bw.join"))
	                    {
	                        if(playerInGame(pname))
	                        {
	                            Game game = getPlayerGame(pname);
	                            if(args.length >= 1 && !game.started)
	                                if(args[1].equalsIgnoreCase("red"))
	                                {
	                                    if(game.redTeamSize() < game.maxPlayers() / 2)
	                                    {
	                                        game.removeBlueTeam(pname);
	                                        game.removeRedTeam(pname);
	                                        game.addRedTeam(pname);
	                                        if(game.votedSize() == game.teamsSize() && game.redTeamSize() > 0 && game.blueTeamSize() > 0)
	                                            game.start();
	                                    }
	                                } else
	                                if(args[1].equalsIgnoreCase("blue"))
	                                {
	                                    if(game.blueTeamSize() < game.maxPlayers() / 2)
	                                    {
	                                        game.removeBlueTeam(pname);
	                                        game.removeRedTeam(pname);
	                                        game.addBlueTeam(pname);
	                                        if(game.votedSize() == game.teamsSize() && game.redTeamSize() > 0 && game.blueTeamSize() > 0)
	                                            game.start();
	                                    }
	                                } else
	                                {
	                                    p.sendMessage((new StringBuilder()).append(ChatColor.RED).append("Usage: /bw join <red|blue>").toString());
	                                }
	                        } else
	                        {
	                            p.sendMessage(notInGame);
	                        }
	                    } else
	                    {
	                        p.sendMessage(noPerm);
	                    }
	                } else
	                if(args[0].equalsIgnoreCase("vote"))
	                {
	                    if(p.hasPermission("bw.vote"))
	                    {
	                        if(playerInGame(name))
	                        {
	                            Game game = getPlayerGame(pname);
	                            if(!game.started)
	                                if(!game.votedContains(pname))
	                                {
	                                    game.addVoted(pname);
	                                    if(game.votedSize() == game.teamsSize() && game.redTeamSize() > 0 && game.blueTeamSize() > 0)
	                                        game.start();
	                                } else
	                                {
	                                    p.sendMessage((new StringBuilder()).append(ChatColor.RED).append("You have already voted!").toString());
	                                }
	                        }
	                    } else
	                    {
	                        p.sendMessage(noPerm);
	                    }
	                } else
	                if(args[0].equalsIgnoreCase("leave"))
	                {
	                    if(p.hasPermission("bw.play"))
	                    {
	                        if(playerInGame(pname))
	                        {
	                            Game game = getPlayerGame(pname);
	                            PlayerListener.playerElim(pname, game);
	                            p.sendMessage((new StringBuilder()).append(ChatColor.YELLOW).append("Leaving the game...").toString());
	                        } else
	                        {
	                            p.sendMessage(notInGame);
	                        }
	                    } else
	                    {
	                        p.sendMessage(noPerm);
	                    }
	                } else
	                if(args[0].equalsIgnoreCase("t"))
	                {
	                    if(p.hasPermission("bw.play"))
	                    {
	                        if(playerInGame(pname))
	                        {
	                            Game game = getPlayerGame(pname);
	                            if(args.length >= 1 && game.teamContains(pname))
	                            {
	                                StringBuilder b = new StringBuilder();
	                                for(int x = 1; x < args.length; x++)
	                                    b.append(args[x]).append(" ");

	                                String message = b.toString();
	                                if(game.redTeamContains(pname))
	                                    game.msgRedTeam((new StringBuilder("[")).append(pname).append("->").append(redTeamColour).append("Team").append(ChatColor.RESET).append("] ").append(message).toString());
	                                else
	                                if(game.blueTeamContains(pname))
	                                    game.msgBlueTeam((new StringBuilder("[")).append(pname).append("->").append(blueTeamColour).append("Team").append(ChatColor.RESET).append("] ").append(message).toString());
	                            }
	                        } else
	                        {
	                            p.sendMessage(notInGame);
	                        }
	                    } else
	                    {
	                        p.sendMessage(noPerm);
	                    }
	                } else
	                if(args[0].equalsIgnoreCase("start"))
	                {
	                    if(p.hasPermission("bw.setup"))
	                    {
	                        if(args.length >= 2)
	                            forceStartWid(args, sender);
	                        else
	                        if(playerInGame(pname))
	                        {
	                            Game game = getPlayerGame(pname);
	                            game.start();
	                        } else
	                        {
	                            p.sendMessage(notInGame);
	                        }
	                    } else
	                    {
	                        p.sendMessage(noPerm);
	                    }
	                } else
	                if(args[0].equalsIgnoreCase("reload"))
	                {
	                    if(p.hasPermission("bw.setup")){
	                    	
	                    }
	                    }else{
	                        p.sendMessage(noPerm);
	                }
	                } else {
	                    sender.sendMessage(commandNotFound);
	                }
	            }
	       
	        if(sender instanceof ConsoleCommandSender)
	            if(args.length >= 1)
	            {
	                if(args[0].equalsIgnoreCase("start"))
	                {
	                    if(args.length >= 2)
	                        forceStartWid(args, sender);
	                    else
	                        sender.sendMessage((new StringBuilder()).append(ChatColor.RED).append("Usage: /bw start [game]").toString());
	                } else
	                if(args[0].equalsIgnoreCase("reload"))
	                    reloadBedwars(sender);
	                else
	                if(commandExists(args[0]))
	                    sender.sendMessage(playerOnly);
	                else
	                    sender.sendMessage(commandNotFound);
	            } else
	            {
				//LOL ENDE
				if(args[0].equalsIgnoreCase("setmax")){
					if(args.length == 3){
						if(p.hasPermission("bw.setup")){
							if(getConfig().contains("games." + args[2])){
								try {
									String test = args[1];
									int x = Integer.parseInt(test);
									getConfig().set("games." + args[2] + ".Max", x);
									p.sendMessage(name + "You set the maximal player number of " + ChatColor.RED + args[2] + ChatColor.YELLOW + " to " + ChatColor.GREEN + args[1] + ChatColor.YELLOW + ".");
								} catch (NumberFormatException nfe) {
									p.sendMessage(name + "Please use a number!");
								}
							
						
						}else{
							p.sendMessage(name + "There is not a game called " + args[2]);
						}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw setmax [number] [game]");
					}
				}
				if(args[0].equalsIgnoreCase("setbed")){
					if(args.length == 3){
						if(p.hasPermission("bw.setup")){
							if(args[2].equals("red")){
								if(p.getTargetBlock(null, 20).getType() == Material.BED_BLOCK){
									org.bukkit.block.Block tb = p.getTargetBlock(null, 20);
									double x = tb.getX();
									double y = tb.getY();
									double z = tb.getZ();
									String w = tb.getWorld().getName();
									getConfig().set("games." + args[1] + ".red.X", x);
									getConfig().set("games." + args[1] + ".red.Y", y);
									getConfig().set("games." + args[1] + ".red.Z", z);
									getConfig().set("games." + args[1] + ".red.W", w);
									saveConfig();
									reloadConfig();
									p.sendMessage(name + "The Spawn was set.");
								}else{
									p.sendMessage(name + "Please look at a bed 20 blocks away");
								}
							}else{
								if(args[2].equals("blue")){
									if(p.getTargetBlock(null, 20).getType() == Material.BED_BLOCK){
										org.bukkit.block.Block tb = p.getTargetBlock(null, 20);
										double x = tb.getX();
										double y = tb.getY();
										double z = tb.getZ();
										String w = tb.getWorld().getName();
										getConfig().set("games." + args[1] + ".blue.X", x);
										getConfig().set("games." + args[1] + ".blue.Y", y);
										getConfig().set("games." + args[1] + ".blue.Z", z);
										getConfig().set("games." + args[1] + ".blue.W", w);
										saveConfig();
										reloadConfig();
										p.sendMessage(name + "The Spawn was set.");
									}else{
										p.sendMessage(name + "Please look at a bed 20 blocks away");
									}
//								}
//								else{
//									if(args[2].equals("orange")){
//										if(p.getTargetBlock(null, 20).getType() == Material.BED_BLOCK){
//											org.bukkit.block.Block tb = p.getTargetBlock(null, 20);
//											double x = tb.getX();
//											double y = tb.getY();
//											double z = tb.getZ();
//											String w = tb.getWorld().getName();
//											getConfig().set("games." + args[1] + ".orange.X", x);
//											getConfig().set("games." + args[1] + ".orange.Y", y);
//											getConfig().set("games." + args[1] + ".orange.Z", z);
//											getConfig().set("games." + args[1] + ".orange.W", w);
//											saveConfig();
//											reloadConfig();
//											p.sendMessage(name + "The Spawn was set.");
//										}else{
//											p.sendMessage(name + "Please look at a bed 20 blocks away");
//										}
//									}else{
//										if(args[2].equals("green")){
//											if(p.getTargetBlock(null, 20).getType() == Material.BED_BLOCK){
//												org.bukkit.block.Block tb = p.getTargetBlock(null, 20);
//												double x = tb.getX();
//												double y = tb.getY();
//												double z = tb.getZ();
//												String w = tb.getWorld().getName();
//												getConfig().set("games." + args[1] + ".green.X", x);
//												getConfig().set("games." + args[1] + ".green.Y", y);
//												getConfig().set("games." + args[1] + ".green.Z", z);
//												getConfig().set("games." + args[1] + ".green.W", w);
//												saveConfig();
//												reloadConfig();
//												p.sendMessage(name + "The Spawn was set.");
//											}else{
//												p.sendMessage(name + "Please look at a bed 20 blocks away");
//											}
//										}
								}else{
											p.sendMessage(name + ChatColor.RED + args[2] + ChatColor.YELLOW + " is not a valid team.");
											p.sendMessage(name + ChatColor.RED + "red" + ChatColor.YELLOW + "|" + ChatColor.GREEN + "green" + ChatColor.YELLOW + "|" + ChatColor.GOLD + "orange" + ChatColor.YELLOW + "|" + ChatColor.BLUE + "blue");
										}
									
							}
						}else{
							p.sendMessage(name + "No Permission");
						}
					}else{
						p.sendMessage(name + "/bw setbed [game] " + ChatColor.RED + "red"
//					+ ChatColor.YELLOW + "|" + ChatColor.GREEN + "green"
					+ ChatColor.YELLOW + "|"
//					+ ChatColor.GOLD + "orange" + ChatColor.YELLOW + "|"
					+ ChatColor.BLUE + "blue");
					}
					
				}
			}
		}
		
		return true;
	}
	
	private void loadConfig(){	
		FileConfiguration cfg;
		String name = ChatColor.GOLD + "[" + ChatColor.RED + this.getDescription().getName() + ChatColor.GOLD + "] " + ChatColor.YELLOW;
		
		if((new File("plugins/Bedwars/config.yml")).exists())
        {
            cfg = getConfig();
            cfg.options().copyDefaults(true);
        } else
        {
        	Bukkit.getConsoleSender().sendMessage(name + "Where is the config? Creating new one...");
            saveDefaultConfig();
            cfg = getConfig();
            cfg.options().copyDefaults(true);
        }
		
		this.getConfig().options().copyDefaults(true);
		this.saveConfig();
	}
	private boolean setupEconomy(){
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
        if(economyProvider != null){
            economy = economyProvider.getProvider();
        }
        return (economy != null);
    }
	//PUH
	

void loadConfigVars()
{
    redWaitLocs = arrayStringInt(getConfig().getString("locs.redWait").split(" "));
    blueWaitLocs = arrayStringInt(getConfig().getString("locs.blueWait").split(" "));
    redPlayLocs = arrayStringInt(getConfig().getString("locs.redPlay").split(" "));
    bluePlayLocs = arrayStringInt(getConfig().getString("locs.bluePlay").split(" "));
}

int[] arrayStringInt(String strArray[])
{
    int intArray[] = new int[strArray.length];
    for(int i = 0; i < strArray.length; i++)
        try
        {
            intArray[i] = Integer.parseInt(strArray[i]);
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
        }

    return intArray;
}


static void setDisplayName(Player player)
{
    String name = player.getName();
    String bwPrefix = "";
    if(playerInGame(name))
    {
        Game game = getPlayerGame(name);
        if(game.blueTeamContains(name))
            bwPrefix = blueTeamPrefix;
        else
        if(game.redTeamContains(name))
            bwPrefix = redTeamPrefix;
//        else
//        if(game.greenTeamContains(name))
//            bwPrefix = greenTeamPrefix;
//        else
//            if(game.orangeTeamContains(name))
//                bwPrefix = orangeTeamPrefix;
    }
    player.setDisplayName(player.getDisplayName().replace(redTeamPrefix, ""));
    player.setDisplayName(player.getDisplayName().replace(blueTeamPrefix, ""));
//    player.setDisplayName(player.getDisplayName().replace(greenTeamPrefix, ""));
//    player.setDisplayName(player.getDisplayName().replace(orangeTeamPrefix, ""));
    player.setDisplayName((new StringBuilder(String.valueOf(bwPrefix))).append(player.getDisplayName()).toString());
}

static void msgWorld(Player player, String msg)
{
    World w = player.getWorld();
    Player p;
    for(Iterator iterator = w.getPlayers().iterator(); iterator.hasNext(); p.sendMessage(msg))
        p = (Player)iterator.next();

}

static void msgWorld(String world, String msg)
{
    World w = Bukkit.getWorld(world);
    Player p;
    for(Iterator iterator = w.getPlayers().iterator(); iterator.hasNext(); p.sendMessage(msg))
        p = (Player)iterator.next();

}

static void SetTeam(Team team, ChatColor colour)
{
    team.setPrefix((new StringBuilder()).append(colour).toString());
    team.setAllowFriendlyFire(false);
}

static void reloadColours(Scoreboard board, String worldName)
{
    Player aplayer[];
    int j = (aplayer = Bukkit.getServer().getOnlinePlayers()).length;
    for(int i = 0; i < j; i++)
    {
        Player player = aplayer[i];
        if(player.getWorld().getName().equals(worldName))
            player.setScoreboard(board);
    }

}

static void resetPlayerColours(Player player)
{
    String name = player.getName();
    setDisplayName(player);
    if(playerInGame(name))
    {
        Game game = getPlayerGame(name);
        reloadColours(game.getScoreboard(), (new StringBuilder(String.valueOf(mapLoc))).append(name).toString());
    }
}

static boolean gameExists(String name)
{
    for(Iterator iterator = games.iterator(); iterator.hasNext();)
    {
        Game game = (Game)iterator.next();
        if(game.getName().equalsIgnoreCase(name))
            return true;
    }

    return false;
}

static Game getGame(String name)
{
    for(Iterator iterator = games.iterator(); iterator.hasNext();)
    {
        Game game = (Game)iterator.next();
        if(game.getName().equalsIgnoreCase(name))
            return game;
    }

    return null;
}

static boolean playerInGame(String name)
{
    for(Iterator iterator = games.iterator(); iterator.hasNext();)
    {
        Game game = (Game)iterator.next();
        if(game.teamContains(name))
            return true;
    }

    return false;
}

static Game getPlayerGame(String name)
{
    for(Iterator iterator = games.iterator(); iterator.hasNext();)
    {
        Game game = (Game)iterator.next();
        if(game.teamContains(name))
            return game;
    }

    return null;
}

static void resetPlayerState(Player player)
{
    resetPlayerColours(player);
    goNaked(player);
    org.bukkit.Location l = ((World)Bukkit.getServer().getWorlds().get(0)).getSpawnLocation();
    player.teleport(l);
    player.setFallDistance(0.0F);
}

static boolean commandExists(String command)
{
    return command.equalsIgnoreCase("join") || command.equalsIgnoreCase("vote") || command.equalsIgnoreCase("t") || command.equalsIgnoreCase("start") || command.equalsIgnoreCase("reload") || command.equalsIgnoreCase("leave");
}

static void goNaked(Player player)
{
    PlayerInventory inv = player.getInventory();
    inv.setArmorContents(new ItemStack[4]);
    inv.clear();
    player.updateInventory();
    player.setFoodLevel(20);
    player.setBedSpawnLocation(null);
    player.setHealth(20D);
    player.setFireTicks(0);
    PotionEffect effect;
    for(Iterator iterator = player.getActivePotionEffects().iterator(); iterator.hasNext(); player.removePotionEffect(effect.getType()))
        effect = (PotionEffect)iterator.next();

    player.setGameMode(GameMode.SURVIVAL);
}

void forceStartWid(String args[], CommandSender sender)
{
    if(args.length >= 2)
        if(gameExists(args[1]))
        {
            Game game = getGame(args[1]);
            game.start();
            sender.sendMessage((new StringBuilder()).append(ChatColor.GREEN).append("Forced ").append(game.getName()).toString());
        } else
        {
            sender.sendMessage((new StringBuilder()).append(ChatColor.RED).append("'").append(args[1]).append("' does not exist!").toString());
        }
}


void reloadBedwars(CommandSender sender)
{
    sender.sendMessage((new StringBuilder()).append(ChatColor.YELLOW).append("Reload of the config, Bedwars is happy *tweep*").toString());
    reloadConfig();
    loadConfigVars();
}



static void copyWorld(String worldName, String backupName)
{
    File destDir = new File((new StringBuilder(String.valueOf(mapDir))).append(File.separator).append(mapPrefix).append(worldName).toString());
    File srcFile = new File((new StringBuilder(String.valueOf(mapDir))).append(File.separator).append(backupName).toString());
    try
    {
        FileUtils.copyDirectory(srcFile, destDir);
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}

static ArrayList games = new ArrayList();
static String pluginName;
static String mapDir;
static String mapPrefix;
static String mapWaitPrefix;
static String mapLoc;
static String bwWorldBackup = "bw";
static String waitWorldBackup = "wait";
static String mapWaitLoc;
static int defaultGameSize = 8;
static ChatColor redTeamColour;
static ChatColor blueTeamColour;
//static ChatColor greenTeamColour;
//static ChatColor orangeTeamColour;
static String redTeamPrefix;
static String blueTeamPrefix;
//static String greenTeamPrefix;
//static String orangeTeamPrefix;
static String noPerm;
static String playerOnly;
static String commandNotFound;
static String notInGame;
static String startedSignMsg;
static String waitingSignMsg;
static String playerNotFound;
static int titleSignLine = 0;
static int statusSignLine = 1;
static int playersSignLine = 2;
static int keySignLine = 3;
static String signTitle = "[BW]";
static ChatColor signTitleColour;
static int redWaitLocs[] = new int[3];
static int blueWaitLocs[] = new int[3];
static int redPlayLocs[] = new int[3];
static int bluePlayLocs[] = new int[3];
static int spawnLocs[] = new int[3];
static ScoreboardManager manager;
static HashMap items = new HashMap();
static HashMap armors = new HashMap();
static HashMap bedSpawnLocations = new HashMap();
static HashMap levels = new HashMap();


static 
{
    pluginName = "Bedwars";
    mapDir = (new StringBuilder("plugins")).append(File.separator).append(pluginName).append(File.separator).append("maps").toString();
    mapPrefix = "bw_";
    mapWaitPrefix = "wait_";
    mapLoc = (new StringBuilder(String.valueOf(mapDir))).append(File.separator).append(mapPrefix).toString();
    mapWaitLoc = (new StringBuilder(String.valueOf(mapLoc))).append(mapWaitPrefix).toString();
    redTeamColour = ChatColor.RED;
    blueTeamColour = ChatColor.DARK_AQUA;
//    greenTeamColour = ChatColor.DARK_GREEN;
//    orangeTeamColour = ChatColor.GOLD;
    redTeamPrefix = (new StringBuilder()).append(redTeamColour).append("[RED] ").append(ChatColor.RESET).toString();
    blueTeamPrefix = (new StringBuilder()).append(blueTeamColour).append("[BLUE] ").append(ChatColor.RESET).toString();
//    greenTeamPrefix = (new StringBuilder()).append(blueTeamColour).append("[GREEN] ").append(ChatColor.RESET).toString();
//    orangeTeamPrefix = (new StringBuilder()).append(blueTeamColour).append("[ORANGE] ").append(ChatColor.RESET).toString();
    noPerm = (new StringBuilder()).append(ChatColor.RED).append("You don't have permission to do that!").toString();
    playerOnly = (new StringBuilder()).append(ChatColor.RED).append("You must be a player!").toString();
    commandNotFound = (new StringBuilder()).append(ChatColor.RED).append("This command does not exist!").toString();
    notInGame = (new StringBuilder()).append(ChatColor.RED).append("You must be in a game!").toString();
    startedSignMsg = (new StringBuilder()).append(ChatColor.DARK_GRAY).append("In Game").toString();
    waitingSignMsg = (new StringBuilder()).append(ChatColor.DARK_BLUE).append("Joinable").toString();
    playerNotFound = (new StringBuilder()).append(ChatColor.RED).append("Player not found!").toString();
    signTitleColour = ChatColor.DARK_RED;
    
}
}
