public void addServerStatsToSnooper(PlayerUsageSnooper playerSnooper) { playerSnooper.addClientStat("whitelist_enabled", Boolean.valueOf(false)); playerSnooper.addClientStat("whitelist_count", Integer.valueOf(0)); if (this.serverConfigManager != null) { playerSnooper.addClientStat("players_current", Integer.valueOf(this.getCurrentPlayerCount())); playerSnooper.addClientStat("players_max", Integer.valueOf(this.getMaxPlayers())); playerSnooper.addClientStat( "players_seen", Integer.valueOf(this.serverConfigManager.getAvailablePlayerDat().length)); } playerSnooper.addClientStat("uses_auth", Boolean.valueOf(this.onlineMode)); playerSnooper.addClientStat("gui_state", this.getGuiEnabled() ? "enabled" : "disabled"); playerSnooper.addClientStat( "run_time", Long.valueOf( (getCurrentTimeMillis() - playerSnooper.getMinecraftStartTimeMillis()) / 60L * 1000L)); playerSnooper.addClientStat( "avg_tick_ms", Integer.valueOf((int) (MathHelper.average(this.tickTimeArray) * 1.0E-6D))); int var2 = 0; if (this.worldServers != null) { for (int var3 = 0; var3 < this.worldServers.length; ++var3) { if (this.worldServers[var3] != null) { WorldServer var4 = this.worldServers[var3]; WorldInfo var5 = var4.getWorldInfo(); playerSnooper.addClientStat( "world[" + var2 + "][dimension]", Integer.valueOf(var4.provider.getDimensionId())); playerSnooper.addClientStat("world[" + var2 + "][mode]", var5.getGameType()); playerSnooper.addClientStat("world[" + var2 + "][difficulty]", var4.getDifficulty()); playerSnooper.addClientStat( "world[" + var2 + "][hardcore]", Boolean.valueOf(var5.isHardcoreModeEnabled())); playerSnooper.addClientStat( "world[" + var2 + "][generator_name]", var5.getTerrainType().getWorldTypeName()); playerSnooper.addClientStat( "world[" + var2 + "][generator_version]", Integer.valueOf(var5.getTerrainType().getGeneratorVersion())); playerSnooper.addClientStat( "world[" + var2 + "][height]", Integer.valueOf(this.buildLimit)); playerSnooper.addClientStat( "world[" + var2 + "][chunks_loaded]", Integer.valueOf(var4.getChunkProvider().getLoadedChunkCount())); ++var2; } } } playerSnooper.addClientStat("worlds", Integer.valueOf(var2)); }
public void run() { try { if (this.startServer()) { this.currentTime = getCurrentTimeMillis(); long var1 = 0L; this.statusResponse.setServerDescription(new ChatComponentText(this.motd)); this.statusResponse.setProtocolVersionInfo( new ServerStatusResponse.MinecraftProtocolVersionIdentifier("1.8", 47)); this.addFaviconToStatusResponse(this.statusResponse); while (this.serverRunning) { long var48 = getCurrentTimeMillis(); long var5 = var48 - this.currentTime; if (var5 > 2000L && this.currentTime - this.timeOfLastWarning >= 15000L) { logger.warn( "Can\'t keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", new Object[] {Long.valueOf(var5), Long.valueOf(var5 / 50L)}); var5 = 2000L; this.timeOfLastWarning = this.currentTime; } if (var5 < 0L) { logger.warn("Time ran backwards! Did the system time change?"); var5 = 0L; } var1 += var5; this.currentTime = var48; if (this.worldServers[0].areAllPlayersAsleep()) { this.tick(); var1 = 0L; } else { while (var1 > 50L) { var1 -= 50L; this.tick(); } } Thread.sleep(Math.max(1L, 50L - var1)); this.serverIsRunning = true; } } else { this.finalTick((CrashReport) null); } } catch (Throwable var46) { logger.error("Encountered an unexpected exception", var46); CrashReport var2 = null; if (var46 instanceof ReportedException) { var2 = this.addServerInfoToCrashReport(((ReportedException) var46).getCrashReport()); } else { var2 = this.addServerInfoToCrashReport( new CrashReport("Exception in server tick loop", var46)); } File var3 = new File( new File(this.getDataDirectory(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt"); if (var2.saveToFile(var3)) { logger.error("This crash report has been saved to: " + var3.getAbsolutePath()); } else { logger.error("We were unable to save this crash report to disk."); } this.finalTick(var2); } finally { try { this.stopServer(); this.serverStopped = true; } catch (Throwable var44) { logger.error("Exception stopping the server", var44); } finally { this.systemExitNow(); } } }