diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java index e7b3a7a58..45b304dae 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/MultiplayerManager.java @@ -129,16 +129,19 @@ public final class MultiplayerManager { this.name = name; addRelatedThread(Lang.thread(this::waitFor, "CatoExitWaiter", true)); - addRelatedThread(Lang.thread(new StreamPump(process.getErrorStream(), it -> { - if (id == null) { - LOG.info("Cato: " + it); - Matcher matcher = TEMP_TOKEN_PATTERN.matcher(it); - if (matcher.find()) { - id = "mix" + matcher.group("id"); - onIdGenerated.fireEvent(new CatoIdEvent(this, id)); - } + addRelatedThread(Lang.thread(new StreamPump(process.getInputStream(), this::checkCatoLog), "CatoInputStreamPump", true)); + addRelatedThread(Lang.thread(new StreamPump(process.getErrorStream(), this::checkCatoLog), "CatoErrorStreamPump", true)); + } + + private void checkCatoLog(String log) { + if (id == null) { + LOG.info("Cato: " + log); + Matcher matcher = TEMP_TOKEN_PATTERN.matcher(log); + if (matcher.find()) { + id = "mix" + matcher.group("id"); + onIdGenerated.fireEvent(new CatoIdEvent(this, id)); } - }), "CatoStreamPump", true)); + } } private void waitFor() { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java index e2413e40b..7c4a72596 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java @@ -10,7 +10,11 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class CrashReportAnalyzer { +public final class CrashReportAnalyzer { + + private CrashReportAnalyzer() { + } + public enum Rule { // We manually write "Pattern.compile" here for IDEA syntax highlighting. @@ -165,4 +169,4 @@ public class CrashReportAnalyzer { return -1; } } -} +} \ No newline at end of file diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index f05cb6e2e..881eb3c04 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -406,7 +406,7 @@ public class DefaultLauncher extends Launcher { env.put("INST_NAME", versionName); env.put("INST_ID", versionName); env.put("INST_DIR", repository.getVersionRoot(version.getId()).getAbsolutePath()); - env.put("INST_MC_DIR", repository.getRunDirectory(version.getId()).getAbsolutePath()); + env.put("INST_MC_DIR", repository.getRunDirectory(version.getId()).getAbsolutePath()); env.put("INST_JAVA", options.getJava().getBinary().toString()); LibraryAnalyzer analyzer = LibraryAnalyzer.analyze(version); @@ -452,6 +452,7 @@ public class DefaultLauncher extends Launcher { writer.write("@echo off"); writer.newLine(); writer.write("set APPDATA=" + options.getGameDir().getAbsoluteFile().getParent()); + writer.newLine(); for (Map.Entry entry : getEnvVars().entrySet()) { writer.write("set " + entry.getKey() + "=" + entry.getValue()); writer.newLine(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/DownloadManager.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/DownloadManager.java index 86bfba6c8..431b4339c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/DownloadManager.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/DownloadManager.java @@ -29,6 +29,7 @@ public final class DownloadManager { public interface IMod { List loadDependencies() throws IOException; + Stream loadVersions() throws IOException; }