@Override public void onStatus(String status) { System.out.println(status); if (isGettingPlayerNumber == 1) { Pattern p = Pattern.compile("There are [0-9]*/[0-9]* players online"); Matcher m = p.matcher(status); if (!m.find()) return; String s = m.group(0); s = s.substring(10, s.length() - 15); playerNumber = s; isGettingPlayerNumber = 2; return; } else if (isGettingPlayerNumber == 2) { try { status = status.substring(status.lastIndexOf("]") + 1); status = status.substring(status.indexOf(":") + 1); } catch (Exception e) { HMCLog.warn("Failed to substring status.", e); } String[] s; if (StrUtils.isNotBlank(status)) s = status.trim().split(", "); else s = new String[0]; Pair<String, String[]> p = new Pair<>(playerNumber, s); isGettingPlayerNumber = 0; gettingPlayerNumber.accept(p); return; } if (isDone == false) { Pattern p = Pattern.compile( "\\[INFO\\] Done \\([0-9]*\\.[0-9]*s\\)! For help, type \"help\" or \"\\?\""); Matcher m = p.matcher(status); if (m.find()) { stoppedEvent.execute(null); timer = new Timer(); timerTasks.clear(); for (int i = 0; i < schedules.size(); i++) { if (schedules.get(i).timeType == Schedule.TIME_TYPE_SERVER_STARTED) { ScheduleTranslator.translate(this, schedules.get(i)).run(); continue; } if (schedules.get(i).timeType != Schedule.TIME_TYPE_PER) continue; long mill = (long) Math.floor(schedules.get(i).per * 60 * 1000); timerTasks.add(ScheduleTranslator.translate(this, schedules.get(i))); timer.schedule(timerTasks.get(i), mill, mill); } pastTimer = new javax.swing.Timer(1000, this); pastTimer.start(); System.out.println("Server started!"); sendStatus("*** 服务端已启动完成 ***"); isDone = true; } } if (status.length() > 20) if (status.substring(20).contains("[SEVERE] This crash report has been saved to: ")) for (Schedule schedule : schedules) if (schedule.timeType == Schedule.TIME_TYPE_SERVER_CRASHED) ScheduleTranslator.translate(this, schedule).run(); }
public void loadVersions() { SwingUtilities.invokeLater( () -> { synchronized (InstallerPanel.this) { DefaultTableModel model = (DefaultTableModel) lstInstallers.getModel(); String mcver = StrUtils.formatVersion(gsp.getMinecraftVersionFormatted()); versions = list.getVersions(mcver); SwingUtils.clearDefaultTable(lstInstallers); if (versions != null) for (InstallerVersionList.InstallerVersion v : versions) if (v != null) model.addRow( new Object[] { v.selfVersion == null ? "null" : v.selfVersion, v.mcVersion == null ? "null" : v.mcVersion }); } }); }
public void run() throws IOException { String jvmPath; if (StrUtils.isBlank(SettingsManager.settings.javaDir)) jvmPath = IOUtils.getJavaDir(); else jvmPath = SettingsManager.settings.javaDir; String[] puts = new String[] { jvmPath, "-Xmx" + memory + "m", "-jar", SettingsManager.settings.mainjar, "nogui", "-nojline" }; ProcessBuilder pb = new ProcessBuilder(puts); pb.directory(new File(SettingsManager.settings.mainjar).getParentFile()); try { disactiveMods( SettingsManager.settings.inactiveExtMods, SettingsManager.settings.inactiveCoreMods, SettingsManager.settings.inactivePlugins); server = pb.start(); registerThread(threadA, server.getInputStream()); registerThread(threadB, server.getErrorStream()); registerThreadC(server); try { bw = new BufferedWriter( new OutputStreamWriter( server.getOutputStream(), System.getProperty("sun.jnu.encoding", "utf-8"))); } catch (UnsupportedEncodingException ex) { bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream())); } isRunning = true; startedEvent.execute(null); sendStatus("*** 启动服务端中 ***"); } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); isRunning = false; } }
@SuppressWarnings({"CallToPrintStackTrace", "UseSpecificCatch"}) public static void main(String[] args) throws IOException { { PluginManager.getPlugin(DefaultPlugin.class); if (IUpgrader.NOW_UPGRADER.parseArguments(getVersionNumber(), args)) return; System.setProperty("awt.useSystemAAFontSettings", "on"); System.setProperty("swing.aatext", "true"); System.setProperty("sun.java2d.noddraw", "true"); System.setProperty("sun.java2d.dpiaware", "false"); Thread.setDefaultUncaughtExceptionHandler(new CrashReporter(true)); try { File file = new File("hmcl.log"); if (!file.exists() && !file.createNewFile()) HMCLog.warn("Failed to create log file " + file); Configuration.DEFAULT.appenders.add( new ConsoleAppender( "File", new DefaultLayout(), true, new FileOutputStream(file), true)); } catch (IOException ex) { LOGGER.log( Level.SEVERE, "Failed to add log appender File because an error occurred while creating or opening hmcl.log", ex); } HMCLog.log("*** " + Main.makeTitle() + " ***"); String s = Settings.getInstance().getLocalization(); for (SupportedLocales sl : SupportedLocales.values()) if (sl.name().equals(s)) { SupportedLocales.NOW_LOCALE = sl; Locale.setDefault(sl.self); } LogWindow.INSTANCE.clean(); LogWindow.INSTANCE.setTerminateGame(GameLauncher.PROCESS_MANAGER::stopAllProcesses); try { LOOK_AND_FEEL = new HelloMinecraftLookAndFeel(Settings.getInstance().getTheme().settings); UIManager.setLookAndFeel(LOOK_AND_FEEL); } catch (ParseException | UnsupportedLookAndFeelException ex) { HMCLog.warn("Failed to set look and feel...", ex); } Settings.UPDATE_CHECKER.outdated.register(IUpgrader.NOW_UPGRADER); Settings.UPDATE_CHECKER.process(false).reg(t -> Main.invokeUpdate()).execute(); if (StrUtils.isNotBlank(Settings.getInstance().getProxyHost()) && StrUtils.isNotBlank(Settings.getInstance().getProxyPort()) && MathUtils.canParseInt(Settings.getInstance().getProxyPort())) { HMCLog.log("Initializing customized proxy"); System.setProperty("http.proxyHost", Settings.getInstance().getProxyHost()); System.setProperty("http.proxyPort", Settings.getInstance().getProxyPort()); if (StrUtils.isNotBlank(Settings.getInstance().getProxyUserName()) && StrUtils.isNotBlank(Settings.getInstance().getProxyPassword())) Authenticator.setDefault( new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( Settings.getInstance().getProxyUserName(), Settings.getInstance().getProxyPassword().toCharArray()); } }); } try { PluginManager.plugin().showUI(); } catch (Throwable t) { new CrashReporter(false).uncaughtException(Thread.currentThread(), t); System.exit(1); } } }