diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameException.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameException.java index df5c38372..b20ffaed7 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameException.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameException.java @@ -21,7 +21,7 @@ package org.jackhuang.hellominecraft.launcher.launch; * * @author huangyuhui */ -public class GameException extends RuntimeException { +public class GameException extends Exception { public GameException(String message) { super(message); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java index 0bff522b4..33fad302b 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java @@ -74,7 +74,7 @@ public class GameLauncher { else result = login.loginBySettings(); if (result == null) - throw new IllegalStateException("Result can not be null."); + throw new GameException("Result can not be null."); PluginManager.NOW_PLUGIN.onProcessingLoginResult(result); } catch (Throwable e) { String error = C.i18n("login.failed") + e.getMessage(); @@ -150,6 +150,7 @@ public class GameLauncher { builder.directory(provider.getRunDirectory(provider.getSelectedVersion().id)) .environment().put("APPDATA", get.getCanonicalGameDir()); JavaProcess jp = new JavaProcess(str, builder.start(), PROCESS_MANAGER); + HMCLog.log("The game process have been started"); launchEvent.execute(jp); } catch (Exception e) { failEvent.execute(C.i18n("launch.failed_creating_process") + "\n" + e.getMessage()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java index f08577a8c..fcf5349ea 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java @@ -77,7 +77,7 @@ public abstract class IMinecraftProvider { * * @return libraries of resolved minecraft version v. */ - public abstract GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v); + public abstract GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v) throws GameException; public abstract File getDecompressNativesToLocation(MinecraftVersion v); @@ -99,9 +99,9 @@ public abstract class IMinecraftProvider { * * @return what you want * - * @throws IllegalStateException circular denpendency versions + * @throws GameException circular denpendency versions */ - public abstract IMinecraftLoader provideMinecraftLoader(UserProfileProvider p) throws IllegalStateException; + public abstract IMinecraftLoader provideMinecraftLoader(UserProfileProvider p) throws GameException; /** * Rename version diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java index d9b01ca9b..b0139d0d3 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java @@ -289,6 +289,8 @@ public final class Profile { } public GameDirType getGameDirType() { + if (gameDirType < 0 || gameDirType > 1) + setGameDirType(GameDirType.ROOT_FOLDER); return GameDirType.values()[gameDirType]; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java index dda54564d..53ee84a2f 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java @@ -72,11 +72,11 @@ public class MinecraftVersion implements Cloneable, Comparable return new MinecraftVersion(minecraftArguments, mainClass, time, id, type, processArguments, releaseTime, assets, jar, inheritsFrom, minimumLauncherVersion, libraries, hidden); } - public MinecraftVersion resolve(IMinecraftProvider manager) { + public MinecraftVersion resolve(IMinecraftProvider manager) throws GameException { return resolve(manager, new HashSet<>()); } - protected MinecraftVersion resolve(IMinecraftProvider manager, Set resolvedSoFar) { + protected MinecraftVersion resolve(IMinecraftProvider manager, Set resolvedSoFar) throws GameException { if (inheritsFrom == null) return this; if (!resolvedSoFar.add(id)) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java index 12d9d3b9d..d67740eae 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java @@ -208,7 +208,7 @@ public class MinecraftVersionManager extends IMinecraftProvider { } @Override - public GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v) { + public GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v) throws GameException { if (v.libraries == null) throw new GameException("Wrong format: minecraft.json"); ArrayList unzippings = new ArrayList<>(); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java index 209074413..2f7bfbbf1 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java @@ -559,9 +559,10 @@ public class MainPagePanel extends AnimatedPanel implements Event { public boolean call(Object sender, List str) { final GameLauncher obj = (GameLauncher) sender; obj.launchEvent.register((sender1, p) -> { - if (obj.getProfile().getLauncherVisibility() == LauncherVisibility.CLOSE && !LogWindow.INSTANCE.isVisible()) + if (obj.getProfile().getLauncherVisibility() == LauncherVisibility.CLOSE && !LogWindow.INSTANCE.isVisible()) { + HMCLog.log("Without the option of keeping the launcher visible, this application will exit and will NOT catch game logs, but you can turn on \"Debug Mode\"."); System.exit(0); - else if (obj.getProfile().getLauncherVisibility() == LauncherVisibility.KEEP) + } else if (obj.getProfile().getLauncherVisibility() == LauncherVisibility.KEEP) MainFrame.INSTANCE.closeMessage(); else { if (LogWindow.INSTANCE.isVisible()) @@ -570,16 +571,20 @@ public class MainPagePanel extends AnimatedPanel implements Event { } JavaProcessMonitor jpm = new JavaProcessMonitor(p); jpm.applicationExitedAbnormallyEvent.register((sender2, t) -> { + HMCLog.err("The game exited abnormally, exit code: " + t); MessageBox.Show(C.i18n("launch.exited_abnormally") + ", exit code: " + t); return true; }); jpm.jvmLaunchFailedEvent.register((sender2, t) -> { + HMCLog.err("Cannot create jvm, exit code: " + t); MessageBox.Show(C.i18n("launch.cannot_create_jvm") + ", exit code: " + t); return true; }); jpm.stoppedEvent.register((sender2, t) -> { - if (obj.getProfile().getLauncherVisibility() != LauncherVisibility.KEEP && !LogWindow.INSTANCE.isVisible()) + if (obj.getProfile().getLauncherVisibility() != LauncherVisibility.KEEP && !LogWindow.INSTANCE.isVisible()) { + HMCLog.log("Without the option of keeping the launcher visible, this application will exit and will NOT catch game logs, but you can turn on \"Debug Mode\"."); System.exit(0); + } return true; }); jpm.start(); diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/Hex.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/Hex.java index 24e9f6a99..0b544982c 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/Hex.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/Hex.java @@ -72,10 +72,10 @@ public class Hex { return new String(encodeHex(data)); } - protected static int toDigit(char ch, int index) throws Exception { + protected static int toDigit(char ch, int index) { int digit = Character.digit(ch, 16); if (digit == -1) - throw new Exception("Illegal hexadecimal character " + ch + " at index " + index); + throw new IllegalArgumentException("Illegal hexadecimal character " + ch + " at index " + index); return digit; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java index e26576c18..731ec019a 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java @@ -74,8 +74,6 @@ public class FileUtils { public static void cleanDirectory(File directory) throws IOException { if (!directory.exists()) { - //String message = directory + " does not exist"; - //throw new IllegalArgumentException(message); directory.mkdirs(); return; }