public void run() { datafolder = p.getDataFolder(); PluginManager pm = getServer().getPluginManager(); setCommands(); SettingsManager.getInstance().setup(p); MessageManager.getInstance().setup(); GameManager.getInstance().setup(p); try { // try loading everything that uses SQL. FileConfiguration c = SettingsManager.getInstance().getConfig(); if (c.getBoolean("stats.enabled")) DatabaseManager.getInstance().setup(p); QueueManager.getInstance().setup(); StatsManager.getInstance().setup(p, c.getBoolean("stats.enabled")); dbcon = true; } catch (Exception e) { dbcon = false; e.printStackTrace(); logger.severe( "!!!Failed to connect to the database. Please check the settings and try again!!!"); return; } finally { LobbyManager.getInstance().setup(p); } ChestRatioStorage.getInstance().setup(); HookManager.getInstance().setup(); pm.registerEvents(new PlaceEvent(), p); pm.registerEvents(new BreakEvent(), p); pm.registerEvents(new DeathEvent(), p); pm.registerEvents(new MoveEvent(), p); pm.registerEvents(new CommandCatch(), p); pm.registerEvents(new SignClickEvent(), p); pm.registerEvents(new ChestReplaceEvent(), p); pm.registerEvents(new LogoutEvent(), p); pm.registerEvents(new JoinEvent(p), p); pm.registerEvents(new TeleportEvent(), p); pm.registerEvents(LoggingManager.getInstance(), p); pm.registerEvents(new SpectatorEvents(), p); pm.registerEvents(new BandageUse(), p); pm.registerEvents(new KitEvents(), p); for (Player p : Bukkit.getOnlinePlayers()) { if (GameManager.getInstance().getBlockGameId(p.getLocation()) != -1) { p.teleport(SettingsManager.getInstance().getLobbySpawn()); } } // new Webserver().start(); }
public void setLobbySignsFromSelection(Player pl, int a) { FileConfiguration c = SettingsManager.getInstance().getSystemConfig(); SettingsManager s = SettingsManager.getInstance(); if (!c.getBoolean("walls-system.lobby.sign.set", false)) { c.set("walls-system.lobby.sign.set", true); s.saveSystemConfig(); } WorldEditPlugin we = GameManager.getInstance().getWorldEdit(); Selection sel = we.getSelection(pl); if (sel == null) { pl.sendMessage(ChatColor.RED + "You must make a WorldEdit Selection first"); return; } if ((sel.getNativeMaximumPoint().getBlockX() - sel.getNativeMinimumPoint().getBlockX()) != 0 && (sel.getNativeMinimumPoint().getBlockZ() - sel.getNativeMaximumPoint().getBlockZ() != 0)) { pl.sendMessage(ChatColor.RED + " Must be in a straight line!"); return; } Vector max = sel.getNativeMaximumPoint(); Vector min = sel.getNativeMinimumPoint(); int i = c.getInt("walls-system.lobby.signno", 0) + 1; c.set("walls-system.lobby.signno", i); c.set("walls-system.lobby.signs." + i + ".id", a); c.set("walls-system.lobby.signs." + i + ".world", pl.getWorld().getName()); c.set("walls-system.lobby.signs." + i + ".x1", max.getBlockX()); c.set("walls-system.lobby.signs." + i + ".y1", max.getBlockY()); c.set("walls-system.lobby.signs." + i + ".z1", max.getBlockZ()); c.set("walls-system.lobby.signs." + i + ".x2", min.getBlockX()); c.set("walls-system.lobby.signs." + i + ".y2", min.getBlockY()); c.set("walls-system.lobby.signs." + i + ".z2", min.getBlockZ()); pl.sendMessage(ChatColor.GREEN + "Added Lobby Wall"); // TODO s.saveSystemConfig(); loadSign(i); }
public void showMenu(Player p) { GameManager.getInstance().openKitMenu(p); Inventory i = Bukkit.getServer() .createInventory(p, 45, ChatColor.RED + "" + ChatColor.BOLD + "Please select a kit:"); int a = 0; int b = 0; ArrayList<Kit> kits = GameManager.getInstance().getKits(p); if (kits == null || kits.size() == 0 || !SettingsManager.getInstance().getKits().getBoolean("enabled")) { GameManager.getInstance().leaveKitMenu(p); return; } for (Kit k : kits) { ItemStack i1 = k.getIcon(); ItemMeta im = i1.getItemMeta(); im.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + k.getName()); i1.setItemMeta(im); i.setItem((9 * a) + b, i1); a = 2; for (ItemStack s2 : k.getContents()) { if (s2 != null) { i.setItem((9 * a) + b, s2); a++; } } a = 0; b++; } p.openInventory(i); debug("Showing kit menu for: " + p.getName()); }
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); }
/* * * ################################################ * * RESET * * ################################################ * * */ public void resetArena() { for (Integer i : tasks) { Bukkit.getScheduler().cancelTask(i); } tasks.clear(); vote = 0; voted.clear(); mode = GameMode.RESETING; endgameRunning = false; Bukkit.getScheduler().cancelTask(endgameTaskID); GameManager.getInstance().gameEndCallBack(gameID); QueueManager.getInstance().rollback(gameID, false); LobbyManager.getInstance().updateWall(gameID); scoreBoard.reset(); }
public void playerLeave(final Player p, boolean teleport) { msgFall(PrefixType.INFO, "game.playerleavegame", "player-" + p.getName()); if (teleport) { p.teleport(SettingsManager.getInstance().getLobbySpawn()); } // Remove any potion/fire effects for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); } if (p.getFireTicks() > 0) { p.setFireTicks(0); } sm.removePlayer(p, gameID); scoreBoard.removePlayer(p); activePlayers.remove(p); inactivePlayers.remove(p); voted.remove(p); for (Object in : spawns.keySet().toArray()) { if (spawns.get(in) == p) spawns.remove(in); } HookManager.getInstance().runHook("PLAYER_REMOVED", "player-" + p.getName()); LobbyManager.getInstance().updateWall(gameID); if (activePlayers.size() < 2 && mode == GameMode.INGAME) { mode = GameMode.FINISHING; tasks.add( Bukkit.getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { playerWin(p); endGame(); } }, 1L)); } }
public void onDisable() { disabling = false; PluginDescriptionFile pdfFile = p.getDescription(); SettingsManager.getInstance().saveSpawns(); SettingsManager.getInstance().saveSystemConfig(); for (Game g : GameManager.getInstance().getGames()) { try { g.disable(); } catch (Exception e) { // will throw useless "tried to register task blah blah error." Use the method below to // reset the arena without a task. } QueueManager.getInstance().rollback(g.getID(), true); } logger.info( pdfFile.getName() + " version " + pdfFile.getVersion() + " has now been disabled and reset"); }
@Override public boolean onAreaTouched( TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { /* If the LevelSelector is not hidden, proceed to execute the touch event */ if (!LevelSelector.this.mHidden) { /* If a level tile is initially pressed down on */ if (pSceneTouchEvent.isActionDown()) { /* If this level tile is locked... */ if (!this.mIsLocked) { LevelSelector.this.hide(); GameManager.getInstance().getSaveHandler().setCurrentFase(this.mLevelNumber); // !!!!!!!!!!! Depois colocar para carregar cada fase espec�fica SceneManager.getInstance().loadGameSceneFromSelector(); ResourceManager.Mmenu.pause(); ResourceManager.Mmenu.seekTo(0); } return true; } } return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); }
public void countdown(int time) { // Bukkit.broadcastMessage(""+time); MessageManager.getInstance() .broadcastFMessage( PrefixType.INFO, "broadcast.gamestarting", "arena-" + gameID, "t-" + time); countdownRunning = true; count = time; Bukkit.getScheduler().cancelTask(tid); if (mode == GameMode.WAITING || mode == GameMode.STARTING) { mode = GameMode.STARTING; tid = Bukkit.getScheduler() .scheduleSyncRepeatingTask( (Plugin) GameManager.getInstance().getPlugin(), new Runnable() { public void run() { if (count > 0) { if (count % 10 == 0) { msgFall(PrefixType.INFO, "game.countdown", "t-" + count); } if (count < 6) { msgFall(PrefixType.INFO, "game.countdown", "t-" + count); } count--; LobbyManager.getInstance().updateWall(gameID); } else { startGame(); Bukkit.getScheduler().cancelTask(tid); countdownRunning = false; } } }, 0, 20); } }
public void update() { // System.out.println(gameid); if (msgqueue.size() > 0) { display(); Bukkit.getScheduler() .scheduleSyncDelayedTask( GameManager.getInstance().getPlugin(), new Runnable() { @Override public void run() { display(); update(); } }, 20L); return; } clear(); final Game game = GameManager.getInstance().getGame(gameid); final Sign s0 = signs.get(0); final Sign s1 = signs.get(1); // sign 0 s0.setLine(0, "[HungerGames]"); s0.setLine(1, "Click to join"); s0.setLine(2, "Arena " + gameid); // sign 1 s1.setLine(0, game.getName()); s1.setLine(1, game.getMode() + ""); s1.setLine( 2, game.getActivePlayers() + "/" + ChatColor.GRAY + game.getInactivePlayers() + ChatColor.BLACK + "/" + SettingsManager.getInstance().getSpawnCount(game.getID())); // live update line s1 if (game.getMode() == Game.GameMode.STARTING) { s1.setLine(3, game.getCountdownTime() + ""); } else if (game.getMode() == Game.GameMode.RESETING || game.getMode() == Game.GameMode.FINISHING) { s1.setLine(3, game.getRBStatus()); if (game.getRBPercent() > 100) { s1.setLine(1, "Saving Queue"); s1.setLine(3, (int) game.getRBPercent() + " left"); } else s1.setLine(3, (int) game.getRBPercent() + "%"); } else { s1.setLine(3, ""); } // live player data final ArrayList<String> display = new ArrayList<String>(); for (final Player p : game.getAllPlayers()) { display.add((game.isPlayerActive(p) ? ChatColor.BLACK : ChatColor.GRAY) + p.getName()); } try { int no = 2; int line = 0; for (final String s : display) { signs.get(no).setLine(line, s); line++; if (line >= 4) { line = 0; no++; } } } catch (final Exception e) { } for (final Sign s : signs) { s.update(); } }
/* $Header: /Users/blentz/rails_rcs/cvs/18xx/rails/game/TileManager.java,v 1.17 2010/05/29 09:38:58 stefanfrey Exp $ */
/* * * ################################################ * * 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; }
public void run() { int now = (int) (new Date().getTime() / 1000); long length = config.getInt("deathmatch.time") * 60; long remaining = (length - (now - (startTime / 1000))); // SurvivalGames.$("Remaining: " + remaining + " (" + now + " / " + length + " / " + // (startTime / 1000) + ")"); // Every 3 minutes or every minute in the last 3 minutes if (((remaining % 180) == 0) || (((remaining % 60) == 0) && (remaining <= 180))) { if (remaining > 0) { msgFall(PrefixType.INFO, "game.deathmatchwarning", "t-" + (remaining / 60)); } } // Death match time!! if (remaining > 0) return; debug("DeathMatch mode starting!"); Bukkit.getScheduler().cancelTask(dmTaskID); if (!tasks.remove((Integer) dmTaskID)) { SurvivalGames.$("WARNING: DeathMatch task NOT removed!"); } // Teleport everyone to their original spawn point for (Map.Entry<Integer, Player> entry : spawns.entrySet()) { Player p = entry.getValue(); Integer a = entry.getKey(); if (activePlayers.contains(p) && p.isOnline() && !p.isDead()) { debug("Teleporting " + p.getName() + " (spawn " + a + ")"); p.teleport(SettingsManager.getInstance().getSpawnPoint(gameID, a).add(0, 1.5, 0)); p.sendMessage(ChatColor.RED + "DeathMatch mode has begun!! Attack!!"); } } tasks.add( Bukkit.getScheduler() .scheduleSyncRepeatingTask( GameManager.getInstance().getPlugin(), new Runnable() { public void run() { // Game could end (or players die) while inside this loop // This must be carefully handled so we dont CME or damage a player that has // already left the game ArrayList<Player> players = new ArrayList<Player>(activePlayers); for (Player p : players) { // Verify they are still "alive" and still in the game if ((mode == GameMode.INGAME) && (p != null) && (!p.isDead()) && (activePlayers.contains(p))) { // Player out of arena or too high (towering to avoid players) int ydiff = Math.abs(dmspawn.getBlockY() - p.getLocation().getBlockY()); double dist = dmspawn.distance(p.getLocation()); if ((dist > dmradius) || (ydiff > 4)) { p.sendMessage(ChatColor.RED + "Return to the death match area!"); p.getLocation().getWorld().strikeLightningEffect(p.getLocation()); p.damage(5); p.setFireTicks(60); } } } } }, 10 * 20L, config.getInt("deathmatch.killtime") * 20)); }
private void update() { ArrayList<TableView> tableList = new ArrayList<>(); ArrayList<MatchView> matchList = new ArrayList<>(); List<Table> allTables = new ArrayList<>(tables.values()); Collections.sort(allTables, new TableListSorter()); for (Table table : allTables) { if (table.getState() != TableState.FINISHED) { tableList.add(new TableView(table)); } else if (matchList.size() < 50) { matchList.add(new MatchView(table)); } else { // more since 50 matches finished since this match so remove it if (table.isTournament()) { TournamentManager.getInstance().removeTournament(table.getTournament().getId()); } this.removeTable(table.getId()); } } tableView = tableList; matchView = matchList; List<UsersView> users = new ArrayList<>(); for (User user : UserManager.getInstance().getUsers()) { try { users.add( new UsersView( user.getUserData().getFlagName(), user.getName(), user.getMatchHistory(), user.getMatchQuitRatio(), user.getTourneyHistory(), user.getTourneyQuitRatio(), user.getGameInfo(), user.getPingInfo())); } catch (Exception ex) { logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex); users.add( new UsersView( (user.getUserData() != null && user.getUserData().getFlagName() != null) ? user.getUserData().getFlagName() : "world", user.getName() != null ? user.getName() : "<no name>", user.getMatchHistory() != null ? user.getMatchHistory() : "<no match history>", user.getMatchQuitRatio(), user.getTourneyHistory() != null ? user.getTourneyHistory() : "<no tourney history>", user.getTourneyQuitRatio(), "[exception]", user.getPingInfo() != null ? user.getPingInfo() : "<no ping>")); } } Collections.sort(users, new UserNameSorter()); List<RoomUsersView> roomUserInfo = new ArrayList<>(); roomUserInfo.add( new RoomUsersView( users, GameManager.getInstance().getNumberActiveGames(), ThreadExecutor.getInstance() .getActiveThreads(ThreadExecutor.getInstance().getGameExecutor()), ConfigSettings.getInstance().getMaxGameThreads())); roomUsersView = roomUserInfo; }