private boolean init() {
    this.consoleCommandHandler = new ConsoleCommandHandler(this);
    ThreadCommandReader threadcommandreader = new ThreadCommandReader(this);

    threadcommandreader.setDaemon(true);
    threadcommandreader.start();
    ConsoleLogManager.init();
    log.info("Starting minecraft server version 1.2.4");
    if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
      log.warning(
          "To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
    }

    log.info("Loading properties");
    this.propertyManager = new PropertyManager(new File("server.properties"));
    this.y = this.propertyManager.getString("server-ip", "");
    this.onlineMode = this.propertyManager.getBoolean("online-mode", true);
    this.spawnAnimals = this.propertyManager.getBoolean("spawn-animals", true);
    this.spawnNPCs = this.propertyManager.getBoolean("spawn-npcs", true);
    this.pvpMode = this.propertyManager.getBoolean("pvp", true);
    this.allowFlight = this.propertyManager.getBoolean("allow-flight", false);
    this.motd = this.propertyManager.getString("motd", "A Minecraft Server");
    this.motd.replace('\u00a7', '$');
    InetAddress inetaddress = null;

    if (this.y.length() > 0) {
      inetaddress = InetAddress.getByName(this.y);
    }

    this.z = this.propertyManager.getInt("server-port", 25565);
    log.info(
        "Starting Minecraft server on " + (this.y.length() == 0 ? "*" : this.y) + ":" + this.z);

    try {
      this.networkListenThread = new NetworkListenThread(this, inetaddress, this.z);
    } catch (IOException ioexception) {
      log.warning("**** FAILED TO BIND TO PORT!");
      log.log(Level.WARNING, "The exception was: " + ioexception.toString());
      log.warning("Perhaps a server is already running on that port?");
      return false;
    }

    if (!this.onlineMode) {
      log.warning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
      log.warning("The server will make no attempt to authenticate usernames. Beware.");
      log.warning(
          "While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.");
      log.warning("To change this, set \"online-mode\" to \"true\" in the server.settings file.");
    }

    this.serverConfigurationManager = new ServerConfigurationManager(this);
    this.tracker[0] = new EntityTracker(this, 0);
    this.tracker[1] = new EntityTracker(this, -1);
    this.tracker[2] = new EntityTracker(this, 1);
    long i = System.nanoTime();
    String s = this.propertyManager.getString("level-name", "world");
    String s1 = this.propertyManager.getString("level-seed", "");
    String s2 = this.propertyManager.getString("level-type", "DEFAULT");
    long j = (new Random()).nextLong();

    if (s1.length() > 0) {
      try {
        long k = Long.parseLong(s1);

        if (k != 0L) {
          j = k;
        }
      } catch (NumberFormatException numberformatexception) {
        j = (long) s1.hashCode();
      }
    }

    WorldType worldtype = WorldType.getType(s2);

    if (worldtype == null) {
      worldtype = WorldType.NORMAL;
    }

    this.t = this.propertyManager.getInt("max-build-height", 256);
    this.t = (this.t + 8) / 16 * 16;
    this.t = MathHelper.a(this.t, 64, 256);
    this.propertyManager.a("max-build-height", Integer.valueOf(this.t));
    log.info("Preparing level \"" + s + "\"");
    this.a(new WorldLoaderServer(new File(".")), s, j, worldtype);
    log.info("Done (" + (System.nanoTime() - i) + "ns)! For help, type \"help\" or \"?\"");
    if (this.propertyManager.getBoolean("enable-query", false)) {
      log.info("Starting GS4 status listener");
      this.I = new RemoteStatusListener(this);
      this.I.a();
    }

    if (this.propertyManager.getBoolean("enable-rcon", false)) {
      log.info("Starting remote control listener");
      this.J = new RemoteControlListener(this);
      this.J.a();
    }

    return true;
  }
  private boolean init()
      throws java.net.UnknownHostException { // CraftBukkit - added throws UnknownHostException
    this.consoleCommandHandler = new ConsoleCommandHandler(this);
    ThreadCommandReader threadcommandreader = new ThreadCommandReader(this);

    threadcommandreader.setDaemon(true);
    threadcommandreader.start();
    ConsoleLogManager.init(this); // CraftBukkit

    // CraftBukkit start
    System.setOut(new PrintStream(new LoggerOutputStream(log, Level.INFO), true));
    System.setErr(new PrintStream(new LoggerOutputStream(log, Level.SEVERE), true));
    // CraftBukkit end

    log.info("Starting minecraft server version 1.2.5");
    if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
      log.warning("**** NOT ENOUGH RAM!");
      log.warning("You can allocate(allow)");
    }

    log.info("Loading properties");
    this.propertyManager = new PropertyManager(this.options); // CraftBukkit - CLI argument support
    this.y = this.propertyManager.getString("server-ip", "");
    this.onlineMode = this.propertyManager.getBoolean("online-mode", true);
    this.spawnAnimals = this.propertyManager.getBoolean("spawn-animals", true);
    this.spawnNPCs = this.propertyManager.getBoolean("spawn-npcs", true);
    this.pvpMode = this.propertyManager.getBoolean("pvp", true);
    this.allowFlight = this.propertyManager.getBoolean("allow-flight", false);
    this.motd = this.propertyManager.getString("motd", "A Custom Modpack Server from Atex");
    this.motd.replace('\u00a7', '$');
    InetAddress inetaddress = null;

    if (this.y.length() > 0) {
      inetaddress = InetAddress.getByName(this.y);
    }

    this.z = this.propertyManager.getInt("server-port", 25565);
    log.info(
        String.format(
            "Starting Minecraft server on %s:%s", (this.y.length() == 0 ? "*" : this.y), this.z));

    try {
      this.networkListenThread = new NetworkListenThread(this, inetaddress, this.z);
    } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
      log.warning("**** FAILED TO BIND TO PORT!");
      log.log(Level.WARNING, "The exception was: " + ioexception.toString());
      log.warning("Perhaps a server is already running on that port?");
      return false;
    }

    if (!this.onlineMode) {
      log.warning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
      log.warning("The server will make no attempt to authenticate usernames. Beware.");
      log.warning(
          "While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.");
      log.warning(
          "To change this, set \"online-mode\" to \"true\" in the server.properties file."); // CraftBukkit - type. Seriously. :D
    }

    this.serverConfigurationManager = new ServerConfigurationManager(this);
    // CraftBukkit - removed trackers
    long i = System.nanoTime();
    String s = this.propertyManager.getString("level-name", "world");
    String s1 = this.propertyManager.getString("level-seed", "");
    String s2 = this.propertyManager.getString("level-type", "DEFAULT");
    long j = (new Random()).nextLong();

    if (s1.length() > 0) {
      try {
        long k = Long.parseLong(s1);

        if (k != 0L) {
          j = k;
        }
      } catch (NumberFormatException numberformatexception) {
        j = (long) s1.hashCode();
      }
    }

    WorldType worldtype = WorldType.getType(s2);

    if (worldtype == null) {
      worldtype = WorldType.NORMAL;
    }

    this.t = this.propertyManager.getInt("max-build-height", 256);
    this.t = (this.t + 8) / 16 * 16;
    this.t = MathHelper.a(this.t, 64, 256);
    this.propertyManager.a("max-build-height", Integer.valueOf(this.t));
    log.info("Preparing level \"" + s + "\"");
    this.a(
        new WorldLoaderServer(server.getWorldContainer()),
        s,
        j,
        worldtype); // CraftBukkit - world container
    long l = System.nanoTime() - i;
    String s3 = String.format("%.3fs", new Object[] {Double.valueOf((double) l / 1.0E9D)});

    log.info("Done (" + s3 + ")! For help, type \"help\" or \"?\"");
    if (this.propertyManager.getBoolean("enable-query", false)) {
      log.info("Starting GS4 status listener");
      this.I = new RemoteStatusListener(this);
      this.I.a();
    }

    if (this.propertyManager.getBoolean("enable-rcon", false)) {
      log.info("Starting remote control listener");
      this.J = new RemoteControlListener(this);
      this.J.a();
      this.remoteConsole =
          new org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender(); // CraftBukkit
    }

    // CraftBukkit start
    if (this.propertyManager.properties.containsKey("spawn-protection")) {
      log.info(
          "'spawn-protection' in server.properties has been moved to 'settings.spawn-radius' in bukkit.yml. I will move your config for you.");
      this.server.setSpawnRadius(this.propertyManager.getInt("spawn-protection", 16));
      this.propertyManager.properties.remove("spawn-protection");
      this.propertyManager.savePropertiesFile();
    }
    // CraftBukkit end

    return true;
  }
  protected boolean init()
      throws java.net.UnknownHostException { // CraftBukkit - throws UnknownHostException
    ThreadCommandReader threadcommandreader =
        new ThreadCommandReader(this, "Server console handler");

    threadcommandreader.setDaemon(true);
    threadcommandreader.start();

    // CraftBukkit start - TODO: handle command-line logging arguments
    java.util.logging.Logger global = java.util.logging.Logger.getLogger("");
    global.setUseParentHandlers(false);
    for (java.util.logging.Handler handler : global.getHandlers()) {
      global.removeHandler(handler);
    }
    global.addHandler(new org.bukkit.craftbukkit.util.ForwardLogHandler());

    final org.apache.logging.log4j.core.Logger logger =
        ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger());
    for (org.apache.logging.log4j.core.Appender appender : logger.getAppenders().values()) {
      if (appender instanceof org.apache.logging.log4j.core.appender.ConsoleAppender) {
        logger.removeAppender(appender);
      }
    }

    new Thread(new org.bukkit.craftbukkit.util.TerminalConsoleWriterThread(System.out, this.reader))
        .start();

    System.setOut(new PrintStream(new LoggerOutputStream(logger, Level.INFO), true));
    System.setErr(new PrintStream(new LoggerOutputStream(logger, Level.WARN), true));
    // CraftBukkit end

    i.info("Starting minecraft server version 1.7.10");
    if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
      i.warn(
          "To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
    }

    i.info("Loading properties");
    this.propertyManager = new PropertyManager(this.options); // CraftBukkit - CLI argument support
    this.n = new EULA(new File("eula.txt"));
    if (!this.n.a()) {
      i.info(
          "You need to agree to the EULA in order to run the server. Go to eula.txt for more info.");
      this.n.b();
      return false;
    } else {
      if (this.N()) {
        this.c("127.0.0.1");
      } else {
        this.setOnlineMode(this.propertyManager.getBoolean("online-mode", true));
        this.c(this.propertyManager.getString("server-ip", ""));
      }

      this.setSpawnAnimals(this.propertyManager.getBoolean("spawn-animals", true));
      this.setSpawnNPCs(this.propertyManager.getBoolean("spawn-npcs", true));
      this.setPvP(this.propertyManager.getBoolean("pvp", true));
      this.setAllowFlight(this.propertyManager.getBoolean("allow-flight", false));
      this.setTexturePack(this.propertyManager.getString("resource-pack", ""));
      this.setMotd(this.propertyManager.getString("motd", "A Minecraft Server"));
      this.setForceGamemode(this.propertyManager.getBoolean("force-gamemode", false));
      this.setIdleTimeout(this.propertyManager.getInt("player-idle-timeout", 0));
      if (this.propertyManager.getInt("difficulty", 1) < 0) {
        this.propertyManager.setProperty("difficulty", Integer.valueOf(0));
      } else if (this.propertyManager.getInt("difficulty", 1) > 3) {
        this.propertyManager.setProperty("difficulty", Integer.valueOf(3));
      }

      this.generateStructures = this.propertyManager.getBoolean("generate-structures", true);
      int gamemode =
          this.propertyManager.getInt(
              "gamemode",
              EnumGamemode.SURVIVAL
                  .getId()); // CraftBukkit - Unique name to avoid stomping on logger

      this.p = WorldSettings.a(gamemode); // CraftBukkit - Use new name
      i.info("Default game type: " + this.p);
      InetAddress inetaddress = null;

      if (this.getServerIp().length() > 0) {
        inetaddress = InetAddress.getByName(this.getServerIp());
      }

      if (this.L() < 0) {
        this.setPort(this.propertyManager.getInt("server-port", 25565));
      }

      i.info("Generating keypair");
      this.a(MinecraftEncryption.b());
      i.info(
          "Starting Minecraft server on "
              + (this.getServerIp().length() == 0 ? "*" : this.getServerIp())
              + ":"
              + this.L());

      try {
        this.ai().a(inetaddress, this.L());
      } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
        i.warn("**** FAILED TO BIND TO PORT!");
        i.warn("The exception was: {}", new Object[] {ioexception.toString()});
        i.warn("Perhaps a server is already running on that port?");
        return false;
      }

      this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit

      if (!this.getOnlineMode()) {
        i.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!");
        i.warn("The server will make no attempt to authenticate usernames. Beware.");
        i.warn(
            "While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.");
        i.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file.");
      }

      if (this.aE()) {
        this.getUserCache().c();
      }

      if (!NameReferencingFileConverter.a(this.propertyManager)) {
        return false;
      } else {
        // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit - moved up
        this.convertable =
            new WorldLoaderServer(
                server.getWorldContainer()); // CraftBukkit - moved from MinecraftServer constructor
        long j = System.nanoTime();

        if (this.O() == null) {
          this.k(this.propertyManager.getString("level-name", "world"));
        }

        String s = this.propertyManager.getString("level-seed", "");
        String s1 = this.propertyManager.getString("level-type", "DEFAULT");
        String s2 = this.propertyManager.getString("generator-settings", "");
        long k = (new Random()).nextLong();

        if (s.length() > 0) {
          try {
            long l = Long.parseLong(s);

            if (l != 0L) {
              k = l;
            }
          } catch (NumberFormatException numberformatexception) {
            k = (long) s.hashCode();
          }
        }

        WorldType worldtype = WorldType.getType(s1);

        if (worldtype == null) {
          worldtype = WorldType.NORMAL;
        }

        this.at();
        this.getEnableCommandBlock();
        this.l();
        this.getSnooperEnabled();
        this.c(this.propertyManager.getInt("max-build-height", 256));
        this.c((this.getMaxBuildHeight() + 8) / 16 * 16);
        this.c(MathHelper.a(this.getMaxBuildHeight(), 64, 256));
        this.propertyManager.setProperty(
            "max-build-height", Integer.valueOf(this.getMaxBuildHeight()));
        i.info("Preparing level \"" + this.O() + "\"");
        this.a(this.O(), this.O(), k, worldtype, s2);
        long i1 = System.nanoTime() - j;
        String s3 = String.format("%.3fs", new Object[] {Double.valueOf((double) i1 / 1.0E9D)});

        i.info("Done (" + s3 + ")! For help, type \"help\" or \"?\"");
        if (this.propertyManager.getBoolean("enable-query", false)) {
          i.info("Starting GS4 status listener");
          this.k = new RemoteStatusListener(this);
          this.k.a();
        }

        if (this.propertyManager.getBoolean("enable-rcon", false)) {
          i.info("Starting remote control listener");
          this.l = new RemoteControlListener(this);
          this.l.a();
          this.remoteConsole =
              new org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender(); // CraftBukkit
        }

        // CraftBukkit start
        if (this.server.getBukkitSpawnRadius() > -1) {
          i.info(
              "'settings.spawn-radius' in bukkit.yml has been moved to 'spawn-protection' in server.properties. I will move your config for you.");
          this.propertyManager.properties.remove("spawn-protection");
          this.propertyManager.getInt("spawn-protection", this.server.getBukkitSpawnRadius());
          this.server.removeBukkitSpawnRadius();
          this.propertyManager.savePropertiesFile();
        }
        // CraftBukkit end

        return true;
      }
    }
  }