Source code

This is the code for my only class Enders_Game:

package Enders_Game;

import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ConcurrentModificationException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import javax.xml.parsers.DocumentBuilderFactory;

import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Team;
import org.bukkit.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Enders_Game extends JavaPlugin implements Listener {
	public boolean start = true;
	public boolean messagestoppa = true;
	public HashMap<Player, ItemStack[]> inventory = new HashMap<Player, ItemStack[]>();
	public HashMap<Player, ItemStack[]> armor = new HashMap<Player, ItemStack[]>();
	public Map<Player, Boolean> wait = new ConcurrentHashMap<Player, Boolean>();
	public Map<Player, Vector> velocity = new ConcurrentHashMap<Player, Vector>();
	public Map<Arrow, String> arrows = new ConcurrentHashMap<Arrow, String>();
	public Map<OfflinePlayer, Block> frozen = new ConcurrentHashMap<OfflinePlayer, Block>();
	public Map<Player, Location> joinLoc = new ConcurrentHashMap<Player, Location>();
	public Map<Location, String> signLoc = new ConcurrentHashMap<Location, String>();
	public Map<Player, String> lobbyList = new ConcurrentHashMap<Player, String>();
	public Map<Block, String> gates = new ConcurrentHashMap<Block, String>();
	public Map<Player, Location> spectator = new ConcurrentHashMap<Player, Location>();
	public Map<Player, Boolean> recharge = new ConcurrentHashMap<Player, Boolean>();
	public int redfroz = 0;
	public int bluefroz = 0;
	public String version;
	public String link;
	@SuppressWarnings("deprecation")
	public void onEnable() {
		if (updateNeeded()) {
			getLogger().info("A new version of Enders Game is available!");
			getLogger().info("download it from: " + link);
			for (Player player : getServer().getOnlinePlayers()) {
				if (player.isOp()) {
					player.sendMessage("A new version of Enders Game is available!");
					player.sendMessage("download it from: " + link);
				}
			}
		}
		getServer().getPluginManager().registerEvents(this, this);
		if (!(getConfig().contains("launch_speed"))) {
			getConfig().set("launch_speed", 4);
		}
		saveConfig();
		int i = 1;
		while (getConfig().contains("sign" + Integer.toString(i))) {
			World world = getServer().getWorld(getConfig().getString("sign" + Integer.toString(i) + ".world"));
			Location loc = new Location(world, 
					getConfig().getDouble("sign" + Integer.toString(i) + ".x"), 
					getConfig().getDouble("sign" + Integer.toString(i) + ".y"),
					getConfig().getDouble("sign" + Integer.toString(i) + ".z"));
			String value = getConfig().getString("sign" + Integer.toString(i) + ".value");
			signLoc.put(loc, value);
			i ++;
		}
		try {
			Team red = getServer().getScoreboardManager().getMainScoreboard().registerNewTeam("Red");
			Team blue = getServer().getScoreboardManager().getMainScoreboard().registerNewTeam("Blue");
			red.setAllowFriendlyFire(false);
			blue.setAllowFriendlyFire(false);
			Set<OfflinePlayer> redset = red.getPlayers();
			for (OfflinePlayer player : redset) {
				red.removePlayer(player);
			}
			Set<OfflinePlayer> blueset = blue.getPlayers();
			for (OfflinePlayer player : blueset) {
				blue.removePlayer(player);
			}
		}
		catch (IllegalArgumentException e){
			Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
			Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
			Set<OfflinePlayer> redset = red.getPlayers();
			if (red.getSize() > 0) {
				for (OfflinePlayer player : redset) {
					red.removePlayer(player);
				}
			}
			if (blue.getSize() > 0) {
				Set<OfflinePlayer> blueset = blue.getPlayers();
				for (OfflinePlayer player : blueset) {
					blue.removePlayer(player);
				}
			}
		}
		final Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
			public void run(){
				if (start) {
					if (lobbyList.size() >= getConfig().getInt("min_game_size")) {
						gameStart();
					}
				}
				Objective teams = getServer().getScoreboardManager().getNewScoreboard().registerNewObjective("teams", "Teams");
				teams.setDisplaySlot(DisplaySlot.SIDEBAR);
				teams.getScore("Red Players:").setScore(red.getSize() - redfroz);
				teams.getScore("Blue Players:").setScore(red.getSize() - bluefroz);
			}
		}, 0L, 20L);
	}
	public void onDisable() {
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		int i = 1;
		while (getConfig().contains("sign" + Integer.toString(i))) {
			getConfig().set("sign" + Integer.toString(i), null);
			i ++;
		}
		saveConfig();
		i = 0;
		for (Location loc : signLoc.keySet()) {
			i ++;
			getConfig().set("sign" + Integer.toString(i) + ".x", loc.getX());
			getConfig().set("sign" + Integer.toString(i) + ".y", loc.getY());
			getConfig().set("sign" + Integer.toString(i) + ".z", loc.getZ());
			getConfig().set("sign" + Integer.toString(i) + ".world", loc.getWorld().getName());
			getConfig().set("sign" + Integer.toString(i) + ".value", signLoc.get(loc));
		}
		saveConfig();
		i = 1;
		try {
			Set<OfflinePlayer> redset = red.getPlayers();
			for (OfflinePlayer player : redset) {
				red.removePlayer(player);
			}
		}
		catch (NullPointerException e) {
		}
		try {
			Set<OfflinePlayer> blueset = blue.getPlayers();
			for (OfflinePlayer player : blueset) {
				blue.removePlayer(player);
			}
		}
		catch (NullPointerException e) {
		}
	}
	public URL updateChecker() {
		try {
			URL url = new URL("http://dev.bukkit.org/bukkit-plugins/enders-game/files.rss");
			return url;
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		return null;
	}
	public boolean updateNeeded() {
		try {
			InputStream input = updateChecker().openConnection().getInputStream();
			Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);
		    Node latestFile = document.getElementsByTagName("item").item(0);
		    NodeList children = latestFile.getChildNodes();
		    version = children.item(1).getTextContent().replaceAll("[a-zA-z ]", "");
		    link = children.item(3).getTextContent();
		    if (!(this.getDescription().getVersion().equals(this.version))) {
		          return true;
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	public void gameStart() {
		start = false;
		for (Player player : lobbyList.keySet()) {
			join(player);
			lobbyList.remove(player);
		}
		redfroz = 0;
		bluefroz = 0;
	}
	@SuppressWarnings("deprecation")
	public void gameEnd(final String team) {
		start = true;
		final Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		final Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		ChatColor c;
		if (team == "red") {
			c = ChatColor.RED;
		}
		else {
			c = ChatColor.BLUE;
		}
		for (OfflinePlayer player1 : red.getPlayers()) {
			Player player = (Player) player1;
			player.sendMessage("The " + (c + team + " team") + ChatColor.WHITE + " has won the game!");
		}
		for (OfflinePlayer player1 : blue.getPlayers()) {
			Player player = (Player) player1;
			player.sendMessage("The " + (c + team + " team") + ChatColor.WHITE + " has won the game!");
		}
		messagestoppa = false;
		getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {
			public void run() {
				for (OfflinePlayer player1 : red.getPlayers()) {
					Player player = (Player) player1;
					red.removePlayer(player);
					exit(player);
				}
				for (OfflinePlayer player1 : blue.getPlayers()) {
					Player player = (Player) player1;
					blue.removePlayer(player);
					exit(player);
				}
				messagestoppa = true;
			}
		}, 60L);
	}
	@EventHandler
	public void onSignPlace(SignChangeEvent event) {
		Player player = event.getPlayer();
		if (event.getLine(0).equalsIgnoreCase("[Enders Game]")) {
			if (player.isOp() || player.hasPermission("endersgame.setup")) {
				int i = 1;
				while (getConfig().contains("sign" + i)) {
					i ++;
				}
				saveConfig();
				reloadConfig();
				event.setLine(0, ChatColor.DARK_GREEN + "[Enders Game]");
				signLoc.put(event.getBlock().getLocation(), "hi");
				player.sendMessage(ChatColor.DARK_AQUA + "You have succesfully created  an Enders Game sign!");
			}
			else {
				event.setCancelled(true);
			}
		}
	}
	@EventHandler
	public void onPlayerBreakBlock(BlockBreakEvent event) {
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		Block block = event.getBlock();
		Player player = event.getPlayer();
		if (red.hasPlayer(player) || blue.hasPlayer(player)) {
			event.setCancelled(true);
		}
		if (signLoc.containsKey(block.getLocation())) {
			if (player.isOp()) {
				signLoc.remove(block.getLocation());
				player.sendMessage(ChatColor.BLUE + "You have succesfully removed an Enders Game sign!");
			}
			else {
				event.setCancelled(true);
				player.sendMessage(ChatColor.DARK_RED + "Only Ops can remove join signs!");
			}
		}
	}
	@EventHandler
	public void onPlayerInteract(PlayerInteractEvent event) {
		Action action = event.getAction();
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		Player player = event.getPlayer();
		if (action == Action.RIGHT_CLICK_BLOCK) {
			if (event.getClickedBlock() != null) {
				if (player.hasPermission("endersgame.join.sign")  || getConfig().getBoolean("can_join_by_default") || player.isOp()) {
					if (event.getClickedBlock().getType() == Material.SIGN || event.getClickedBlock().getType() == Material.SIGN_POST) {
						if (signLoc.containsKey(event.getClickedBlock().getLocation())) {
							if(!(red.hasPlayer(player) || blue.hasPlayer(player))) {
								player.teleport(new Location(getServer().getWorld(getConfig().getString("lobby.world")),
									getConfig().getInt("lobby.x"),
									getConfig().getInt("lobby.y"),
									getConfig().getInt("lobby.z")));
								joinLoc.put(player, player.getLocation());
								lobbyList.put(player, "hi");
							}
						}
					}
				}
			}
		}
	}
	public void exit(Player player) {
		player.setScoreboard(getServer().getScoreboardManager().getNewScoreboard());
		if (inventory.containsKey(player)) {
			player.getInventory().setContents(inventory.get(player));
		}
		if (velocity.containsKey(player)) {
			velocity.remove(player);
		}
		player.setFlySpeed(0.1f);
		try {
			player.setAllowFlight(false);
		}
		catch (ConcurrentModificationException e) {
		}
		player.getInventory().setArmorContents(armor.get(player));
		player.setGameMode(GameMode.SURVIVAL);
		player.teleport(new Location(getServer().getWorld(getConfig().getString("hub.world")),
				getConfig().getInt("hub.x"),
				getConfig().getInt("hub.y"),
				getConfig().getInt("hub.z")));
	}
	@EventHandler
	public void onPlayerJoin(PlayerJoinEvent event) {
		if (recharge.containsKey(event.getPlayer())) {
			recharge.remove(event.getPlayer());
		}
	}
	@EventHandler
	public void onPlayerDeath(PlayerDeathEvent event) {
		event.setKeepInventory(true);
	}
	@EventHandler
	public void onPlayerDamaged(EntityDamageEvent event) {
		if (event.getEntity() instanceof Player) {
			Player player = (Player) event.getEntity();
			if (player.getHealth() == 0) {
				PlayerInventory inv = player.getInventory();
				Location loc = player.getLocation();
				loc.getBlock().setType(Material.ARMOR_STAND, false);
				ArmorStand stand = (ArmorStand) loc.getBlock();
				stand.setBasePlate(false);
				stand.setBoots(inv.getBoots());
				stand.setChestplate(inv.getChestplate());
				stand.setLeggings(inv.getLeggings());
				stand.setHelmet(new ItemStack(Material.SKULL));
				stand.setVelocity(velocity.get(player));
			}
		}
	}
	public void join(Player player) {
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		if (red.getSize() >= blue.getSize()) {
			blue.addPlayer(player);
			player.teleport(new Location(getServer().getWorld(getConfig().getString("blue.world")),
					getConfig().getInt("blue.x"),
					getConfig().getInt("blue.y"),
					getConfig().getInt("blue.z")));
			inventory.put(player, player.getInventory().getContents());
			player.getInventory().clear();
			ItemStack chestplate = new ItemStack(Material.LEATHER_CHESTPLATE);
			LeatherArmorMeta am = (LeatherArmorMeta) chestplate.getItemMeta();
			am.setColor(Color.BLUE);
			am.addEnchant(Enchantment.DURABILITY, 100000, true);
			am.setDisplayName("Blue Team");
			chestplate.setItemMeta(am);
			player.getInventory().setChestplate(chestplate);
		}
		else{
			red.addPlayer(player);
			player.teleport(new Location(getServer().getWorld(getConfig().getString("red.world")),
					getConfig().getInt("red.x"),
					getConfig().getInt("red.y"),
					getConfig().getInt("red.z")));
			inventory.put(player, player.getInventory().getContents());
			player.getInventory().clear();
			ItemStack chestplate = new ItemStack(Material.LEATHER_CHESTPLATE);
			LeatherArmorMeta am = (LeatherArmorMeta) chestplate.getItemMeta();
			am.setColor(Color.RED);
			am.addEnchant(Enchantment.DURABILITY, 100000, true);
			am.setDisplayName("Red Team");
			chestplate.setItemMeta(am);
			player.getInventory().setChestplate(chestplate);
		}
		velocity.put(player, new Vector(0,0,0));
		ItemStack flashgun = new ItemStack(Material.BLAZE_ROD);
		ItemMeta im = flashgun.getItemMeta();
		im.setDisplayName(ChatColor.AQUA + "Flash Gun");
		flashgun.setItemMeta(im);
		player.getInventory().addItem(flashgun);
		wait.put(player, false);
		player.setGameMode(GameMode.SURVIVAL);
		try {
			player.setAllowFlight(true);
		}
		catch(ConcurrentModificationException e) {
		}
		player.getInventory().setHelmet(new ItemStack(Material.GLASS));
		ItemStack leggings = new ItemStack(Material.LEATHER_LEGGINGS);
		LeatherArmorMeta lm = (LeatherArmorMeta) leggings.getItemMeta();
		lm.setColor(Color.WHITE);
		leggings.setItemMeta(lm);
		player.getInventory().setLeggings(leggings);
		ItemStack boots = new ItemStack(Material.LEATHER_BOOTS);
		LeatherArmorMeta bm = (LeatherArmorMeta) boots.getItemMeta();
		bm.setColor(Color.WHITE);
		boots.setItemMeta(bm);
		player.getInventory().setBoots(boots);
		player.sendMessage(ChatColor.GOLD + "You have succesfully joined Enders Game");
	}
	@EventHandler
	public void onPlayerRespawn(PlayerRespawnEvent event) {
		final Player player = event.getPlayer();
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		if (red.hasPlayer(player) || blue.hasPlayer(player)) {
			if (blue.hasPlayer(player)) {
				bluefroz ++;
				getServer().getScheduler().runTaskLater(this, new Runnable() {
					public void run() {
						player.teleport(new Location(getServer().getWorld(getConfig().getString("blue.world")),
								getConfig().getInt("blue.x"),
								getConfig().getInt("blue.y"),
								getConfig().getInt("blue.z")));
						}
				}, 5L);
				teleBlue(player);
			}
			else {
				redfroz ++;
				getServer().getScheduler().runTaskLater(this, new Runnable() {
					public void run() {
						player.teleport(new Location(getServer().getWorld(getConfig().getString("red.world")),
								getConfig().getInt("red.x"),
								getConfig().getInt("red.y"),
								getConfig().getInt("red.z")));
						teleRed(player);
					}
				}, 5L);
			}
			if (getConfig().contains(player.getName() + ".deaths")) {
				getConfig().set(player.getName() + ".deaths", getConfig().getInt(player.getName() + ".deaths"));
			}
			else {
				getConfig().set(player.getName() + ".deaths", 1);
			}
			saveConfig();
			player.setGameMode(GameMode.SPECTATOR);
		}
	}
	@SuppressWarnings("deprecation")
	public void countdown(final Player player) {
		getServer().getScheduler().scheduleAsyncRepeatingTask(this, new Runnable() {
			int i = 30;
			public void run() {
				if (i == 20 || i == 15 || ((i < 11) && (i > 0))) {
					player.sendMessage(ChatColor.BLUE + ("You will respawn in " + i + " seconds!"));
				}
				i --;
			}
		}, 0L, 20L);
	}
	public void teleBlue(final Player player) {
		getServer().getScheduler().runTaskLater(this, new Runnable() {
			public void run() {
				player.teleport(new Location(getServer().getWorld(getConfig().getString("blue.world")),
						getConfig().getInt("blue.x"),
						getConfig().getInt("blue.y"),
						getConfig().getInt("blue.z")));
				player.setGameMode(GameMode.SURVIVAL);
			}
		}, 600L);
	}
	public void teleRed(final Player player) {
		getServer().getScheduler().runTaskLater(this, new Runnable() {
			public void run() {
				player.teleport(new Location(getServer().getWorld(getConfig().getString("red.world")),
						getConfig().getInt("red.x"),
						getConfig().getInt("red.y"),
						getConfig().getInt("red.z")));
				player.setGameMode(GameMode.SURVIVAL);
			}
		}, 600L);
	}
	@EventHandler
	public void launchCheck(PlayerToggleFlightEvent event) {
		Player player = event.getPlayer();
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		Location loc = player.getLocation().getBlock().getLocation();
		if (!(frozen.containsKey(player))) {
			if (wait.containsKey(player)) {
				if (red.hasPlayer(player) || blue.hasPlayer(player)){
					for (int x = -2; x < 3; x++) {
						for (int z = -2; z < 3; z++) {
							 for (int y = -2; y < 4; y++) {
								loc = player.getLocation();
								loc.add(x, y, z);
								if (loc.getBlock().getType() != Material.AIR) {
									player.getPlayer().setVelocity(player.getLocation().getDirection().multiply(Math.sqrt(5 / getConfig().getInt("launch_speed"))));
									wait.replace(player, true);
									velocity.replace(player, player.getVelocity());
									delay(player);
									player.setFlying(true);
								}
							}
						}
					}
					event.setCancelled(true);
				}
			}
		}
	}
	@EventHandler
	public void onPlayerVelocity(PlayerMoveEvent event) {
		Player player = event.getPlayer();
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		Objective teams = getServer().getScoreboardManager().getNewScoreboard().registerNewObjective("teams", "Teams");
		teams.setDisplaySlot(DisplaySlot.SIDEBAR);
		teams.setDisplayName("Stats");
		try {
			if (!(red.getSize() - redfroz == 0 || blue.getSize() - bluefroz == 0)) {
				teams.getScore("Blue Odds:").setScore((Math.round((((redfroz * (blue.getSize() - bluefroz)) - (bluefroz * (red.getSize() - redfroz)))  * (10 / (red.getSize() - redfroz))) + 50)));
				teams.getScore("Red Odds").setScore(100 - (Math.round((((redfroz * (blue.getSize() - bluefroz)) - (bluefroz * (red.getSize() - redfroz)))  * (10 / (red.getSize() - redfroz))) + 50)));
			}
			teams.getScore("Red Players:").setScore(red.getSize() - redfroz);
			teams.getScore("Blue Players:").setScore(red.getSize() - bluefroz);
			if (red.hasPlayer(player) || blue.hasPlayer(player)) {
				player.setScoreboard(teams.getScoreboard());
			}
			else {
				player.setScoreboard(getServer().getScoreboardManager().getNewScoreboard());
			}
		}
		catch (IllegalStateException e) {
			
		}
		Location loc = player.getLocation();
		if (!(frozen.containsKey(player))){
			if (red.hasPlayer(player) || blue.hasPlayer(player)) {
				player.setFlySpeed(1);
				try {
					player.setVelocity(velocity.get(player));
					player.setFlySpeed(0);
					for (int x = -1; x < 2; x++) {
						for (int z = -1; z < 2; z++) {
							 for (int y = -1; y < 3; y++) {
								loc = player.getLocation();
								loc.add(x, y, z);
								if (loc.getBlock().getType() != Material.AIR) {
									player.setAllowFlight(true);
									player.setFlying(true);
									player.setFlySpeed(0);
									if (!(wait.get(player))) {
										if (velocity.containsKey(player)) {
											wait.replace(player, true);
											velocity.replace(player, new Vector(0,0,0));
										}
									}
									if (messagestoppa) {
										if (loc.getBlock().getType() == Material.NETHERRACK && blue.hasPlayer(player)) {
											gameEnd("blue");
										}
										if (loc.getBlock().getType() == Material.ICE && red.hasPlayer(player)) {
											gameEnd("red");
										}
									}
								}
							}
						}
					}
				}
				catch(NullPointerException e ) {
				}
			}
		}
	}
	@SuppressWarnings("deprecation")
	@EventHandler
	public void Shoot(PlayerInteractEvent event) {
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		final Player player = event.getPlayer();
		if (!(frozen.containsKey(player))) {
			if (red.hasPlayer(player) || blue.hasPlayer(player)) {
				if (!(recharge.containsKey(player))) {
					recharge.put(player, true);
				}
				if (!(recharge.get(player))) {
					return;
				}
				Arrow arrow = player.launchProjectile(Arrow.class, player.getLocation().getDirection().multiply(3));
				if (red.hasPlayer(player)) {
					arrows.put(arrow, "red");
				}
				if (blue.hasPlayer(player)) {
					arrows.put(arrow, "blue");
				}
				recharge.replace(player, false);
				getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {
					public void run() {
						try {
							recharge.put(player, false);
						}
						catch (Exception e) {
							return;
						}
					}
				}, 10L);
			}
		}
	}
	@EventHandler
	public void onPlayerShot(EntityDamageByEntityEvent event) {
		if (event.getEntity() instanceof Player) {
			if (event.getCause() == DamageCause.PROJECTILE) {
				try {
					Arrow arrow = (Arrow) event.getDamager();
					Player player = (Player) event.getEntity();
					Player attacker = (Player) arrow.getShooter();
					Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
					Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
					if (red.hasPlayer(player) || blue.hasPlayer(player)) {
						String team = "";
						if (red.hasPlayer(player)) {
							team = "red";
						}
						else {
							team = "blue";
						}
						String attackerteam = "";
						if (red.hasPlayer(attacker)) {
							attackerteam = "red";
						}
						if (blue.hasPlayer(attacker)) {
							attackerteam = "blue";
						}
						if (attackerteam.equalsIgnoreCase(team) || arrows.get(arrow).equalsIgnoreCase(team)) {
							event.setDamage(0);
						}
					}
				}
				catch (ClassCastException e){
					return;
				}
			}
		}
	}
	public void regen(final Player player) {
		final Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		getServer().getScheduler().runTaskLater(this, new Runnable() {
			public void run() {
				frozen.remove(player);
				if (red.hasPlayer(player)) {
					player.teleport(new Location(getServer().getWorld(getConfig().getString("red.world")),
							getConfig().getInt("red.x"),
							getConfig().getInt("red.y"),
							getConfig().getInt("red.z")));
				}
				else {
					player.teleport(new Location(getServer().getWorld(getConfig().getString("blue.world")),
							getConfig().getInt("blue.x"),
							getConfig().getInt("blue.y"),
							getConfig().getInt("blue.z")));
				}
			}
		}, 600L);
	}
	public void delay(final Player player) {
		getServer().getScheduler().runTaskLater(this, new Runnable() {
			public void run() {
				wait.replace(player, false);
			}
		}, 5L);
	}
	@EventHandler 
	public void onPlayerOpenInventory(InventoryOpenEvent event) {
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		Player player = (Player) event.getPlayer();
		if (red.hasPlayer(player) || blue.hasPlayer(player)) {
			event.setCancelled(true);
		}
	}
	@EventHandler
	public void onPlayerQuit(PlayerQuitEvent event) {
		Player player = event.getPlayer();
		Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
		Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
		if (red.hasPlayer(player)) {
			red.removePlayer(player);
		}
		else {
			blue.removePlayer(player);
		}
		if (inventory.containsKey(player)) {
			player.getInventory().setContents(inventory.get(player));
		}
		velocity.remove(player);
		player.setFlySpeed(0.1f);
		player.setGameMode(GameMode.SURVIVAL);
		player.teleport(new Location(getServer().getWorld(getConfig().getString("hub.world")),
				getConfig().getInt("hub.x"),
				getConfig().getInt("hub.y"),
				getConfig().getInt("hub.z")));
		player.sendMessage(ChatColor.RED + "You have been removed from Enders Game!");
		
	}
	@SuppressWarnings("deprecation")
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if (sender instanceof Player) {
			Team red = getServer().getScoreboardManager().getMainScoreboard().getTeam("Red");
			Team blue = getServer().getScoreboardManager().getMainScoreboard().getTeam("Blue");
			Player player = (Player) sender;
			if (label.equalsIgnoreCase("eg") || label.equalsIgnoreCase("endersgame")) {
				if (args.length != 0) {
					if (player.hasPermission("endersgame.setup") || player.isOp()) {
						if (args[0].equalsIgnoreCase("setspawn") && (args[1].equalsIgnoreCase("red") || 
								args[1].equalsIgnoreCase("blue") || args[1].equalsIgnoreCase("hub") ||
								args[1].equalsIgnoreCase("lobby"))) {
							getConfig().set(args[1] + ".x", player.getLocation().getBlockX());
							getConfig().set(args[1] + ".y", player.getLocation().getBlockY());
							getConfig().set(args[1] + ".z", player.getLocation().getBlockZ());
							getConfig().set(args[1] + ".world", player.getLocation().getWorld().getName());
							saveConfig();
							reloadConfig();
							player.sendMessage(ChatColor.BLUE + "You have succesfully set the spawnpoint of " + args[1] + "!");
						}
						if (args[0].equalsIgnoreCase("setgate") && args[1] != null) {
							if (args[1].equalsIgnoreCase("redgate") || args[1].equalsIgnoreCase("bluegate")) {
								getConfig().set(args[1] + ".x", player.getLocation().getBlockX());
								getConfig().set(args[1] + ".y", player.getLocation().getBlockY() - 1);
								getConfig().set(args[1] + ".z", player.getLocation().getBlockZ());
								getConfig().set(args[1] + ".world", player.getLocation().getWorld().getName());
								saveConfig();
								reloadConfig();
								player.sendMessage(ChatColor.BLUE + "You have succesfully set the " + args[1] + "!");
							}
						}
					}
					if (args[0].equalsIgnoreCase("forcestart") || args[0].equalsIgnoreCase("fs") || args[0].equalsIgnoreCase("start")) {
						if (player.isOp() || player.hasPermission("endersgame.forcestart")) {
							if (start) {
								gameStart();
							}
							else {
								player.sendMessage(ChatColor.DARK_RED  + "A game is already in progress!");
							}
						}
					}
					if (args[0].equalsIgnoreCase("perm") && args.length > 1) {
						if (getServer().getPlayer(args[1]) != null) {
							Player permee = getServer().getPlayer(args[1]);
							if (player.hasPermission("endersgame.admin") || player.isOp()) {
								if (args.length > 2) {
									String attach = "";
									if (args[2].equalsIgnoreCase("*")) {
										attach = "*";
									}
									else if (args[2].equalsIgnoreCase("force")) {
										attach = "forcestart";
									}
									else if(args[2].equalsIgnoreCase("setup")) {
										attach = "setup";
									}
									else if(args[2].equalsIgnoreCase("joinall")) {
										attach = "join.*";
									}
									else if (args[2].equalsIgnoreCase("joinsign")) {
										attach = "join.sign";
									}
									else if (args[2].equalsIgnoreCase("joincommand")) {
										attach = "join.command";
									}
									else if (args[2].equalsIgnoreCase("admin")) {
										attach = "admin";
									}
									String last = "";
									String take = "been given";
									boolean value = true;
									if (args.length > 3) {
										if (args[3].equalsIgnoreCase("false") || args[3].equalsIgnoreCase("take")) {
											value = false;
											take = "had the";
											last = " taken away";
										}
									}
									else {
										player.sendMessage(ChatColor.DARK_RED + "Invalid arguments!");
										return false;
									}
									permee.addAttachment(this, "endersgame." + attach, value);
									player.sendMessage(ChatColor.BLUE + "Permission succesfully applied!");
									permee.sendMessage(ChatColor.BLUE + "You have " + take + " the permission endersgame." + attach + last + "!");
								}
								else {
									player.sendMessage(ChatColor.DARK_RED + "Not enough arguments!");
								}
							}
							else {
								player.sendMessage(ChatColor.DARK_RED + "You are not an admin!");
							}
						}
						else {
							player.sendMessage(ChatColor.DARK_RED + "The player you specified is not online!");
						}
					}
					if (args[0].equalsIgnoreCase("spectate")){
						if (spectator.containsKey(player)) {
							spectator.remove(player);
							player.setGameMode(GameMode.SURVIVAL);
							player.teleport(new Location(getServer().getWorld(getConfig().getString("hub.world")),
									getConfig().getInt("hub.x"),
									getConfig().getInt("hub.y"),
									getConfig().getInt("hub.z")));
						}
						else {
							player.teleport(new Location(getServer().getWorld(getConfig().getString("red.world")),
									getConfig().getInt("red.x"),
									getConfig().getInt("red.y"),
									getConfig().getInt("red.z")));
							player.setGameMode(GameMode.SPECTATOR);
							spectator.put(player, player.getLocation());
						}
					}
				}
				if (args.length == 0) {
					if (red.hasPlayer(player) || blue.hasPlayer(player)) {
						return false;
					}
					if (player.hasPermission("endersgame.join.command")) {
						if (!(lobbyList.containsKey(player))) {
							player.teleport(new Location(getServer().getWorld(getConfig().getString("lobby.world")),
									getConfig().getInt("lobby.x"),
									getConfig().getInt("lobby.y"),
									getConfig().getInt("lobby.z")));
							lobbyList.put(player, "hi");
							armor.put(player, player.getInventory().getArmorContents());
							player.sendMessage(ChatColor.BLUE + "You have succesfully joined the waiting lobby!");
						}
						else {
							player.sendMessage(ChatColor.DARK_RED + "You are already in the waiting lobby!");
						}
					}
				}
			}	
		}
		return false;
	}
}

Comments

Posts Quoted:
Reply
Clear All Quotes