summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/MinecraftServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/MinecraftServer.java')
-rw-r--r--src/main/java/net/minecraft/server/MinecraftServer.java1321
1 files changed, 0 insertions, 1321 deletions
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
deleted file mode 100644
index e65cbfae..00000000
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ /dev/null
@@ -1,1321 +0,0 @@
-package net.minecraft.server;
-
-import java.awt.GraphicsEnvironment;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.net.Proxy;
-import java.security.KeyPair;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Random;
-import java.util.UUID;
-import java.util.concurrent.Callable;
-import javax.imageio.ImageIO;
-
-import net.minecraft.util.com.google.common.base.Charsets;
-import net.minecraft.util.com.mojang.authlib.GameProfile;
-import net.minecraft.util.com.mojang.authlib.GameProfileRepository;
-import net.minecraft.util.com.mojang.authlib.minecraft.MinecraftSessionService;
-import net.minecraft.util.com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
-import net.minecraft.util.io.netty.buffer.ByteBuf;
-import net.minecraft.util.io.netty.buffer.ByteBufOutputStream;
-import net.minecraft.util.io.netty.buffer.Unpooled;
-import net.minecraft.util.io.netty.handler.codec.base64.Base64;
-import net.minecraft.util.org.apache.commons.lang3.Validate;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-// CraftBukkit start
-import java.io.IOException;
-
-import jline.console.ConsoleReader;
-import joptsimple.OptionSet;
-
-import org.bukkit.World.Environment;
-import org.bukkit.craftbukkit.util.Waitable;
-import org.bukkit.event.server.RemoteServerCommandEvent;
-import org.bukkit.event.world.WorldSaveEvent;
-// CraftBukkit end
-
-public abstract class MinecraftServer implements ICommandListener, Runnable, IMojangStatistics {
-
- private static final Logger i = LogManager.getLogger();
- private static final File a = new File("usercache.json");
- private static MinecraftServer j;
- public Convertable convertable; // CraftBukkit - private final -> public
- private final MojangStatisticsGenerator l = new MojangStatisticsGenerator("server", this, ar());
- public File universe; // CraftBukkit - private final -> public
- private final List n = new ArrayList();
- private final ICommandHandler o;
- public final MethodProfiler methodProfiler = new MethodProfiler();
- private final ServerConnection p;
- private final ServerPing q = new ServerPing();
- private final Random r = new Random();
- private String serverIp;
- private int t = -1;
- public WorldServer[] worldServer;
- private PlayerList u;
- private boolean isRunning = true;
- private boolean isStopped;
- private int ticks;
- protected final Proxy d;
- public String e;
- public int f;
- private boolean onlineMode;
- private boolean spawnAnimals;
- private boolean spawnNPCs;
- private boolean pvpMode;
- private boolean allowFlight;
- private String motd;
- private int E;
- private int F = 0;
- public final long[] g = new long[100];
- public long[][] h;
- private KeyPair G;
- private String H;
- private String I;
- private boolean demoMode;
- private boolean L;
- private boolean M;
- private String N = "";
- private boolean O;
- private long P;
- private String Q;
- private boolean R;
- private boolean S;
- private final YggdrasilAuthenticationService T;
- private final MinecraftSessionService U;
- private long V = 0L;
- private final GameProfileRepository W;
- private final UserCache X;
-
- // CraftBukkit start - add fields
- public List<WorldServer> worlds = new ArrayList<WorldServer>();
- public org.bukkit.craftbukkit.CraftServer server;
- public OptionSet options;
- public org.bukkit.command.ConsoleCommandSender console;
- public org.bukkit.command.RemoteConsoleCommandSender remoteConsole;
- public ConsoleReader reader;
- public static int currentTick = (int) (System.currentTimeMillis() / 50);
- public final Thread primaryThread;
- public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
- public int autosavePeriod;
- // CraftBukkit end
-
- public MinecraftServer(OptionSet options, Proxy proxy) { // CraftBukkit - signature file -> OptionSet
- this.X = new UserCache(this, a);
- j = this;
- this.d = proxy;
- // this.universe = file1; // CraftBukkit
- this.p = new ServerConnection(this);
- this.o = new CommandDispatcher();
- // this.convertable = new WorldLoaderServer(file1); // CraftBukkit - moved to DedicatedServer.init
- this.T = new YggdrasilAuthenticationService(proxy, UUID.randomUUID().toString());
- this.U = this.T.createMinecraftSessionService();
- this.W = this.T.createProfileRepository();
- // CraftBukkit start
- this.options = options;
- // Try to see if we're actually running in a terminal, disable jline if not
- if (System.console() == null) {
- System.setProperty("jline.terminal", "jline.UnsupportedTerminal");
- org.bukkit.craftbukkit.Main.useJline = false;
- }
-
- try {
- this.reader = new ConsoleReader(System.in, System.out);
- this.reader.setExpandEvents(false); // Avoid parsing exceptions for uncommonly used event designators
- } catch (Throwable e) {
- try {
- // Try again with jline disabled for Windows users without C++ 2008 Redistributable
- System.setProperty("jline.terminal", "jline.UnsupportedTerminal");
- System.setProperty("user.language", "en");
- org.bukkit.craftbukkit.Main.useJline = false;
- this.reader = new ConsoleReader(System.in, System.out);
- this.reader.setExpandEvents(false);
- } catch (IOException ex) {
- i.warn((String) null, ex);
- }
- }
- Runtime.getRuntime().addShutdownHook(new org.bukkit.craftbukkit.util.ServerShutdownThread(this));
-
- primaryThread = new ThreadServerApplication(this, "Server thread"); // Moved from main
- }
-
- public abstract PropertyManager getPropertyManager();
- // CraftBukkit end
-
- protected abstract boolean init() throws java.net.UnknownHostException; // CraftBukkit - throws UnknownHostException
-
- protected void a(String s) {
- if (this.getConvertable().isConvertable(s)) {
- i.info("Converting map!");
- this.b("menu.convertingLevel");
- this.getConvertable().convert(s, new ConvertProgressUpdater(this));
- }
- }
-
- protected synchronized void b(String s) {
- this.Q = s;
- }
-
- protected void a(String s, String s1, long i, WorldType worldtype, String s2) {
- this.a(s);
- this.b("menu.loadingLevel");
- this.worldServer = new WorldServer[3];
- // this.h = new long[this.worldServer.length][100]; // CraftBukkit - Removed ticktime arrays
- // IDataManager idatamanager = this.convertable.a(s, true);
- // WorldData worlddata = idatamanager.getWorldData();
- /* CraftBukkit start - Removed worldsettings
- WorldSettings worldsettings;
-
- if (worlddata == null) {
- worldsettings = new WorldSettings(i, this.getGamemode(), this.getGenerateStructures(), this.isHardcore(), worldtype);
- worldsettings.a(s2);
- } else {
- worldsettings = new WorldSettings(worlddata);
- }
-
- if (this.L) {
- worldsettings.a();
- }
- // */
- int worldCount = 3;
-
- for (int j = 0; j < worldCount; ++j) {
- WorldServer world;
- int dimension = 0;
-
- if (j == 1) {
- if (this.getAllowNether()) {
- dimension = -1;
- } else {
- continue;
- }
- }
-
- if (j == 2) {
- if (this.server.getAllowEnd()) {
- dimension = 1;
- } else {
- continue;
- }
- }
-
- String worldType = Environment.getEnvironment(dimension).toString().toLowerCase();
- String name = (dimension == 0) ? s : s + "_" + worldType;
-
- org.bukkit.generator.ChunkGenerator gen = this.server.getGenerator(name);
- WorldSettings worldsettings = new WorldSettings(i, this.getGamemode(), this.getGenerateStructures(), this.isHardcore(), worldtype);
- worldsettings.a(s2);
-
- if (j == 0) {
- IDataManager idatamanager = new ServerNBTManager(server.getWorldContainer(), s1, true);
- if (this.R()) {
- world = new DemoWorldServer(this, idatamanager, s1, dimension, this.methodProfiler);
- } else {
- // world =, b0 to dimension, added Environment and gen
- world = new WorldServer(this, idatamanager, s1, dimension, worldsettings, this.methodProfiler, Environment.getEnvironment(dimension), gen);
- }
- this.server.scoreboardManager = new org.bukkit.craftbukkit.scoreboard.CraftScoreboardManager(this, world.getScoreboard());
- } else {
- String dim = "DIM" + dimension;
-
- File newWorld = new File(new File(name), dim);
- File oldWorld = new File(new File(s), dim);
-
- if ((!newWorld.isDirectory()) && (oldWorld.isDirectory())) {
- MinecraftServer.i.info("---- Migration of old " + worldType + " folder required ----");
- MinecraftServer.i.info("Unfortunately due to the way that Minecraft implemented multiworld support in 1.6, Bukkit requires that you move your " + worldType + " folder to a new location in order to operate correctly.");
- MinecraftServer.i.info("We will move this folder for you, but it will mean that you need to move it back should you wish to stop using Bukkit in the future.");
- MinecraftServer.i.info("Attempting to move " + oldWorld + " to " + newWorld + "...");
-
- if (newWorld.exists()) {
- MinecraftServer.i.warn("A file or folder already exists at " + newWorld + "!");
- MinecraftServer.i.info("---- Migration of old " + worldType + " folder failed ----");
- } else if (newWorld.getParentFile().mkdirs()) {
- if (oldWorld.renameTo(newWorld)) {
- MinecraftServer.i.info("Success! To restore " + worldType + " in the future, simply move " + newWorld + " to " + oldWorld);
- // Migrate world data too.
- try {
- com.google.common.io.Files.copy(new File(new File(s), "level.dat"), new File(new File(name), "level.dat"));
- } catch (IOException exception) {
- MinecraftServer.i.warn("Unable to migrate world data.");
- }
- MinecraftServer.i.info("---- Migration of old " + worldType + " folder complete ----");
- } else {
- MinecraftServer.i.warn("Could not move folder " + oldWorld + " to " + newWorld + "!");
- MinecraftServer.i.info("---- Migration of old " + worldType + " folder failed ----");
- }
- } else {
- MinecraftServer.i.warn("Could not create path for " + newWorld + "!");
- MinecraftServer.i.info("---- Migration of old " + worldType + " folder failed ----");
- }
- }
-
- IDataManager idatamanager = new ServerNBTManager(server.getWorldContainer(), name, true);
- // world =, b0 to dimension, s1 to name, added Environment and gen
- world = new SecondaryWorldServer(this, idatamanager, name, dimension, worldsettings, this.worlds.get(0), this.methodProfiler, Environment.getEnvironment(dimension), gen);
- }
-
- if (gen != null) {
- world.getWorld().getPopulators().addAll(gen.getDefaultPopulators(world.getWorld()));
- }
-
- this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldInitEvent(world.getWorld()));
-
- world.addIWorldAccess(new WorldManager(this, world));
- if (!this.N()) {
- world.getWorldData().setGameType(this.getGamemode());
- }
-
- this.worlds.add(world);
- this.u.setPlayerFileData(this.worlds.toArray(new WorldServer[this.worlds.size()]));
- // CraftBukkit end
- }
-
- this.a(this.getDifficulty());
- this.g();
- }
-
- protected void g() {
- boolean flag = true;
- boolean flag1 = true;
- boolean flag2 = true;
- boolean flag3 = true;
- int i = 0;
-
- this.b("menu.generatingTerrain");
- byte b0 = 0;
-
- // CraftBukkit start - fire WorldLoadEvent and handle whether or not to keep the spawn in memory
- for (int m = 0; m < this.worlds.size(); ++m) {
- WorldServer worldserver = this.worlds.get(m);
- MinecraftServer.i.info("Preparing start region for level " + m + " (Seed: " + worldserver.getSeed() + ")");
- if (!worldserver.getWorld().getKeepSpawnInMemory()) {
- continue;
- }
-
- ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
- long j = ar();
- i = 0;
-
- for (int k = -192; k <= 192 && this.isRunning(); k += 16) {
- for (int l = -192; l <= 192 && this.isRunning(); l += 16) {
- long i1 = ar();
-
- if (i1 - j > 1000L) {
- this.a_("Preparing spawn area", i * 100 / 625);
- j = i1;
- }
-
- ++i;
- worldserver.chunkProviderServer.getChunkAt(chunkcoordinates.x + k >> 4, chunkcoordinates.z + l >> 4);
- }
- }
- }
-
- for (WorldServer world : this.worlds) {
- this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldLoadEvent(world.getWorld()));
- }
- // CraftBukkit end
- this.n();
- }
-
- public abstract boolean getGenerateStructures();
-
- public abstract EnumGamemode getGamemode();
-
- public abstract EnumDifficulty getDifficulty();
-
- public abstract boolean isHardcore();
-
- public abstract int l();
-
- public abstract boolean m();
-
- protected void a_(String s, int i) {
- this.e = s;
- this.f = i;
- // CraftBukkit - Use FQN to work around decompiler issue
- MinecraftServer.i.info(s + ": " + i + "%");
- }
-
- protected void n() {
- this.e = null;
- this.f = 0;
-
- this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.POSTWORLD); // CraftBukkit
- }
-
- protected void saveChunks(boolean flag) throws ExceptionWorldConflict { // CraftBukkit - added throws
- if (!this.M) {
- // CraftBukkit start - fire WorldSaveEvent
- // WorldServer[] aworldserver = this.worldServer;
- int i = this.worlds.size();
-
- for (int j = 0; j < i; ++j) {
- WorldServer worldserver = this.worlds.get(j);
-
- if (worldserver != null) {
- if (!flag) {
- MinecraftServer.i.info("Saving chunks for level \'" + worldserver.getWorldData().getName() + "\'/" + worldserver.worldProvider.getName());
- }
-
- worldserver.save(true, (IProgressUpdate) null);
- worldserver.saveLevel();
-
- WorldSaveEvent event = new WorldSaveEvent(worldserver.getWorld());
- this.server.getPluginManager().callEvent(event);
- // CraftBukkit end
- }
- }
- }
- }
-
- public void stop() throws ExceptionWorldConflict { // CraftBukkit - added throws
- if (!this.M) {
- i.info("Stopping server");
- // CraftBukkit start
- if (this.server != null) {
- this.server.disablePlugins();
- }
- // CraftBukkit end
-
- if (this.ai() != null) {
- this.ai().b();
- }
-
- if (this.u != null) {
- i.info("Saving players");
- this.u.savePlayers();
- this.u.u();
- }
-
- if (this.worldServer != null) {
- i.info("Saving worlds");
- this.saveChunks(false);
-
- /* CraftBukkit start - Handled in saveChunks
- for (int i = 0; i < this.worldServer.length; ++i) {
- WorldServer worldserver = this.worldServer[i];
-
- worldserver.saveLevel();
- }
- // CraftBukkit end */
- }
-
- if (this.l.d()) {
- this.l.e();
- }
- }
- }
-
- public String getServerIp() {
- return this.serverIp;
- }
-
- public void c(String s) {
- this.serverIp = s;
- }
-
- public boolean isRunning() {
- return this.isRunning;
- }
-
- public void safeShutdown() {
- this.isRunning = false;
- }
-
- public void run() {
- try {
- if (this.init()) {
- long i = ar();
- long j = 0L;
-
- this.q.setMOTD(new ChatComponentText(this.motd));
- this.q.setServerInfo(new ServerPingServerData("1.7.10", 5));
- this.a(this.q);
-
- while (this.isRunning) {
- long k = ar();
- long l = k - i;
-
- if (l > 2000L && i - this.P >= 15000L) {
- if (this.server.getWarnOnOverload()) // CraftBukkit - Added option to suppress warning messages
- MinecraftServer.i.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(l), Long.valueOf(l / 50L)});
- l = 2000L;
- this.P = i;
- }
-
- if (l < 0L) {
- MinecraftServer.i.warn("Time ran backwards! Did the system time change?");
- l = 0L;
- }
-
- j += l;
- i = k;
- if (this.worlds.get(0).everyoneDeeplySleeping()) { // CraftBukkit
- this.u();
- j = 0L;
- } else {
- while (j > 50L) {
- MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
- j -= 50L;
- this.u();
- }
- }
-
- Thread.sleep(Math.max(1L, 50L - j));
- this.O = true;
- }
- } else {
- this.a((CrashReport) null);
- }
- } catch (Throwable throwable) {
- i.error("Encountered an unexpected exception", throwable);
- CrashReport crashreport = null;
-
- if (throwable instanceof ReportedException) {
- crashreport = this.b(((ReportedException) throwable).a());
- } else {
- crashreport = this.b(new CrashReport("Exception in server tick loop", throwable));
- }
-
- File file1 = new File(new File(this.s(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt");
-
- if (crashreport.a(file1)) {
- i.error("This crash report has been saved to: " + file1.getAbsolutePath());
- } else {
- i.error("We were unable to save this crash report to disk.");
- }
-
- this.a(crashreport);
- } finally {
- try {
- this.stop();
- this.isStopped = true;
- } catch (Throwable throwable1) {
- i.error("Exception stopping the server", throwable1);
- } finally {
- // CraftBukkit start - Restore terminal to original settings
- try {
- this.reader.getTerminal().restore();
- } catch (Exception e) {
- }
- // CraftBukkit end
- this.t();
- }
- }
- }
-
- private void a(ServerPing serverping) {
- File file1 = this.d("server-icon.png");
-
- if (file1.isFile()) {
- ByteBuf bytebuf = Unpooled.buffer();
-
- try {
- BufferedImage bufferedimage = ImageIO.read(file1);
-
- Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide", new Object[0]);
- Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high", new Object[0]);
- ImageIO.write(bufferedimage, "PNG", new ByteBufOutputStream(bytebuf));
- ByteBuf bytebuf1 = Base64.encode(bytebuf);
-
- serverping.setFavicon("data:image/png;base64," + bytebuf1.toString(Charsets.UTF_8));
- } catch (Exception exception) {
- i.error("Couldn\'t load server icon", exception);
- } finally {
- bytebuf.release();
- }
- }
- }
-
- protected File s() {
- return new File(".");
- }
-
- protected void a(CrashReport crashreport) {}
-
- protected void t() {}
-
- protected void u() throws ExceptionWorldConflict { // CraftBukkit - added throws
- long i = System.nanoTime();
-
- ++this.ticks;
- if (this.R) {
- this.R = false;
- this.methodProfiler.a = true;
- this.methodProfiler.a();
- }
-
- this.methodProfiler.a("root");
- this.v();
- if (i - this.V >= 5000000000L) {
- this.V = i;
- this.q.setPlayerSample(new ServerPingPlayerSample(this.D(), this.C()));
- GameProfile[] agameprofile = new GameProfile[Math.min(this.C(), 12)];
- int j = MathHelper.nextInt(this.r, 0, this.C() - agameprofile.length);
-
- for (int k = 0; k < agameprofile.length; ++k) {
- agameprofile[k] = ((EntityPlayer) this.u.players.get(j + k)).getProfile();
- }
-
- Collections.shuffle(Arrays.asList(agameprofile));
- this.q.b().a(agameprofile);
- }
-
- if ((this.autosavePeriod > 0) && ((this.ticks % this.autosavePeriod) == 0)) { // CraftBukkit
- this.methodProfiler.a("save");
- this.u.savePlayers();
- this.saveChunks(true);
- this.methodProfiler.b();
- }
-
- this.methodProfiler.a("tallying");
- this.g[this.ticks % 100] = System.nanoTime() - i;
- this.methodProfiler.b();
- this.methodProfiler.a("snooper");
- if (!this.l.d() && this.ticks > 100) {
- this.l.a();
- }
-
- if (this.ticks % 6000 == 0) {
- this.l.b();
- }
-
- this.methodProfiler.b();
- this.methodProfiler.b();
- }
-
- public void v() {
- this.methodProfiler.a("levels");
-
- // CraftBukkit start
- this.server.getScheduler().mainThreadHeartbeat(this.ticks);
-
- // Run tasks that are waiting on processing
- while (!processQueue.isEmpty()) {
- processQueue.remove().run();
- }
-
- org.bukkit.craftbukkit.chunkio.ChunkIOExecutor.tick();
-
- // Send time updates to everyone, it will get the right time from the world the player is in.
- if (this.ticks % 20 == 0) {
- for (int i = 0; i < this.getPlayerList().players.size(); ++i) {
- EntityPlayer entityplayer = (EntityPlayer) this.getPlayerList().players.get(i);
- entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(entityplayer.world.getTime(), entityplayer.getPlayerTime(), entityplayer.world.getGameRules().getBoolean("doDaylightCycle"))); // Add support for per player time
- }
- }
-
- int i;
-
- for (i = 0; i < this.worlds.size(); ++i) {
- long j = System.nanoTime();
-
- // if (i == 0 || this.getAllowNether()) {
- WorldServer worldserver = this.worlds.get(i);
-
- this.methodProfiler.a(worldserver.getWorldData().getName());
- this.methodProfiler.a("pools");
- this.methodProfiler.b();
- /* Drop global time updates
- if (this.ticks % 20 == 0) {
- this.methodProfiler.a("timeSync");
- this.t.a(new PacketPlayOutUpdateTime(worldserver.getTime(), worldserver.getDayTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")), worldserver.worldProvider.dimension);
- this.methodProfiler.b();
- }
- // CraftBukkit end */
-
- this.methodProfiler.a("tick");
-
- CrashReport crashreport;
-
- try {
- worldserver.doTick();
- } catch (Throwable throwable) {
- crashreport = CrashReport.a(throwable, "Exception ticking world");
- worldserver.a(crashreport);
- throw new ReportedException(crashreport);
- }
-
- try {
- worldserver.tickEntities();
- } catch (Throwable throwable1) {
- crashreport = CrashReport.a(throwable1, "Exception ticking world entities");
- worldserver.a(crashreport);
- throw new ReportedException(crashreport);
- }
-
- this.methodProfiler.b();
- this.methodProfiler.a("tracker");
- worldserver.getTracker().updatePlayers();
- this.methodProfiler.b();
- this.methodProfiler.b();
- // } // CraftBukkit
-
- // this.h[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit
- }
-
- this.methodProfiler.c("connection");
- this.ai().c();
- this.methodProfiler.c("players");
- this.u.tick();
- this.methodProfiler.c("tickables");
-
- for (i = 0; i < this.n.size(); ++i) {
- ((IUpdatePlayerListBox) this.n.get(i)).a();
- }
-
- this.methodProfiler.b();
- }
-
- public boolean getAllowNether() {
- return true;
- }
-
- public void a(IUpdatePlayerListBox iupdateplayerlistbox) {
- this.n.add(iupdateplayerlistbox);
- }
-
- public static void main(final OptionSet options) { // CraftBukkit - replaces main(String[] astring)
- DispenserRegistry.b();
-
- try {
- /* CraftBukkit start - Replace everything
- boolean flag = true;
- String s = null;
- String s1 = ".";
- String s2 = null;
- boolean flag1 = false;
- boolean flag2 = false;
- int i = -1;
-
- for (int j = 0; j < astring.length; ++j) {
- String s3 = astring[j];
- String s4 = j == astring.length - 1 ? null : astring[j + 1];
- boolean flag3 = false;
-
- if (!s3.equals("nogui") && !s3.equals("--nogui")) {
- if (s3.equals("--port") && s4 != null) {
- flag3 = true;
-
- try {
- i = Integer.parseInt(s4);
- } catch (NumberFormatException numberformatexception) {
- ;
- }
- } else if (s3.equals("--singleplayer") && s4 != null) {
- flag3 = true;
- s = s4;
- } else if (s3.equals("--universe") && s4 != null) {
- flag3 = true;
- s1 = s4;
- } else if (s3.equals("--world") && s4 != null) {
- flag3 = true;
- s2 = s4;
- } else if (s3.equals("--demo")) {
- flag1 = true;
- } else if (s3.equals("--bonusChest")) {
- flag2 = true;
- }
- } else {
- flag = false;
- }
-
- if (flag3) {
- ++j;
- }
- }
-
- DedicatedServer dedicatedserver = new DedicatedServer(new File(s1));
-
- if (s != null) {
- dedicatedserver.j(s);
- }
-
- if (s2 != null) {
- dedicatedserver.k(s2);
- }
-
- if (i >= 0) {
- dedicatedserver.setPort(i);
- }
-
- if (flag1) {
- dedicatedserver.b(true);
- }
-
- if (flag2) {
- dedicatedserver.c(true);
- }
-
- if (flag) {
- dedicatedserver.aD();
- }
- // */
-
- DedicatedServer dedicatedserver = new DedicatedServer(options);
-
- if (options.has("port")) {
- int port = (Integer) options.valueOf("port");
- if (port > 0) {
- dedicatedserver.setPort(port);
- }
- }
-
- if (options.has("universe")) {
- dedicatedserver.universe = (File) options.valueOf("universe");
- }
-
- if (options.has("world")) {
- dedicatedserver.k((String) options.valueOf("world"));
- }
-
- dedicatedserver.primaryThread.start();
- // Runtime.getRuntime().addShutdownHook(new ThreadShutdown("Server Shutdown Thread", dedicatedserver));
- // CraftBukkit end
- } catch (Exception exception) {
- i.fatal("Failed to start the minecraft server", exception);
- }
- }
-
- public void x() {
- // (new ThreadServerApplication(this, "Server thread")).start(); // CraftBukkit - prevent abuse
- }
-
- public File d(String s) {
- return new File(this.s(), s);
- }
-
- public void info(String s) {
- i.info(s);
- }
-
- public void warning(String s) {
- i.warn(s);
- }
-
- public WorldServer getWorldServer(int i) {
- // CraftBukkit start
- for (WorldServer world : this.worlds) {
- if (world.dimension == i) {
- return world;
- }
- }
-
- return this.worlds.get(0);
- // CraftBukkit end
- }
-
- public String y() {
- return this.serverIp;
- }
-
- public int z() {
- return this.t;
- }
-
- public String A() {
- return this.motd;
- }
-
- public String getVersion() {
- return "1.7.10";
- }
-
- public int C() {
- return this.u.getPlayerCount();
- }
-
- public int D() {
- return this.u.getMaxPlayers();
- }
-
- public String[] getPlayers() {
- return this.u.f();
- }
-
- public GameProfile[] F() {
- return this.u.g();
- }
-
- public String getPlugins() {
- // CraftBukkit start - Whole method
- StringBuilder result = new StringBuilder();
- org.bukkit.plugin.Plugin[] plugins = server.getPluginManager().getPlugins();
-
- result.append(server.getName());
- result.append(" on Bukkit ");
- result.append(server.getBukkitVersion());
-
- if (plugins.length > 0 && this.server.getQueryPlugins()) {
- result.append(": ");
-
- for (int i = 0; i < plugins.length; i++) {
- if (i > 0) {
- result.append("; ");
- }
-
- result.append(plugins[i].getDescription().getName());
- result.append(" ");
- result.append(plugins[i].getDescription().getVersion().replaceAll(";", ","));
- }
- }
-
- return result.toString();
- // CraftBukkit end
- }
-
- // CraftBukkit start - fire RemoteServerCommandEvent
- public String g(final String s) { // final parameter
- Waitable<String> waitable = new Waitable<String>() {
- @Override
- protected String evaluate() {
- RemoteControlCommandListener.instance.e();
- // Event changes start
- RemoteServerCommandEvent event = new RemoteServerCommandEvent(MinecraftServer.this.remoteConsole, s);
- MinecraftServer.this.server.getPluginManager().callEvent(event);
- // Event changes end
- ServerCommand servercommand = new ServerCommand(event.getCommand(), RemoteControlCommandListener.instance);
- MinecraftServer.this.server.dispatchServerCommand(MinecraftServer.this.remoteConsole, servercommand); // CraftBukkit
- // this.o.a(RemoteControlCommandListener.instance, s);
- return RemoteControlCommandListener.instance.f();
- }};
- processQueue.add(waitable);
- try {
- return waitable.get();
- } catch (java.util.concurrent.ExecutionException e) {
- throw new RuntimeException("Exception processing rcon command " + s, e.getCause());
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt(); // Maintain interrupted state
- throw new RuntimeException("Interrupted processing rcon command " + s, e);
- }
- // CraftBukkit end
- }
-
- public boolean isDebugging() {
- return this.getPropertyManager().getBoolean("debug", false); // CraftBukkit - don't hardcode
- }
-
- public void h(String s) {
- i.error(s);
- }
-
- public void i(String s) {
- if (this.isDebugging()) {
- i.info(s);
- }
- }
-
- public String getServerModName() {
- return server.getName(); // CraftBukkit - cb > vanilla!
- }
-
- public CrashReport b(CrashReport crashreport) {
- crashreport.g().a("Profiler Position", (Callable) (new CrashReportProfilerPosition(this)));
- if (this.worlds != null && this.worlds.size() > 0 && this.worlds.get(0) != null) { // CraftBukkit
- crashreport.g().a("Vec3 Pool Size", (Callable) (new CrashReportVec3DPoolSize(this)));
- }
-
- if (this.u != null) {
- crashreport.g().a("Player Count", (Callable) (new CrashReportPlayerCount(this)));
- }
-
- return crashreport;
- }
-
- public List a(ICommandListener icommandlistener, String s) {
- // CraftBukkit start - Allow tab-completion of Bukkit commands
- /*
- ArrayList arraylist = new ArrayList();
-
- if (s.startsWith("/")) {
- s = s.substring(1);
- boolean flag = !s.contains(" ");
- List list = this.o.b(icommandlistener, s);
-
- if (list != null) {
- Iterator iterator = list.iterator();
-
- while (iterator.hasNext()) {
- String s1 = (String) iterator.next();
-
- if (flag) {
- arraylist.add("/" + s1);
- } else {
- arraylist.add(s1);
- }
- }
- }
-
- return arraylist;
- } else {
- String[] astring = s.split(" ", -1);
- String s2 = astring[astring.length - 1];
- String[] astring1 = this.u.f();
- int i = astring1.length;
-
- for (int j = 0; j < i; ++j) {
- String s3 = astring1[j];
-
- if (CommandAbstract.a(s2, s3)) {
- arraylist.add(s3);
- }
- }
-
- return arraylist;
- }
- */
- return this.server.tabComplete(icommandlistener, s);
- // CraftBukkit end
- }
-
- public static MinecraftServer getServer() {
- return j;
- }
-
- public String getName() {
- return "Server";
- }
-
- public void sendMessage(IChatBaseComponent ichatbasecomponent) {
- i.info(ichatbasecomponent.c());
- }
-
- public boolean a(int i, String s) {
- return true;
- }
-
- public ICommandHandler getCommandHandler() {
- return this.o;
- }
-
- public KeyPair K() {
- return this.G;
- }
-
- public int L() {
- return this.t;
- }
-
- public void setPort(int i) {
- this.t = i;
- }
-
- public String M() {
- return this.H;
- }
-
- public void j(String s) {
- this.H = s;
- }
-
- public boolean N() {
- return this.H != null;
- }
-
- public String O() {
- return this.I;
- }
-
- public void k(String s) {
- this.I = s;
- }
-
- public void a(KeyPair keypair) {
- this.G = keypair;
- }
-
- public void a(EnumDifficulty enumdifficulty) {
- // CraftBukkit start - Use worlds list for iteration
- for (int j = 0; j < this.worlds.size(); ++j) {
- WorldServer worldserver = this.worlds.get(j);
- // CraftBukkit end
-
- if (worldserver != null) {
- if (worldserver.getWorldData().isHardcore()) {
- worldserver.difficulty = EnumDifficulty.HARD;
- worldserver.setSpawnFlags(true, true);
- } else if (this.N()) {
- worldserver.difficulty = enumdifficulty;
- worldserver.setSpawnFlags(worldserver.difficulty != EnumDifficulty.PEACEFUL, true);
- } else {
- worldserver.difficulty = enumdifficulty;
- worldserver.setSpawnFlags(this.getSpawnMonsters(), this.spawnAnimals);
- }
- }
- }
- }
-
- protected boolean getSpawnMonsters() {
- return true;
- }
-
- public boolean R() {
- return this.demoMode;
- }
-
- public void b(boolean flag) {
- this.demoMode = flag;
- }
-
- public void c(boolean flag) {
- this.L = flag;
- }
-
- public Convertable getConvertable() {
- return this.convertable;
- }
-
- public void U() {
- this.M = true;
- this.getConvertable().d();
-
- // CraftBukkit start
- for (int i = 0; i < this.worlds.size(); ++i) {
- WorldServer worldserver = this.worlds.get(i);
- // CraftBukkit end
-
- if (worldserver != null) {
- worldserver.saveLevel();
- }
- }
-
- this.getConvertable().e(this.worlds.get(0).getDataManager().g()); // CraftBukkit
- this.safeShutdown();
- }
-
- public String getResourcePack() {
- return this.N;
- }
-
- public void setTexturePack(String s) {
- this.N = s;
- }
-
- public void a(MojangStatisticsGenerator mojangstatisticsgenerator) {
- mojangstatisticsgenerator.a("whitelist_enabled", Boolean.valueOf(false));
- mojangstatisticsgenerator.a("whitelist_count", Integer.valueOf(0));
- mojangstatisticsgenerator.a("players_current", Integer.valueOf(this.C()));
- mojangstatisticsgenerator.a("players_max", Integer.valueOf(this.D()));
- mojangstatisticsgenerator.a("players_seen", Integer.valueOf(this.u.getSeenPlayers().length));
- mojangstatisticsgenerator.a("uses_auth", Boolean.valueOf(this.onlineMode));
- mojangstatisticsgenerator.a("gui_state", this.ak() ? "enabled" : "disabled");
- mojangstatisticsgenerator.a("run_time", Long.valueOf((ar() - mojangstatisticsgenerator.g()) / 60L * 1000L));
- mojangstatisticsgenerator.a("avg_tick_ms", Integer.valueOf((int) (MathHelper.a(this.g) * 1.0E-6D)));
- int i = 0;
-
- // CraftBukkit start - use worlds list for iteration
- for (int j = 0; j < this.worlds.size(); ++j) {
- WorldServer worldserver = this.worlds.get(j);
- if (worldServer != null) {
- // CraftBukkit end
- WorldData worlddata = worldserver.getWorldData();
-
- mojangstatisticsgenerator.a("world[" + i + "][dimension]", Integer.valueOf(worldserver.worldProvider.dimension));
- mojangstatisticsgenerator.a("world[" + i + "][mode]", worlddata.getGameType());
- mojangstatisticsgenerator.a("world[" + i + "][difficulty]", worldserver.difficulty);
- mojangstatisticsgenerator.a("world[" + i + "][hardcore]", Boolean.valueOf(worlddata.isHardcore()));
- mojangstatisticsgenerator.a("world[" + i + "][generator_name]", worlddata.getType().name());
- mojangstatisticsgenerator.a("world[" + i + "][generator_version]", Integer.valueOf(worlddata.getType().getVersion()));
- mojangstatisticsgenerator.a("world[" + i + "][height]", Integer.valueOf(this.E));
- mojangstatisticsgenerator.a("world[" + i + "][chunks_loaded]", Integer.valueOf(worldserver.L().getLoadedChunks()));
- ++i;
- }
- }
-
- mojangstatisticsgenerator.a("worlds", Integer.valueOf(i));
- }
-
- public void b(MojangStatisticsGenerator mojangstatisticsgenerator) {
- mojangstatisticsgenerator.b("singleplayer", Boolean.valueOf(this.N()));
- mojangstatisticsgenerator.b("server_brand", this.getServerModName());
- mojangstatisticsgenerator.b("gui_supported", GraphicsEnvironment.isHeadless() ? "headless" : "supported");
- mojangstatisticsgenerator.b("dedicated", Boolean.valueOf(this.X()));
- }
-
- public boolean getSnooperEnabled() {
- return true;
- }
-
- public abstract boolean X();
-
- public boolean getOnlineMode() {
- return this.server.getOnlineMode(); // CraftBukkit
- }
-
- public void setOnlineMode(boolean flag) {
- this.onlineMode = flag;
- }
-
- public boolean getSpawnAnimals() {
- return this.spawnAnimals;
- }
-
- public void setSpawnAnimals(boolean flag) {
- this.spawnAnimals = flag;
- }
-
- public boolean getSpawnNPCs() {
- return this.spawnNPCs;
- }
-
- public void setSpawnNPCs(boolean flag) {
- this.spawnNPCs = flag;
- }
-
- public boolean getPvP() {
- return this.pvpMode;
- }
-
- public void setPvP(boolean flag) {
- this.pvpMode = flag;
- }
-
- public boolean getAllowFlight() {
- return this.allowFlight;
- }
-
- public void setAllowFlight(boolean flag) {
- this.allowFlight = flag;
- }
-
- public abstract boolean getEnableCommandBlock();
-
- public String getMotd() {
- return this.motd;
- }
-
- public void setMotd(String s) {
- this.motd = s;
- }
-
- public int getMaxBuildHeight() {
- return this.E;
- }
-
- public void c(int i) {
- this.E = i;
- }
-
- public boolean isStopped() {
- return this.isStopped;
- }
-
- public PlayerList getPlayerList() {
- return this.u;
- }
-
- public void a(PlayerList playerlist) {
- this.u = playerlist;
- }
-
- public void a(EnumGamemode enumgamemode) {
- // CraftBukkit start - use worlds list for iteration
- for (int i = 0; i < this.worlds.size(); ++i) {
- getServer().worlds.get(i).getWorldData().setGameType(enumgamemode);
- // CraftBukkit end
- }
- }
-
- public ServerConnection ai() {
- return this.p;
- }
-
- public boolean ak() {
- return false;
- }
-
- public abstract String a(EnumGamemode enumgamemode, boolean flag);
-
- public int al() {
- return this.ticks;
- }
-
- public void am() {
- this.R = true;
- }
-
- public ChunkCoordinates getChunkCoordinates() {
- return new ChunkCoordinates(0, 0, 0);
- }
-
- public World getWorld() {
- return this.worlds.get(0); // CraftBukkit
- }
-
- public int getSpawnProtection() {
- return 16;
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- return false;
- }
-
- public void setForceGamemode(boolean flag) {
- this.S = flag;
- }
-
- public boolean getForceGamemode() {
- return this.S;
- }
-
- public Proxy aq() {
- return this.d;
- }
-
- public static long ar() {
- return System.currentTimeMillis();
- }
-
- public int getIdleTimeout() {
- return this.F;
- }
-
- public void setIdleTimeout(int i) {
- this.F = i;
- }
-
- public IChatBaseComponent getScoreboardDisplayName() {
- return new ChatComponentText(this.getName());
- }
-
- public boolean at() {
- return true;
- }
-
- public MinecraftSessionService av() {
- return this.U;
- }
-
- public GameProfileRepository getGameProfileRepository() {
- return this.W;
- }
-
- public UserCache getUserCache() {
- return this.X;
- }
-
- public ServerPing ay() {
- return this.q;
- }
-
- public void az() {
- this.V = 0L;
- }
-
- public static Logger getLogger() {
- return i;
- }
-
- public static PlayerList a(MinecraftServer minecraftserver) {
- return minecraftserver.u;
- }
-}