/* * * ################################################ * * DISABLE * * ################################################ * * */ public void disable() { disabled = true; spawns.clear(); scoreBoard.reset(); for (int a = 0; a < activePlayers.size(); a = 0) { try { Player p = activePlayers.get(a); msgmgr.sendMessage(PrefixType.WARNING, "Game disabled!", p); playerLeave(p, true); } catch (Exception e) { } } for (int a = 0; a < inactivePlayers.size(); a = 0) { try { Player p = inactivePlayers.remove(a); msgmgr.sendMessage(PrefixType.WARNING, "Game disabled!", p); } catch (Exception e) { } } clearSpecs(); queue.clear(); endGame(); LobbyManager.getInstance().updateWall(gameID); MessageManager.getInstance() .broadcastFMessage(PrefixType.INFO, "broadcast.gamedisabled", "arena-" + gameID); }
public void addSpectator(final Player p) { if (mode != GameMode.INGAME) { msgmgr.sendMessage(PrefixType.WARNING, "You can only spectate running games!", p); return; } p.teleport(SettingsManager.getInstance().getSpawnPoint(gameID, 1).add(0, 10, 0)); HookManager.getInstance().runHook("PLAYER_SPECTATE", "player-" + p.getName()); for (Player pl : Bukkit.getOnlinePlayers()) { pl.hidePlayer(p); } Bukkit.getServer() .getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { @SuppressWarnings("deprecation") public void run() { p.setFlying(false); p.setAllowFlight(false); p.setWalkSpeed(0.2F); p.setFireTicks(0); p.getInventory().clear(); p.getEquipment().setArmorContents(null); p.updateInventory(); showMenu(p); for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); } } }, 1L); spectators.add(p.getName()); msgmgr.sendMessage( PrefixType.INFO, "You are now spectating! Use /sg spectate again to return to the lobby.", p); msgmgr.sendMessage( PrefixType.INFO, "Right click while holding shift to teleport to the next ingame player, left click to go back.", p); nextspec.put(p, 0); }
public void enable() { mode = GameMode.WAITING; if (disabled) { MessageManager.getInstance() .broadcastFMessage(PrefixType.INFO, "broadcast.gameenabled", "arena-" + gameID); } disabled = false; int b = (SettingsManager.getInstance().getSpawnCount(gameID) > queue.size()) ? queue.size() : SettingsManager.getInstance().getSpawnCount(gameID); for (int a = 0; a < b; a++) { addPlayer(queue.remove(0)); } int c = 1; for (Player p : queue) { msgmgr.sendMessage(PrefixType.INFO, "You are now #" + c + " in line for arena " + gameID, p); c++; } LobbyManager.getInstance().updateWall(gameID); MessageManager.getInstance() .broadcastFMessage(PrefixType.INFO, "broadcast.gamewaiting", "arena-" + gameID); scoreBoard.reset(); }
public void help(Player p, int page) { if (page == 1) { p.sendMessage( ChatColor.BLUE + "------------ " + msgmgr.pre + ChatColor.DARK_AQUA + " Player Commands" + ChatColor.BLUE + " ------------"); } if (page == 2) { p.sendMessage( ChatColor.BLUE + "------------ " + msgmgr.pre + ChatColor.DARK_AQUA + " Staff Commands" + ChatColor.BLUE + " ------------"); } if (page == 3) { p.sendMessage( ChatColor.BLUE + "------------ " + msgmgr.pre + ChatColor.DARK_AQUA + " Admin Commands" + ChatColor.BLUE + " ------------"); } for (String command : commands.keySet()) { try { if (helpinfo.get(command) == page) { msgmgr.sendMessage(PrefixType.INFO, commands.get(command).help(p), p); } } catch (Exception e) { } } /*for (SubCommand v : commands.values()) { if (v.permission() != null) { if (p.hasPermission(v.permission())) { msgmgr.sendMessage(PrefixType.INFO1, v.help(p), p); } else { msgmgr.sendMessage(PrefixType.WARNING, v.help(p), p); } } else { msgmgr.sendMessage(PrefixType.INFO, v.help(p), p); } }*/ }
public void vote(Player pl) { if (GameMode.STARTING == mode) { msgmgr.sendMessage(PrefixType.WARNING, "Game already starting!", pl); return; } if (GameMode.WAITING != mode) { msgmgr.sendMessage(PrefixType.WARNING, "Game already started!", pl); return; } if (voted.contains(pl)) { msgmgr.sendMessage(PrefixType.WARNING, "You already voted!", pl); return; } vote++; voted.add(pl); msgFall(PrefixType.INFO, "game.playervote", "player-" + pl.getName()); HookManager.getInstance().runHook("PLAYER_VOTE", "player-" + pl.getName()); scoreBoard.playerLiving(pl); /*for(Player p: activePlayers){ p.sendMessage(ChatColor.AQUA+pl.getName()+" Voted to start the game! "+ Math.round((vote +0.0) / ((getActivePlayers() +0.0)*100)) +"/"+((c.getInt("auto-start-vote")+0.0))+"%"); }*/ // Bukkit.getServer().broadcastPrefixType((vote +0.0) / (getActivePlayers() +0.0) +"% voted, // needs "+(c.getInt("auto-start-vote")+0.0)/100); if ((((vote + 0.0) / (getActivePlayers() + 0.0)) >= (config.getInt("auto-start-vote") + 0.0) / 100) && getActivePlayers() > 1) { countdown(config.getInt("auto-start-time")); for (Player p : activePlayers) { // p.sendMessage(ChatColor.LIGHT_PURPLE + "Game Starting in " + // c.getInt("auto-start-time")); msgmgr.sendMessage( PrefixType.INFO, "Game starting in " + config.getInt("auto-start-time") + "!", p); scoreBoard.playerLiving(pl); } } }
public boolean onCommand(Player player, String[] args) { if (!player.hasPermission("sg.staff.forcestart") && !player.isOp()) { player.sendMessage(ChatColor.RED + "No Permission"); return true; } int game = -1; int seconds = 10; if (args.length == 2) { seconds = Integer.parseInt(args[1]); } if (args.length >= 1) { game = Integer.parseInt(args[0]); } else game = GameManager.getInstance().getPlayerGameId(player); if (game == -1) { player.sendMessage(ChatColor.RED + "Must be in a game!"); return true; } if (GameManager.getInstance().getGame(game).getActivePlayers() < 2) { player.sendMessage(ChatColor.RED + "Needs at least 2 players to start!"); return true; } Game g = GameManager.getInstance().getGame(game); if (g.getMode() != Game.GameMode.WAITING && !player.hasPermission("sg.arena.restart")) { player.sendMessage(ChatColor.RED + "Game Already Starting!"); return true; } g.countdown(seconds); for (Player pl : g.getAllPlayers()) { msgmgr.sendMessage(PrefixType.INFO, "Game starting in " + seconds + " seconds!", pl); } player.sendMessage(ChatColor.GREEN + "Started arena " + game); return true; }
@Override public boolean onCommand(CommandSender sender, Command cmd1, String commandLabel, String[] args) { PluginDescriptionFile pdfFile = plugin.getDescription(); if (!(sender instanceof Player)) { msgmgr.logMessage( PrefixType.WARNING, "Only in-game players can use SurvivalGames commands! "); return true; } Player player = (Player) sender; if (SurvivalGames.config_todate == false) { msgmgr.sendMessage( PrefixType.WARNING, "The config file is out of date. Please tell an administrator to reset the config.", player); return true; } if (SurvivalGames.dbcon == false) { msgmgr.sendMessage( PrefixType.WARNING, "Could not connect to server. Plugin disabled.", player); return true; } if (cmd1.getName().equalsIgnoreCase("survivalgames")) { if (args == null || args.length < 1) { msgmgr.sendMessage( PrefixType.INFO, "Version " + pdfFile.getVersion() + " by Double0negative", player); msgmgr.sendMessage( PrefixType.INFO, "Type /sg help <player | staff | admin> for command information", player); return true; } if (args[0].equalsIgnoreCase("help")) { if (args.length == 1) { help(player, 1); } else { if (args[1].toLowerCase().startsWith("player")) { help(player, 1); return true; } if (args[1].toLowerCase().startsWith("staff")) { help(player, 2); return true; } if (args[1].toLowerCase().startsWith("admin")) { help(player, 3); return true; } else { msgmgr.sendMessage( PrefixType.WARNING, args[1] + " is not a valid page! Valid pages are Player, Staff, and Admin.", player); } } return true; } String sub = args[0]; Vector<String> l = new Vector<String>(); l.addAll(Arrays.asList(args)); l.remove(0); args = (String[]) l.toArray(new String[0]); if (!commands.containsKey(sub)) { msgmgr.sendMessage(PrefixType.WARNING, "Command doesn't exist.", player); msgmgr.sendMessage(PrefixType.INFO, "Type /sg help for command information", player); return true; } try { commands.get(sub).onCommand(player, args); } catch (Exception e) { e.printStackTrace(); msgmgr.sendFMessage( PrefixType.ERROR, "error.command", player, "command-[" + sub + "] " + Arrays.toString(args)); msgmgr.sendMessage(PrefixType.INFO, "Type /sg help for command information", player); } return true; } return false; }
/* * * ################################################ * * HANDLE PLAYER DEATH * * PLAYERS DIE A REAL DEATH WHICH IS HANDLED HERE * * ################################################ * * */ public void playerDeath(PlayerDeathEvent e) { final Player p = e.getEntity(); if (!activePlayers.contains(p)) return; sm.playerDied(p, activePlayers.size(), gameID, new Date().getTime() - startTime); scoreBoard.playerDead(p); activePlayers.remove(p); inactivePlayers.add(p); for (Object in : spawns.keySet().toArray()) { if (spawns.get(in) == p) spawns.remove(in); } PlayerKilledEvent pk = null; if (mode != GameMode.WAITING && p.getLastDamageCause() != null && p.getLastDamageCause().getCause() != null) { DamageCause cause = p.getLastDamageCause().getCause(); switch (cause) { case ENTITY_ATTACK: if (p.getLastDamageCause().getEntityType() == EntityType.PLAYER) { EntityType enttype = p.getLastDamageCause().getEntityType(); Player killer = p.getKiller(); String killername = "Unknown"; if (killer != null) { killername = killer.getName(); } String itemname = "Unknown Item"; if (killer != null) { itemname = ItemReader.getFriendlyItemName(killer.getItemInHand().getType()); } msgFall( PrefixType.INFO, "death." + enttype, "player-" + p.getName(), "killer-" + killername, "item-" + itemname); if (killer != null && p != null) { sm.addKill(killer, p, gameID); scoreBoard.incScore(killer); } pk = new PlayerKilledEvent(p, this, killer, cause); } else { msgFall( PrefixType.INFO, "death." + p.getLastDamageCause().getEntityType(), "player-" + p.getName(), "killer-" + p.getLastDamageCause().getEntityType()); pk = new PlayerKilledEvent(p, this, null, cause); } break; default: msgFall( PrefixType.INFO, "death." + cause.name(), "player-" + p.getName(), "killer-" + cause); pk = new PlayerKilledEvent(p, this, null, cause); break; } Bukkit.getServer().getPluginManager().callEvent(pk); if (getActivePlayers() > 1) { for (Player pl : getAllPlayers()) { msgmgr.sendMessage( PrefixType.INFO, ChatColor.DARK_AQUA + "There are " + ChatColor.YELLOW + "" + getActivePlayers() + ChatColor.DARK_AQUA + " players remaining!", pl); } } } for (Player pe : activePlayers) { Location l = pe.getLocation(); l.setY(l.getWorld().getMaxHeight()); l.getWorld().strikeLightningEffect(l); } if (getActivePlayers() <= config.getInt("endgame.players") && config.getBoolean("endgame.fire-lighting.enabled") && !endgameRunning) { tasks.add( Bukkit.getScheduler() .scheduleSyncRepeatingTask( GameManager.getInstance().getPlugin(), new EndgameManager(), 0, config.getInt("endgame.fire-lighting.interval") * 20)); } if (activePlayers.size() < 2 && mode == GameMode.INGAME) { mode = GameMode.FINISHING; LobbyManager.getInstance().updateWall(gameID); tasks.add( Bukkit.getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { playerWin(p); endGame(); } }, 10L)); } LobbyManager.getInstance().updateWall(gameID); }
/* * * ################################################ * * START GAME * * ################################################ * * */ public void startGame() { if (mode == GameMode.INGAME) { return; } if (activePlayers.size() <= 0) { for (Player pl : activePlayers) { msgmgr.sendMessage(PrefixType.WARNING, "Not enough players!", pl); mode = GameMode.WAITING; LobbyManager.getInstance().updateWall(gameID); } return; } else { // Remove all entities in the world for (Entity entity : this.arena.getMax().getWorld().getEntities()) { if (entity instanceof Player) continue; entity.remove(); } startTime = new Date().getTime(); for (Player pl : activePlayers) { pl.setHealth(pl.getMaxHealth()); msgmgr.sendFMessage(PrefixType.INFO, "game.goodluck", pl); scoreBoard.playerLiving(pl); } if (config.getBoolean("restock-chest")) { SettingsManager.getGameWorld(gameID).setTime(0); gcount++; tasks.add( Bukkit.getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new NightChecker(), 14400)); } if (config.getInt("grace-period") != 0) { for (Player play : activePlayers) { msgmgr.sendMessage( PrefixType.INFO, "You have a " + config.getInt("grace-period") + " second grace period!", play); } Bukkit.getServer() .getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { for (Player play : activePlayers) { msgmgr.sendMessage(PrefixType.INFO, "Grace period has ended!", play); } } }, config.getInt("grace-period") * 20); } if (config.getBoolean("deathmatch.enabled")) { SurvivalGames.$("Launching deathmatch timer..."); dmTaskID = Bukkit.getScheduler() .scheduleSyncRepeatingTask( GameManager.getInstance().getPlugin(), new DeathMatchTimer(), 40L, 20L); tasks.add(dmTaskID); } } mode = GameMode.INGAME; LobbyManager.getInstance().updateWall(gameID); MessageManager.getInstance() .broadcastFMessage(PrefixType.INFO, "broadcast.gamestarted", "arena-" + gameID); }
@SuppressWarnings("deprecation") public boolean addPlayer(final Player p) { if (SettingsManager.getInstance().getLobbySpawn() == null) { msgmgr.sendFMessage(PrefixType.WARNING, "error.nolobbyspawn", p); return false; } if (!p.hasPermission("sg.arena.join." + gameID)) { debug("permission needed to join arena: " + "sg.arena.join." + gameID); msgmgr.sendFMessage(PrefixType.WARNING, "game.nopermission", p, "arena-" + gameID); return false; } HookManager.getInstance() .runHook( "GAME_PRE_ADDPLAYER", "arena-" + gameID, "player-" + p.getName(), "maxplayers-" + spawns.size(), "players-" + activePlayers.size()); GameManager.getInstance().removeFromOtherQueues(p, gameID); if (GameManager.getInstance().getPlayerGameId(p) != -1) { if (GameManager.getInstance().isPlayerActive(p)) { msgmgr.sendMessage(PrefixType.ERROR, "Cannot join multiple games!", p); return false; } } if (p.isInsideVehicle()) { p.leaveVehicle(); } if (spectators.contains(p)) removeSpectator(p); if (mode == GameMode.WAITING || mode == GameMode.STARTING) { if (activePlayers.size() < SettingsManager.getInstance().getSpawnCount(gameID)) { msgmgr.sendMessage(PrefixType.INFO, "Joining Arena '" + name + "'", p); PlayerJoinArenaEvent joinarena = new PlayerJoinArenaEvent(p, GameManager.getInstance().getGame(gameID)); Bukkit.getServer().getPluginManager().callEvent(joinarena); if (joinarena.isCancelled()) return false; boolean placed = false; int spawnCount = SettingsManager.getInstance().getSpawnCount(gameID); for (int a = 1; a <= spawnCount; a++) { if (spawns.get(a) == null) { placed = true; spawns.put(a, p); p.setGameMode(org.bukkit.GameMode.SURVIVAL); // p.teleport(SettingsManager.getInstance().getLobbySpawn()); p.teleport(SettingsManager.getInstance().getSpawnPoint(gameID, a)); p.setHealth(p.getMaxHealth()); p.setFoodLevel(20); p.getInventory().clear(); p.getEquipment().setArmorContents(null); p.updateInventory(); p.setFlying(false); p.setAllowFlight(false); p.setWalkSpeed(0.2F); p.setFireTicks(0); activePlayers.add(p); sm.addPlayer(p, gameID); scoreBoard.addPlayer(p); hookvars.put("activeplayers", activePlayers.size() + ""); LobbyManager.getInstance().updateWall(gameID); HookManager.getInstance() .runHook("GAME_POST_ADDPLAYER", "activePlayers-" + activePlayers.size()); if (spawnCount == activePlayers.size()) { countdown(5); } Bukkit.getServer() .getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { p.setFlying(false); p.setAllowFlight(false); p.setWalkSpeed(0.2F); p.setFireTicks(0); p.getInventory().clear(); p.getEquipment().setArmorContents(null); p.updateInventory(); showMenu(p); for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); } } }, 1L); break; } } if (!placed) { msgmgr.sendFMessage(PrefixType.ERROR, "error.gamefull", p, "arena-" + gameID); return false; } } else if (SettingsManager.getInstance().getSpawnCount(gameID) == 0) { msgmgr.sendMessage(PrefixType.WARNING, "No spawns set for Arena " + gameID + "!", p); return false; } else { msgmgr.sendFMessage(PrefixType.WARNING, "error.gamefull", p, "arena-" + gameID); return false; } msgFall( PrefixType.INFO, "game.playerjoingame", "player-" + p.getName(), "activeplayers-" + getActivePlayers(), "maxplayers-" + SettingsManager.getInstance().getSpawnCount(gameID)); if (activePlayers.size() >= config.getInt("auto-start-players") && !countdownRunning) countdown(config.getInt("auto-start-time")); return true; } else { if (config.getBoolean("enable-player-queue")) { if (!queue.contains(p)) { queue.add(p); msgmgr.sendFMessage( PrefixType.INFO, "game.playerjoinqueue", p, "queuesize-" + queue.size()); } int a = 1; for (Player qp : queue) { if (qp == p) { msgmgr.sendFMessage(PrefixType.INFO, "game.playercheckqueue", p, "queuepos-" + a); break; } a++; } } } if (mode == GameMode.INGAME) msgmgr.sendFMessage(PrefixType.WARNING, "error.alreadyingame", p); else if (mode == GameMode.DISABLED) msgmgr.sendFMessage(PrefixType.WARNING, "error.gamedisabled", p, "arena-" + gameID); else if (mode == GameMode.RESETING) msgmgr.sendFMessage(PrefixType.WARNING, "error.gamereseting", p); else msgmgr.sendMessage(PrefixType.INFO, "Cannot join game!", p); LobbyManager.getInstance().updateWall(gameID); return false; }