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