public static boolean copyFile(File inputFile, File outputFile, Boolean moveFile) {

    if (!inputFile.exists()) return false;

    if (outputFile.exists()) outputFile.delete();

    InputStream in;

    try {

      in = new FileInputStream(inputFile);
      OutputStream out = new FileOutputStream(outputFile);

      byte[] buffer = new byte[65536];
      int bytesRead = -1;

      while ((bytesRead = in.read(buffer)) != -1) out.write(buffer, 0, bytesRead);

      in.close();
      out.close();
    } catch (FileNotFoundException e) {
      if (Main.isDebug()) e.printStackTrace();
      return false;
    } catch (IOException e) {
      if (Main.isDebug()) e.printStackTrace();
      return false;
    }

    if (moveFile) inputFile.delete();

    return true;
  }
  public static String getPlsTitle(File file) {
    String result = file.getName();

    if (!file.exists()) return file.getName();

    try {
      BufferedReader br = new BufferedReader(new FileReader(file));

      String inLine;
      while ((inLine = br.readLine()) != null) {
        if (inLine.toLowerCase().contains("title") && inLine.length() > 7) {
          if (inLine.contains("(#")
              && inLine.contains(" - ")
              && inLine.contains("/")
              && inLine.contains(") ")) {
            String[] split = inLine.split("\\) "); // remove number of listeners information
            if (split != null && split.length > 1) {
              result = split[1];
              break;
            }
          } else {
            result = inLine.substring(7);
            break;
          }
        }
      }
      br.close();

    } catch (FileNotFoundException e) {
      if (Main.isDebug()) e.printStackTrace();
    } catch (IOException e) {
      if (Main.isDebug()) e.printStackTrace();
    }

    return result;
  }
  public static void updateSpoutcraftYMLCache() {
    if (!updated) {
      synchronized (key) {
        String urlName =
            MirrorUtils.getMirrorUrl("spoutcraft.yml", "http://get.spout.org/spoutcraft.yml", null);
        if (urlName != null) {
          try {
            int selected = -1;
            if (spoutcraftYML.exists()) {
              try {
                YAMLProcessor config = new YAMLProcessor(spoutcraftYML, false);
                config.load();
                selected = config.getInt("current", -1);
              } catch (Exception ex) {
                ex.printStackTrace();
              }
            }

            URL url = new URL(urlName);
            HttpURLConnection con = (HttpURLConnection) (url.openConnection());
            System.setProperty("http.agent", "");
            con.setRequestProperty(
                "User-Agent",
                "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30");
            Utils.copy(con.getInputStream(), new FileOutputStream(spoutcraftYML));

            YAMLProcessor config = new YAMLProcessor(spoutcraftYML, false);
            config.load();
            config.setProperty("current", selected);
            config.setProperty("launcher", Main.getBuild("launcher-version"));
            config.save();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        updated = true;
      }
    }
  }