diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java index e0969c872..c7b813a87 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java @@ -64,7 +64,7 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { String str = v.getJavaDir(); JdkVersion jv = new JdkVersion(str); - if(Settings.getInstance().getJava().contains(jv)) + if (Settings.getInstance().getJava().contains(jv)) jv = Settings.getInstance().getJava().get(Settings.getInstance().getJava().indexOf(jv)); else try { jv = JdkVersion.getJavaVersionFromExecutable(str); @@ -153,11 +153,9 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { res.add(args.length > 1 ? args[1] : "25565"); } - if (v.isFullscreen()) - res.add("--fullscreen"); + if (v.isFullscreen()) res.add("--fullscreen"); - if (v.isDebug() && !v.isCanceledWrapper()) - res.add("-debug"); + if (v.isDebug() && !v.isCanceledWrapper()) res.add("-debug"); if (StrUtils.isNotBlank(v.getMinecraftArgs())) res.addAll(Arrays.asList(v.getMinecraftArgs().split(" "))); @@ -172,6 +170,7 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { *
  • main class
  • *
  • minecraft arguments
  • * + * * @param list the command list you shoud edit. */ protected abstract void makeSelf(List list); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java index 7cff8bddd..7dd3dbc8e 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/DefaultGameLauncher.java @@ -57,17 +57,12 @@ public class DefaultGameLauncher extends GameLauncher { return flag; }); decompressNativesEvent.register((sender, value) -> { - //boolean flag = true; for (int i = 0; i < value.decompressFiles.length; i++) try { Compressor.unzip(value.decompressFiles[i], value.decompressTo, value.extractRules[i]); } catch (IOException ex) { HMCLog.err("Unable to decompress library file: " + value.decompressFiles[i] + " to " + value.decompressTo, ex); - //flag = false; } - /*if(!flag) - if(MessageBox.Show(C.i18n("launch.not_finished_decompressing_natives"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) - flag = true;*/ return true; }); } 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 59667015d..04f987a29 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java @@ -104,8 +104,14 @@ public class GameLauncher { File file = provider.getDecompressNativesToLocation(); if (file != null) FileUtils.cleanDirectoryQuietly(file); - if(!downloadLibrariesEvent.execute(provider.getDownloadLibraries(downloadType))) { failEvent.execute(C.i18n("launch.failed")); return null; } - if(!decompressNativesEvent.execute(provider.getDecompressLibraries())) { failEvent.execute(C.i18n("launch.failed")); return null; } + if (!downloadLibrariesEvent.execute(provider.getDownloadLibraries(downloadType))) { + failEvent.execute(C.i18n("launch.failed")); + return null; + } + if (!decompressNativesEvent.execute(provider.getDecompressLibraries())) { + failEvent.execute(C.i18n("launch.failed")); + return null; + } successEvent.execute(loader.makeLaunchingCommand()); return loader; } @@ -185,6 +191,7 @@ public class GameLauncher { } public static class DecompressLibraryJob { + File[] decompressFiles; String[][] extractRules; File decompressTo; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java index 84d44e493..ca31e8372 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java @@ -23,5 +23,6 @@ import java.util.List; * @author huangyuhui */ public interface IMinecraftLoader { + List makeLaunchingCommand(); } 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 f58e027f0..a92cb68cc 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java @@ -29,46 +29,64 @@ import org.jackhuang.hellominecraft.launcher.version.MinecraftVersion; * @author huangyuhui */ public abstract class IMinecraftProvider { + Profile profile; public IMinecraftProvider(Profile profile) { this.profile = profile; } - + public abstract File getRunDirectory(String id); + public abstract List getDownloadLibraries(DownloadType type); + public abstract void openSelf(String version); + public abstract void open(String version, String folder); + public abstract File getAssets(); + public abstract File getResourcePacks(); + public abstract GameLauncher.DecompressLibraryJob getDecompressLibraries(); + public abstract File getDecompressNativesToLocation(); + public abstract File getMinecraftJar(); + public abstract File getBaseFolder(); /** * Launch + * * @param p player informations, including username & auth_token * @param type according to the class name 233 * @return what you want * @throws IllegalStateException circular denpendency versions */ public abstract IMinecraftLoader provideMinecraftLoader(UserProfileProvider p, DownloadType type) throws IllegalStateException; - + // Versions public abstract boolean renameVersion(String from, String to); + public abstract boolean removeVersionFromDisk(String a); + public abstract boolean refreshJson(String a); + public abstract boolean refreshAssetsIndex(String a); - + public abstract MinecraftVersion getOneVersion(); + public abstract Collection getVersions(); + public abstract MinecraftVersion getVersionById(String id); + public abstract int getVersionCount(); + public abstract void refreshVersions(); - + public abstract boolean install(String version, DownloadType type); - + public abstract void onLaunch(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/LaunchScriptFinisher.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/LaunchScriptFinisher.java index d3058f8d6..9c547c490 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/LaunchScriptFinisher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/LaunchScriptFinisher.java @@ -36,7 +36,7 @@ public class LaunchScriptFinisher implements Event> { boolean flag = false; try { String s = JOptionPane.showInputDialog(C.i18n("mainwindow.enter_script_name")); - if(s != null) MessageBox.Show(C.i18n("mainwindow.make_launch_succeed") + " " + ((GameLauncher)sender).makeLauncher(s, str).getAbsolutePath()); + if (s != null) MessageBox.Show(C.i18n("mainwindow.make_launch_succeed") + " " + ((GameLauncher) sender).makeLauncher(s, str).getAbsolutePath()); flag = true; } catch (IOException ex) { MessageBox.Show(C.i18n("mainwindow.make_launch_script_failed")); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java index 9e1517b82..578c6f894 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftCrashAdvicer.java @@ -28,28 +28,27 @@ public final class MinecraftCrashAdvicer { public static String getAdvice(String trace) { return getAdvice(trace, false); } - + public static String getAdvice(String trace, boolean selfCrash) { trace = trace.toLowerCase(); - if(trace.contains("pixel format not accelerated")) { + if (trace.contains("pixel format not accelerated")) return C.i18n("crash.advice.LWJGLException"); - } else if (trace.contains("unsupportedclassversionrrror")) { + else if (trace.contains("unsupportedclassversionrrror")) return C.i18n("crash.advice.UnsupportedClassVersionError"); - } else if (trace.contains("concurrentmodificationexception")) { + else if (trace.contains("concurrentmodificationexception")) return C.i18n("crash.advice.ConcurrentModificationException"); - } else if (trace.contains("securityexception")) { + else if (trace.contains("securityexception")) return C.i18n("crash.advice.SecurityException"); - } else if (trace.contains("nosuchfieldexception") || trace.contains("nosuchfielderror")) { + else if (trace.contains("nosuchfieldexception") || trace.contains("nosuchfielderror")) return C.i18n("crash.advice.NoSuchFieldError"); - } else if (trace.contains("outofmemory") || trace.contains("out of memory")) { + else if (trace.contains("outofmemory") || trace.contains("out of memory")) return C.i18n("crash.advice.OutOfMemoryError"); - } else if (trace.contains("noclassdeffounderror") || trace.contains("classnotfoundexception")) { + else if (trace.contains("noclassdeffounderror") || trace.contains("classnotfoundexception")) return C.i18n("crash.advice.ClassNotFoundException"); - } else if (trace.contains("no lwjgl in java.library.path")) { + else if (trace.contains("no lwjgl in java.library.path")) return C.i18n("crash.advice.no_lwjgl"); - } else if (trace.contains("opengl") || trace.contains("openal")) { + else if (trace.contains("opengl") || trace.contains("openal")) return C.i18n("crash.advice.OpenGL"); - } return C.i18n(selfCrash ? "crash.advice.no" : "crash.advice.otherwise"); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Config.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Config.java index 5278c6218..9cf7695ad 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Config.java @@ -31,6 +31,7 @@ import org.jackhuang.hellominecraft.utils.system.OS; * @author huangyuhui */ public final class Config { + @SerializedName("last") private String last; @SerializedName("bgpath") @@ -119,7 +120,7 @@ public final class Config { } public TreeMap getConfigurations() { - if(configurations == null) + if (configurations == null) configurations = new TreeMap<>(); return configurations; } @@ -141,7 +142,7 @@ public final class Config { this.yggdrasil = yggdrasil; Settings.save(); } - + @SerializedName("logintype") private int logintype; @SerializedName("downloadtype") @@ -152,22 +153,21 @@ public final class Config { private boolean checkUpdate; @SerializedName("yggdrasil") private Map yggdrasil; - - public Config() - { + + public Config() { clientToken = UUID.randomUUID().toString(); username = ""; logintype = downloadtype = 0; checkUpdate = true; - configurations = new TreeMap<>(); - Profile profile = new Profile(); - configurations.put(profile.getName(), profile); + configurations = new TreeMap<>(); + Profile profile = new Profile(); + configurations.put(profile.getName(), profile); enableShadow = OS.os() == OS.WINDOWS; theme = 0; } public DownloadType getDownloadSource() { - if(downloadtype >= DownloadType.values().length || downloadtype < 0) return null; + if (downloadtype >= DownloadType.values().length || downloadtype < 0) return null; return DownloadType.values()[downloadtype]; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/LauncherVisibility.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/LauncherVisibility.java index 1ec1e55bd..d7194e15c 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/LauncherVisibility.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/LauncherVisibility.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.settings; * @author huangyuhui */ public enum LauncherVisibility { + CLOSE, HIDE, KEEP 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 8ccfa2fe0..1b7bf39ea 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java @@ -53,32 +53,30 @@ public final class Profile { protected transient IMinecraftProvider minecraftProvider; public Profile() { - this("Default"); + this("Default"); } public Profile(String name) { - this.name = name; - gameDir = MCUtils.getInitGameDir().getPath(); - debug = fullscreen = canceledWrapper = false; - javaDir = IOUtils.getJavaDir(); - launcherVisibility = gameDirType = 0; + this.name = name; + gameDir = MCUtils.getInitGameDir().getPath(); + debug = fullscreen = canceledWrapper = false; + javaDir = IOUtils.getJavaDir(); + launcherVisibility = gameDirType = 0; minecraftArgs = serverIp = ""; } public Profile(Profile v) { - this(); - if (v == null) { - return; - } - name = v.name; - gameDir = v.gameDir; - maxMemory = v.maxMemory; - width = v.width; - height = v.height; - fullscreen = v.fullscreen; - javaArgs = v.javaArgs; - javaDir = v.javaDir; - debug = v.debug; + this(); + if (v == null) return; + name = v.name; + gameDir = v.gameDir; + maxMemory = v.maxMemory; + width = v.width; + height = v.height; + fullscreen = v.fullscreen; + javaArgs = v.javaArgs; + javaDir = v.javaDir; + debug = v.debug; minecraftArgs = v.minecraftArgs; permSize = v.permSize; gameDirType = v.gameDirType; @@ -90,167 +88,162 @@ public final class Profile { } public IMinecraftProvider getMinecraftProvider() { - if(minecraftProvider == null) minecraftProvider = new MinecraftVersionManager(this); + if (minecraftProvider == null) minecraftProvider = new MinecraftVersionManager(this); return minecraftProvider; } public MinecraftVersion getSelectedMinecraftVersion() { - if (StrUtils.isBlank(selectedMinecraftVersion)) { - MinecraftVersion v = getMinecraftProvider().getOneVersion(); - if (v == null) { - return null; - } - selectedMinecraftVersion = v.id; - return v; - } - MinecraftVersion v = getMinecraftProvider().getVersionById(selectedMinecraftVersion); - if(v == null) v = getMinecraftProvider().getOneVersion(); - if(v != null) setSelectedMinecraftVersion(v.id); - return v; + if (StrUtils.isBlank(selectedMinecraftVersion)) { + MinecraftVersion v = getMinecraftProvider().getOneVersion(); + if (v == null) return null; + selectedMinecraftVersion = v.id; + return v; + } + MinecraftVersion v = getMinecraftProvider().getVersionById(selectedMinecraftVersion); + if (v == null) v = getMinecraftProvider().getOneVersion(); + if (v != null) setSelectedMinecraftVersion(v.id); + return v; } public String getGameDir() { - if (StrUtils.isBlank(gameDir)) { - gameDir = MCUtils.getInitGameDir().getPath(); - } - return IOUtils.addSeparator(gameDir); + if (StrUtils.isBlank(gameDir)) gameDir = MCUtils.getInitGameDir().getPath(); + return IOUtils.addSeparator(gameDir); } - + public String getCanonicalGameDir() { - return IOUtils.tryGetCanonicalFolderPath(getGameDirFile()); + return IOUtils.tryGetCanonicalFolderPath(getGameDirFile()); } - + public File getCanonicalGameDirFile() { - return IOUtils.tryGetCanonicalFile(getGameDirFile()); + return IOUtils.tryGetCanonicalFile(getGameDirFile()); } public File getGameDirFile() { - return new File(getGameDir()); + return new File(getGameDir()); } public Profile setGameDir(String gameDir) { - this.gameDir = gameDir; + this.gameDir = gameDir; Settings.save(); return this; } public String getJavaDir() { - if (StrUtils.isBlank(javaDir)) { - javaDir = IOUtils.getJavaDir(); - } - return javaDir; + if (StrUtils.isBlank(javaDir)) + javaDir = IOUtils.getJavaDir(); + return javaDir; } public File getJavaDirFile() { - return new File(getJavaDir()); + return new File(getJavaDir()); } public void setJavaDir(String javaDir) { - this.javaDir = javaDir; + this.javaDir = javaDir; Settings.save(); } public File getFolder(String folder) { - return new File(getGameDir(), folder); + return new File(getGameDir(), folder); } public String getName() { - return name; + return name; } public void setName(String name) { - this.name = name; + this.name = name; } public void setSelectedMinecraftVersion(String selectedMinecraftVersion) { - this.selectedMinecraftVersion = selectedMinecraftVersion; + this.selectedMinecraftVersion = selectedMinecraftVersion; } public String getJavaArgs() { - if(StrUtils.isBlank(javaArgs)) return ""; - return javaArgs; + if (StrUtils.isBlank(javaArgs)) return ""; + return javaArgs; } public void setJavaArgs(String javaArgs) { - this.javaArgs = javaArgs; + this.javaArgs = javaArgs; Settings.save(); } - + public boolean hasJavaArgs() { return StrUtils.isNotBlank(getJavaArgs().trim()); } public String getMaxMemory() { - if(StrUtils.isBlank(maxMemory)) return String.valueOf(Utils.getSuggestedMemorySize()); - return maxMemory; + if (StrUtils.isBlank(maxMemory)) return String.valueOf(Utils.getSuggestedMemorySize()); + return maxMemory; } public void setMaxMemory(String maxMemory) { - this.maxMemory = maxMemory; + this.maxMemory = maxMemory; Settings.save(); } public String getWidth() { - if(StrUtils.isBlank(width)) return "854"; - return width; + if (StrUtils.isBlank(width)) return "854"; + return width; } public void setWidth(String width) { - this.width = width; + this.width = width; } public String getHeight() { - if(StrUtils.isBlank(height)) return "480"; - return height; + if (StrUtils.isBlank(height)) return "480"; + return height; } public void setHeight(String height) { - this.height = height; + this.height = height; Settings.save(); } public String getUserProperties() { - if(userProperties == null) return ""; - return userProperties; + if (userProperties == null) return ""; + return userProperties; } public void setUserProperties(String userProperties) { - this.userProperties = userProperties; + this.userProperties = userProperties; } public boolean isFullscreen() { - return fullscreen; + return fullscreen; } public void setFullscreen(boolean fullscreen) { - this.fullscreen = fullscreen; + this.fullscreen = fullscreen; Settings.save(); } public boolean isDebug() { - return debug; + return debug; } public void setDebug(boolean debug) { - this.debug = debug; + this.debug = debug; Settings.save(); } public LauncherVisibility getLauncherVisibility() { - return LauncherVisibility.values()[launcherVisibility]; + return LauncherVisibility.values()[launcherVisibility]; } public void setLauncherVisibility(LauncherVisibility launcherVisibility) { - this.launcherVisibility = launcherVisibility.ordinal(); + this.launcherVisibility = launcherVisibility.ordinal(); Settings.save(); } public GameDirType getGameDirType() { - return GameDirType.values()[gameDirType]; + return GameDirType.values()[gameDirType]; } public void setGameDirType(GameDirType gameDirType) { - this.gameDirType = gameDirType.ordinal(); + this.gameDirType = gameDirType.ordinal(); Settings.save(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java index 8a58f7899..286b8cbcc 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Settings.java @@ -38,7 +38,7 @@ import org.jackhuang.hellominecraft.utils.VersionNumber; * @author huangyuhui */ public final class Settings { - + public static final String DEFAULT_PROFILE = "Default"; public static final File settingsFile = new File(IOUtils.currentDir(), "hmcl.json"); @@ -60,10 +60,9 @@ public final class Settings { settings = initSettings(); if (!getVersions().containsKey(DEFAULT_PROFILE)) getVersions().put(DEFAULT_PROFILE, new Profile()); - - for(Profile e : getVersions().values()) { + + for (Profile e : getVersions().values()) e.checkFormat(); - } UPDATE_CHECKER = new UpdateChecker(new VersionNumber(Main.firstVer, Main.secondVer, Main.thirdVer), "hmcl", settings.isCheckUpdate(), () -> Main.invokeUpdate()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/MCUtils.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/MCUtils.java index f983d2882..b70067f16 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/MCUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/MCUtils.java @@ -84,8 +84,8 @@ public final class MCUtils { String ver = new String(tmp, i, j - i, "ASCII"); r.version = ver; - r.type = file.getEntry("META-INF/MANIFEST.MF") == null ? - MinecraftVersionRequest.Modified : MinecraftVersionRequest.OK; + r.type = file.getEntry("META-INF/MANIFEST.MF") == null + ? MinecraftVersionRequest.Modified : MinecraftVersionRequest.OK; return r; } @@ -134,8 +134,8 @@ public final class MCUtils { k++; r.version = new String(tmp, k, i - k + 1); } - r.type = file.getEntry("META-INF/MANIFEST.MF") == null ? - MinecraftVersionRequest.Modified : MinecraftVersionRequest.OK; + r.type = file.getEntry("META-INF/MANIFEST.MF") == null + ? MinecraftVersionRequest.Modified : MinecraftVersionRequest.OK; return r; } @@ -295,11 +295,12 @@ public final class MCUtils { String result = NetUtils.doGet(sourceType.getProvider().getVersionsListDownloadURL()); return MinecraftRemoteVersions.fromJson(result); } - + public static String profile = "{\"selectedProfile\": \"(Default)\",\"profiles\": {\"(Default)\": {\"name\": \"(Default)\"}},\"clientToken\": \"88888888-8888-8888-8888-888888888888\"}"; + public static void tryWriteProfile(File gameDir) throws IOException { File file = new File(gameDir, "launcher_profiles.json"); - if(!file.exists()) + if (!file.exists()) FileUtils.writeStringToFile(file, profile); } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsIndex.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsIndex.java index 30503fafe..3c348ee7a 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsIndex.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsIndex.java @@ -30,20 +30,20 @@ public class AssetsIndex { public static final String DEFAULT_ASSET_NAME = "legacy"; private Map objects; private boolean virtual; - + public AssetsIndex() { - this.objects = new LinkedHashMap(); + this.objects = new LinkedHashMap(); } public Map getFileMap() { - return this.objects; + return this.objects; } public Set getUniqueObjects() { - return new HashSet(this.objects.values()); + return new HashSet(this.objects.values()); } public boolean isVirtual() { - return this.virtual; + return this.virtual; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoader.java index e37568e20..d4a2b61ab 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoader.java @@ -54,21 +54,16 @@ public class AssetsLoader extends Thread { for (int i = 0; i < contents.getLength(); i++) { Node result = contents.item(i); if (result.getNodeType() == Node.ELEMENT_NODE) { - if (result.getNodeName().equalsIgnoreCase("Key")) { + if (result.getNodeName().equalsIgnoreCase("Key")) ret.key = result.getTextContent(); - } - if (result.getNodeName().equalsIgnoreCase("ETag")) { + if (result.getNodeName().equalsIgnoreCase("ETag")) ret.eTag = result.getTextContent(); - } - if (result.getNodeName().equalsIgnoreCase("LastModified")) { + if (result.getNodeName().equalsIgnoreCase("LastModified")) ret.lastModified = result.getTextContent(); - } - if (result.getNodeName().equalsIgnoreCase("Size")) { + if (result.getNodeName().equalsIgnoreCase("Size")) ret.size = MathUtils.parseInt(result.getTextContent(), 0); - } - if (result.getNodeName().equalsIgnoreCase("StorageClass")) { + if (result.getNodeName().equalsIgnoreCase("StorageClass")) ret.storageClass = result.getTextContent(); - } } } return ret; @@ -90,7 +85,7 @@ public class AssetsLoader extends Thread { Node result = nodes.item(i); if (result.getNodeType() == Node.ELEMENT_NODE && result.getNodeName().equals("Contents")) { Contents c = modifyContents(result.getChildNodes()); - if(c.key != null) + if (c.key != null) al.add(c); } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoaderListener.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoaderListener.java index c38d2df0a..598ccd1b7 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoaderListener.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsLoaderListener.java @@ -27,4 +27,4 @@ public interface AssetsLoaderListener { void OnDone(ArrayList loader); void OnFailed(Exception e); -} \ No newline at end of file +} diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangLoader.java index 45b4e3ffc..466f79caa 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangLoader.java @@ -71,7 +71,7 @@ public class AssetsMojangLoader extends IAssetsHandler { return; } AssetsIndex o; - try { + try { o = C.gson.fromJson(result, AssetsIndex.class); } catch (Exception e) { HMCLog.err("Failed to parse index json, please redownload it!", e); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangOldLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangOldLoader.java index 73ef37f90..fcc85b6f1 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangOldLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsMojangOldLoader.java @@ -61,11 +61,11 @@ public class AssetsMojangOldLoader extends IAssetsHandler { @Override public boolean isVersionAllowed(String formattedVersion) { VersionNumber r = VersionNumber.check(formattedVersion); - if(r == null) return false; - return VersionNumber.check("1.7.2").compareTo(r) >= 0 && - VersionNumber.check("1.6.0").compareTo(r) <= 0; + if (r == null) return false; + return VersionNumber.check("1.7.2").compareTo(r) >= 0 + && VersionNumber.check("1.6.0").compareTo(r) <= 0; } - + @Override public Task getDownloadTask(IDownloadProvider sourceType) { return new AssetsTask(URL); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsObject.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsObject.java index 178ea4ad9..0ad31b66f 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsObject.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/AssetsObject.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.utils.assets; * @author huangyuhui */ public class AssetsObject { + private String hash; private long size; @@ -28,26 +29,26 @@ public class AssetsObject { } public String getHash() { - return this.hash; + return this.hash; } public long getSize() { - return this.size; + return this.size; } @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - AssetsObject that = (AssetsObject) o; - if (this.size != that.size) return false; - return this.hash.equals(that.hash); + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AssetsObject that = (AssetsObject) o; + if (this.size != that.size) return false; + return this.hash.equals(that.hash); } @Override public int hashCode() { - int result = this.hash.hashCode(); - result = 31 * result + (int) (this.size ^ this.size >>> 32); - return result; + int result = this.hash.hashCode(); + result = 31 * result + (int) (this.size ^ this.size >>> 32); + return result; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/Contents.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/Contents.java index d8be93b35..8252d0f6d 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/Contents.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/Contents.java @@ -21,8 +21,8 @@ package org.jackhuang.hellominecraft.launcher.utils.assets; * @author huangyuhui */ public class Contents { - + public String key, eTag, lastModified, storageClass; public long size; - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/IAssetsHandler.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/IAssetsHandler.java index 31e594c37..7ab2a32d1 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/IAssetsHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/assets/IAssetsHandler.java @@ -62,7 +62,6 @@ public abstract class IAssetsHandler { static { assetsHandlers.add(new AssetsMojangLoader(C.i18n("assets.list.1_7_3_after"))); - //assetsHandlers.add(new AssetsMojangOldLoader(C.i18n("assets.list.1_6"))); } /** diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/IAuthenticator.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/IAuthenticator.java index e8d0fa5d7..d222e0453 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/IAuthenticator.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/IAuthenticator.java @@ -30,28 +30,26 @@ public abstract class IAuthenticator { public static final YggdrasilAuthenticator yggdrasilLogin; public static final OfflineAuthenticator offlineLogin; public static final SkinmeAuthenticator skinmeLogin; - //public static final BestLogin bestLogin; public static final List logins; static { - String clientToken = Settings.getInstance().getClientToken(); - logins = new ArrayList<>(); - logins.add(offlineLogin = new OfflineAuthenticator(clientToken)); - logins.add(yggdrasilLogin = new YggdrasilAuthenticator(clientToken)); - logins.add(skinmeLogin = new SkinmeAuthenticator(clientToken)); - //logins.add(bestLogin = new BestLogin(clientToken)); - yggdrasilLogin.onLoadSettings(Settings.getInstance().getYggdrasilConfig()); + String clientToken = Settings.getInstance().getClientToken(); + logins = new ArrayList<>(); + logins.add(offlineLogin = new OfflineAuthenticator(clientToken)); + logins.add(yggdrasilLogin = new YggdrasilAuthenticator(clientToken)); + logins.add(skinmeLogin = new SkinmeAuthenticator(clientToken)); + yggdrasilLogin.onLoadSettings(Settings.getInstance().getYggdrasilConfig()); - Runtime.getRuntime().addShutdownHook(new Thread(() -> - Settings.getInstance().setYggdrasilConfig(yggdrasilLogin.onSaveSettings()) + Runtime.getRuntime().addShutdownHook(new Thread(() + -> Settings.getInstance().setYggdrasilConfig(yggdrasilLogin.onSaveSettings()) )); } protected String clientToken; public IAuthenticator(String clientToken) { - this.clientToken = clientToken; + this.clientToken = clientToken; } /** @@ -74,11 +72,11 @@ public abstract class IAuthenticator { * @return Will I hide password box? */ public boolean isHidePasswordBox() { - return false; + return false; } public boolean isLoggedIn() { - return false; + return false; } public void setRememberMe(boolean is) { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/LoginInfo.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/LoginInfo.java index cdb855f96..3a56df797 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/LoginInfo.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/LoginInfo.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.utils.auth; * @author huangyuhui */ public final class LoginInfo { + public String username, password; public LoginInfo(String username, String password) { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/UserProfileProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/UserProfileProvider.java index 938033c9c..5c034c013 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/UserProfileProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/auth/UserProfileProvider.java @@ -109,14 +109,14 @@ public final class UserProfileProvider { public void setUserType(String userType) { this.userType = userType; } - + private String username = ""; private String userId = ""; private String session = ""; private String accessToken = ""; private boolean success = false; private String error = ""; - private String userProperties = "{}"; + private String userProperties = "{}"; private String userPropertyMap = "{}"; private String otherInfo = ""; private String clientIdentifier = ""; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/BMCLAPIDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/BMCLAPIDownloadProvider.java index 568db6a20..693936bdf 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/BMCLAPIDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/BMCLAPIDownloadProvider.java @@ -23,17 +23,17 @@ import org.jackhuang.hellominecraft.launcher.utils.installers.InstallerVersionLi * @author huangyuhui */ public class BMCLAPIDownloadProvider implements IDownloadProvider { - + @Override public InstallerVersionList getForgeInstaller() { return org.jackhuang.hellominecraft.launcher.utils.installers.forge.bmcl.ForgeBMCLVersionList.getInstance(); } - + @Override public InstallerVersionList getLiteLoaderInstaller() { return org.jackhuang.hellominecraft.launcher.utils.installers.liteloader.LiteLoaderVersionList.getInstance(); } - + @Override public InstallerVersionList getOptiFineInstaller() { return org.jackhuang.hellominecraft.launcher.utils.installers.optifine.bmcl.OptiFineBMCLVersionList.getInstance(); @@ -41,9 +41,9 @@ public class BMCLAPIDownloadProvider implements IDownloadProvider { @Override public InstallerVersionList getInstallerByType(String type) { - if(type.equalsIgnoreCase("forge")) return getForgeInstaller(); - if(type.equalsIgnoreCase("liteloader")) return getLiteLoaderInstaller(); - if(type.equalsIgnoreCase("optifine")) return getOptiFineInstaller(); + if (type.equalsIgnoreCase("forge")) return getForgeInstaller(); + if (type.equalsIgnoreCase("liteloader")) return getLiteLoaderInstaller(); + if (type.equalsIgnoreCase("optifine")) return getOptiFineInstaller(); return null; } @@ -64,17 +64,17 @@ public class BMCLAPIDownloadProvider implements IDownloadProvider { @Override public String getVersionsListDownloadURL() { - return "http://bmclapi2.bangbang93.com/versions/versions.json"; + return "http://bmclapi2.bangbang93.com/versions/versions.json"; } @Override public String getAssetsDownloadURL() { - return "http://bmclapi2.bangbang93.com/assets/"; + return "http://bmclapi2.bangbang93.com/assets/"; } @Override public boolean isAllowedToUseSelfURL() { return false; } - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/DownloadType.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/DownloadType.java index 603922f8f..59b6a4f5e 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/DownloadType.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/DownloadType.java @@ -23,12 +23,13 @@ import org.jackhuang.hellominecraft.C; * @author huangyuhui */ public enum DownloadType { + Mojang(C.i18n("download.mojang"), new MojangDownloadProvider()), BMCL(C.i18n("download.BMCL"), new BMCLAPIDownloadProvider()); - + private final String name; private final IDownloadProvider provider; - + DownloadType(String a, IDownloadProvider provider) { name = a; this.provider = provider; @@ -37,7 +38,7 @@ public enum DownloadType { public IDownloadProvider getProvider() { return provider; } - + public String getName() { return name; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/IDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/IDownloadProvider.java index 2b749c9a6..4e466bb00 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/IDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/IDownloadProvider.java @@ -23,14 +23,24 @@ import org.jackhuang.hellominecraft.launcher.utils.installers.InstallerVersionLi * @author huangyuhui */ public interface IDownloadProvider { + InstallerVersionList getInstallerByType(String type); + InstallerVersionList getForgeInstaller(); + InstallerVersionList getLiteLoaderInstaller(); + InstallerVersionList getOptiFineInstaller(); + String getLibraryDownloadURL(); + String getVersionsDownloadURL(); + String getIndexesDownloadURL(); + String getVersionsListDownloadURL(); + String getAssetsDownloadURL(); + boolean isAllowedToUseSelfURL(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/MojangDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/MojangDownloadProvider.java index 9ec14947f..e53044f90 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/MojangDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/download/MojangDownloadProvider.java @@ -41,9 +41,9 @@ public class MojangDownloadProvider implements IDownloadProvider { @Override public InstallerVersionList getInstallerByType(String type) { - if(type.equalsIgnoreCase("forge")) return getForgeInstaller(); - if(type.equalsIgnoreCase("liteloader")) return getLiteLoaderInstaller(); - if(type.equalsIgnoreCase("optifine")) return getOptiFineInstaller(); + if (type.equalsIgnoreCase("forge")) return getForgeInstaller(); + if (type.equalsIgnoreCase("liteloader")) return getLiteLoaderInstaller(); + if (type.equalsIgnoreCase("optifine")) return getOptiFineInstaller(); return null; } @@ -76,5 +76,5 @@ public class MojangDownloadProvider implements IDownloadProvider { public boolean isAllowedToUseSelfURL() { return true; } - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallProfile.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallProfile.java index 9890fc5a6..f383b61f4 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallProfile.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallProfile.java @@ -25,6 +25,7 @@ import org.jackhuang.hellominecraft.launcher.utils.installers.forge.Install; * @author huangyuhui */ public class InstallProfile { + @SerializedName("install") public Install install; @SerializedName("versionInfo") diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallerVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallerVersionList.java index 12971ef08..72dcc7829 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallerVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/InstallerVersionList.java @@ -25,33 +25,40 @@ import org.jackhuang.hellominecraft.utils.functions.Consumer; * @author huangyuhui */ public abstract class InstallerVersionList implements Consumer { + /** * Refresh installer versions list from the downloaded content. + * * @param versions Minecraft versions you need to refresh * @throws java.lang.Exception */ public abstract void refreshList(String[] versions) throws Exception; + public abstract String getName(); + public abstract List getVersions(String mcVersion); - + public static class InstallerVersion implements Comparable { - public String selfVersion, mcVersion; - public String installer, universal; + + public String selfVersion, mcVersion; + public String installer, universal; public String changelog; - public InstallerVersion(String selfVersion, String mcVersion) { - this.selfVersion = selfVersion; - this.mcVersion = mcVersion; - } + public InstallerVersion(String selfVersion, String mcVersion) { + this.selfVersion = selfVersion; + this.mcVersion = mcVersion; + } @Override public int compareTo(InstallerVersion o) { return selfVersion.compareTo(o.selfVersion); } } - + public static class InstallerVersionComparator implements Comparator { + public static final InstallerVersionComparator INSTANCE = new InstallerVersionComparator(); + @Override public int compare(InstallerVersion o1, InstallerVersion o2) { return o2.compareTo(o1); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeInstaller.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeInstaller.java index 8b4b1c9b4..27fd35352 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeInstaller.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeInstaller.java @@ -48,8 +48,8 @@ public class ForgeInstaller extends Task { public IMinecraftProvider mp; public ForgeInstaller(IMinecraftProvider mp, File forgeInstaller) { - this.gameDir = mp.getBaseFolder(); - this.forgeInstaller = forgeInstaller; + this.gameDir = mp.getBaseFolder(); + this.forgeInstaller = forgeInstaller; this.mp = mp; } @@ -64,17 +64,15 @@ public class ForgeInstaller extends Task { InstallProfile profile = gson.fromJson(content, InstallProfile.class); File from = new File(gameDir, "versions" + File.separator + profile.install.minecraft); - if(!from.exists()) { - if(MessageBox.Show(C.i18n("install.no_version_if_intall")) == MessageBox.YES_OPTION) { - if(!mp.install(profile.install.minecraft, Settings.getInstance().getDownloadSource())) { + if (!from.exists()) { + if (MessageBox.Show(C.i18n("install.no_version_if_intall")) == MessageBox.YES_OPTION) { + if (!mp.install(profile.install.minecraft, Settings.getInstance().getDownloadSource())) setFailReason(new RuntimeException(C.i18n("install.no_version"))); - } - } else { + } else setFailReason(new RuntimeException(C.i18n("install.no_version"))); - } return false; } - + File to = new File(gameDir, "versions" + File.separator + profile.install.target); to.mkdirs(); @@ -100,7 +98,7 @@ public class ForgeInstaller extends Task { bos.close(); } return true; - } catch(IOException | JsonSyntaxException e) { + } catch (IOException | JsonSyntaxException e) { setFailReason(e); return false; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeOldInstaller.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeOldInstaller.java index 41bbdba1f..ee0b5edb0 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeOldInstaller.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/ForgeOldInstaller.java @@ -26,12 +26,12 @@ import org.jackhuang.hellominecraft.launcher.utils.installers.PackMinecraftInsta * @author huangyuhui */ public class ForgeOldInstaller { - + public static void install(String destMinecraftJar, String srcMinecraftJar, String forgeUniversal) throws IOException { ArrayList al = new ArrayList<>(); al.add(srcMinecraftJar); al.add(forgeUniversal); new PackMinecraftInstaller(al, new File(destMinecraftJar)).install(); } - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/Install.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/Install.java index 9fe78b7db..1110be42c 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/Install.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/Install.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.utils.installers.forge; * @author huangyuhui */ public class Install { + public String profileName; public String target; public String path; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeBMCLVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeBMCLVersionList.java index a01930092..8c116cb18 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeBMCLVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeBMCLVersionList.java @@ -49,21 +49,21 @@ public class ForgeBMCLVersionList extends InstallerVersionList { @Override public void refreshList(String[] neededVersions) throws Exception { - if(versionMap == null) { + if (versionMap == null) { versionMap = new HashMap<>(); versions = new ArrayList<>(); } - + for (String x : neededVersions) { - if(versionMap.containsKey(x)) continue; + if (versionMap.containsKey(x)) continue; String s = NetUtils.doGet("http://bmclapi2.bangbang93.com/forge/minecraft/" + x); - if (s == null) { + if (s == null) continue; - } try { - root = C.gson.fromJson(s, new TypeToken>(){}.getType()); + root = C.gson.fromJson(s, new TypeToken>() { + }.getType()); for (ForgeVersion v : root) { InstallerVersion iv = new InstallerVersion(v.version, StrUtils.formatVersion(v.minecraft)); @@ -74,7 +74,7 @@ public class ForgeBMCLVersionList extends InstallerVersionList { al.add(iv); versions.add(iv); } - } catch(JsonSyntaxException e) { + } catch (JsonSyntaxException e) { HMCLog.warn("Failed to parse BMCLAPI2 response.", e); } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeVersion.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeVersion.java index 5c4cc58f7..d6c1d9507 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/bmcl/ForgeVersion.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.utils.installers.forge.bmcl; * @author huangyuhui */ public class ForgeVersion { + public String time, minecraft, version, _id, __v; public Downloads downloads; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersion.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersion.java index 8d74212fc..4ded15798 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersion.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.utils.installers.forge.vanilla; * @author huangyuhui */ public class MinecraftForgeVersion { + public String branch, mcversion, jobver, version; public int build; public double modified; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionList.java index 36519f620..4b10f00ba 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionList.java @@ -32,71 +32,75 @@ import org.jackhuang.hellominecraft.utils.NetUtils; * @author huangyuhui */ public class MinecraftForgeVersionList extends InstallerVersionList { + private static MinecraftForgeVersionList instance; + public static MinecraftForgeVersionList getInstance() { - if(instance == null) - instance = new MinecraftForgeVersionList(); - return instance; + if (instance == null) + instance = new MinecraftForgeVersionList(); + return instance; } public MinecraftForgeVersionRoot root; public Map> versionMap; public List versions; - + @Override public void refreshList(String[] needed) throws Exception { String s = NetUtils.doGet(C.URL_FORGE_LIST); - if(root!=null) return; - - root = C.gson.fromJson(s, MinecraftForgeVersionRoot.class); - - versionMap = new HashMap>(); - versions = new ArrayList(); - - for(Map.Entry arr : root.mcversion.entrySet()) { - String mcver = StrUtils.formatVersion(arr.getKey()); - ArrayList al = new ArrayList(); - for(int num : arr.getValue()) { - MinecraftForgeVersion v = root.number.get(num); - InstallerVersion iv = new InstallerVersion(v.version, StrUtils.formatVersion(v.mcversion)); - for(String[] f : v.files) { + if (root != null) return; - String ver = v.mcversion + "-" + v.version; - if(!StrUtils.isBlank(v.branch)) { - ver = ver + "-" + v.branch; - } - String filename = root.artifact + "-" + ver + "-" + f[1] + "." + f[0]; - String url = root.webpath + "/" + ver + "/" + filename; - if(f[1].equals("installer")) { - iv.installer = url; - } else if(f[1].equals("universal")) { - iv.universal = url; - } else if(f[1].equals("changelog")) { - iv.changelog = url; - } - } - if(StrUtils.isBlank(iv.installer) || StrUtils.isBlank(iv.universal)) { - continue; - } + root = C.gson.fromJson(s, MinecraftForgeVersionRoot.class); + + versionMap = new HashMap<>(); + versions = new ArrayList<>(); + + for (Map.Entry arr : root.mcversion.entrySet()) { + String mcver = StrUtils.formatVersion(arr.getKey()); + ArrayList al = new ArrayList<>(); + for (int num : arr.getValue()) { + MinecraftForgeVersion v = root.number.get(num); + InstallerVersion iv = new InstallerVersion(v.version, StrUtils.formatVersion(v.mcversion)); + for (String[] f : v.files) { + + String ver = v.mcversion + "-" + v.version; + if (!StrUtils.isBlank(v.branch)) + ver = ver + "-" + v.branch; + String filename = root.artifact + "-" + ver + "-" + f[1] + "." + f[0]; + String url = root.webpath + "/" + ver + "/" + filename; + switch (f[1]) { + case "installer": + iv.installer = url; + break; + case "universal": + iv.universal = url; + break; + case "changelog": + iv.changelog = url; + break; + } + } + if (StrUtils.isBlank(iv.installer) || StrUtils.isBlank(iv.universal)) + continue; Collections.sort(al, new InstallerVersionNewerComparator()); - al.add(iv); + al.add(iv); versions.add(iv); - } - - versionMap.put(StrUtils.formatVersion(mcver), al); - } - + } + + versionMap.put(StrUtils.formatVersion(mcver), al); + } + Collections.sort(versions, new InstallerVersionComparator()); } @Override public List getVersions(String mcVersion) { if (versions == null || versionMap == null) return null; - if(StrUtils.isBlank(mcVersion)) return versions; - List c = versionMap.get(mcVersion); - if(c == null) return versions; + if (StrUtils.isBlank(mcVersion)) return versions; + List c = versionMap.get(mcVersion); + if (c == null) return versions; Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; + return c; } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionRoot.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionRoot.java index ae97b88cf..76753df30 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionRoot.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/vanilla/MinecraftForgeVersionRoot.java @@ -23,6 +23,7 @@ import java.util.Map; * @author huangyuhui */ public class MinecraftForgeVersionRoot { + public String artifact, webpath, adfly, homepage, name; public Map branches, mcversion; public Map promos; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderInstaller.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderInstaller.java index 2ae464ce3..0706b859a 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderInstaller.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderInstaller.java @@ -51,25 +51,25 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrat @Override public boolean executeTask() { - if(profile == null || profile.getSelectedMinecraftVersion() == null) { + if (profile == null || profile.getSelectedMinecraftVersion() == null) { setFailReason(new RuntimeException(C.i18n("install.no_version"))); return false; } - if(pre.size() != 1 && installer == null) throw new IllegalStateException("No registered previous task."); - if(installer == null) + if (pre.size() != 1 && installer == null) throw new IllegalStateException("No registered previous task."); + if (installer == null) installer = pre.get(pre.size() - 1).getResult(); try { MinecraftVersion mv = (MinecraftVersion) profile.getSelectedMinecraftVersion().clone(); mv.inheritsFrom = mv.id; mv.jar = mv.jar == null ? mv.id : mv.jar; mv.libraries = new ArrayList(Arrays.asList(version.libraries)); - + mv.libraries.add(0, new MinecraftLibrary("com.mumfrey:liteloader:" + version.selfVersion)); FileUtils.copyFile(installer, new File(profile.getCanonicalGameDir(), "libraries/com/mumfrey/liteloader/" + version.selfVersion + "/liteloader-" + version.selfVersion + ".jar")); mv.id += "-LiteLoader" + version.selfVersion; - if(!mv.mainClass.startsWith("net.minecraft.launchwrapper.")) { + if (!mv.mainClass.startsWith("net.minecraft.launchwrapper.")) { mv.mainClass = "net.minecraft.launchwrapper.Launch"; mv.minecraftArguments += " --tweakClass " + version.tweakClass; } @@ -78,7 +78,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrat File json = new File(folder, mv.id + ".json"); HMCLog.log("Creating new version profile..." + mv.id + ".json"); FileUtils.write(json, C.gsonPrettyPrinting.toJson(mv)); - + return true; } catch (Exception e) { setFailReason(e); @@ -90,8 +90,9 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrat public String getInfo() { return C.i18n("install.liteloader.install"); } - + ArrayList> pre = new ArrayList<>(); + @Override public Task registerPreviousResult(PreviousResult pr) { pre.add(pr); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderMCVersions.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderMCVersions.java index 19b342c8c..cc92dad20 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderMCVersions.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderMCVersions.java @@ -23,5 +23,6 @@ import java.util.Map; * @author huangyuhui */ public class LiteLoaderMCVersions { + public Map> artefacts; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersion.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersion.java index 1ee8d62da..086e00fa3 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersion.java @@ -23,6 +23,7 @@ import org.jackhuang.hellominecraft.launcher.version.MinecraftLibrary; * @author huangyuhui */ public class LiteLoaderVersion { + public String tweakClass, file, version, md5, timestamp; public MinecraftLibrary[] libraries; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionList.java index 6423fd827..ee87bd41e 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionList.java @@ -35,12 +35,13 @@ import org.jackhuang.hellominecraft.utils.StrUtils; * @author huangyuhui */ public class LiteLoaderVersionList extends InstallerVersionList { + private static LiteLoaderVersionList instance; + public static LiteLoaderVersionList getInstance() { - if(instance == null) { - instance = new LiteLoaderVersionList(); - } - return instance; + if (instance == null) + instance = new LiteLoaderVersionList(); + return instance; } public LiteLoaderVersionsRoot root; @@ -50,56 +51,57 @@ public class LiteLoaderVersionList extends InstallerVersionList { @Override public void refreshList(String[] needed) throws Exception { String s = NetUtils.doGet(C.URL_LITELOADER_LIST); - if(root != null) return; - - root = C.gson.fromJson(s, LiteLoaderVersionsRoot.class); - - versionMap = new HashMap<>(); - versions = new ArrayList<>(); - - for(Map.Entry arr : root.versions.entrySet()) { - ArrayList al = new ArrayList<>(); + if (root != null) return; + + root = C.gson.fromJson(s, LiteLoaderVersionsRoot.class); + + versionMap = new HashMap<>(); + versions = new ArrayList<>(); + + for (Map.Entry arr : root.versions.entrySet()) { + ArrayList al = new ArrayList<>(); LiteLoaderMCVersions mcv = arr.getValue(); - for(Map.Entry entry : mcv.artefacts.get("com.mumfrey:liteloader").entrySet()) { - if("latest".equals(entry.getKey())) continue; + for (Map.Entry entry : mcv.artefacts.get("com.mumfrey:liteloader").entrySet()) { + if ("latest".equals(entry.getKey())) continue; LiteLoaderVersion v = entry.getValue(); - LiteLoaderInstallerVersion iv = new LiteLoaderInstallerVersion(v.version, StrUtils.formatVersion(arr.getKey())); - iv.universal = "http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + arr.getKey() + "/" + v.file; - iv.tweakClass = v.tweakClass; - iv.libraries = Arrays.copyOf(v.libraries, v.libraries.length); + LiteLoaderInstallerVersion iv = new LiteLoaderInstallerVersion(v.version, StrUtils.formatVersion(arr.getKey())); + iv.universal = "http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + arr.getKey() + "/" + v.file; + iv.tweakClass = v.tweakClass; + iv.libraries = Arrays.copyOf(v.libraries, v.libraries.length); iv.installer = "http://dl.liteloader.com/redist/" + iv.mcVersion + "/liteloader-installer-" + iv.selfVersion.replace("_", "-") + ".jar"; - al.add(iv); + al.add(iv); versions.add(iv); - } + } Collections.sort(al, new InstallerVersionNewerComparator()); - versionMap.put(StrUtils.formatVersion(arr.getKey()), al); - } - + versionMap.put(StrUtils.formatVersion(arr.getKey()), al); + } + Collections.sort(versions, InstallerVersionComparator.INSTANCE); } @Override public List getVersions(String mcVersion) { if (versions == null || versionMap == null) return null; - if(StrUtils.isBlank(mcVersion)) return versions; - List c = versionMap.get(mcVersion); - if(c == null) return versions; + if (StrUtils.isBlank(mcVersion)) return versions; + List c = versionMap.get(mcVersion); + if (c == null) return versions; Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; + return c; } @Override public String getName() { return "LiteLoader - LiteLoader Official Site(By: Mumfrey)"; } - - public static class LiteLoaderInstallerVersion extends InstallerVersion { - public MinecraftLibrary[] libraries; - public String tweakClass; - public LiteLoaderInstallerVersion(String selfVersion, String mcVersion) { - super(selfVersion, mcVersion); - } + public static class LiteLoaderInstallerVersion extends InstallerVersion { + + public MinecraftLibrary[] libraries; + public String tweakClass; + + public LiteLoaderInstallerVersion(String selfVersion, String mcVersion) { + super(selfVersion, mcVersion); + } } - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsMeta.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsMeta.java index c6eabe568..4350fbffa 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsMeta.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsMeta.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.launcher.utils.installers.liteloader; * @author huangyuhui */ public class LiteLoaderVersionsMeta { + public String description, authors, url; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsRoot.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsRoot.java index 159713cc2..488cb64c5 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsRoot.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/liteloader/LiteLoaderVersionsRoot.java @@ -23,6 +23,7 @@ import java.util.Map; * @author huangyuhui */ public class LiteLoaderVersionsRoot { + public Map versions; public LiteLoaderVersionsMeta meta; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/bmcl/OptiFineBMCLVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/bmcl/OptiFineBMCLVersionList.java index 34eac4efa..4d9f6a3fe 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/bmcl/OptiFineBMCLVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/bmcl/OptiFineBMCLVersionList.java @@ -59,7 +59,7 @@ public class OptiFineBMCLVersionList extends InstallerVersionList { if (s == null) return; root = C.gson.fromJson(s, new TypeToken>() { }.getType()); - for(OptiFineVersion v : root) { + for (OptiFineVersion v : root) { v.mirror = v.mirror.replace("http://optifine.net/http://optifine.net/", "http://optifine.net/"); if (StrUtils.isBlank(v.mcver)) { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineDownloadFormatter.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineDownloadFormatter.java index 30686722b..16a40c7e1 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineDownloadFormatter.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineDownloadFormatter.java @@ -28,8 +28,9 @@ import org.jackhuang.hellominecraft.utils.NetUtils; * @author huangyuhui */ public class OptiFineDownloadFormatter extends Task implements PreviousResult { + String url, result; - + public OptiFineDownloadFormatter(String url) { this.url = url; } @@ -40,7 +41,7 @@ public class OptiFineDownloadFormatter extends Task implements PreviousResult root = new ArrayList(); public Map> versionMap; @@ -59,51 +60,46 @@ public class OptiFineVersionList extends InstallerVersionList { @Override public void refreshList(String[] sss) throws Exception { String content = NetUtils.doGet("http://optifine.net/downloads"); - if(versions != null) return; - versionMap = new HashMap<>(); - versions = new ArrayList<>(); - + if (versions != null) return; + versionMap = new HashMap<>(); + versions = new ArrayList<>(); + content = content.replace(" ", " ").replace(">", ">").replace("<", "<"); - + try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); Document doc = db.parse(new StringBufferInputStream(content)); Element r = doc.getDocumentElement(); NodeList tables = r.getElementsByTagName("table"); - for(int i = 0; i < tables.getLength(); i++) { - Element e = (Element)tables.item(i); - if("downloadTable".equals(e.getAttribute("class"))) { + for (int i = 0; i < tables.getLength(); i++) { + Element e = (Element) tables.item(i); + if ("downloadTable".equals(e.getAttribute("class"))) { NodeList tr = e.getElementsByTagName("tr"); - for(int k = 0; k < tr.getLength(); k++) { - NodeList downloadLine = ((Element)tr.item(k)).getElementsByTagName("td"); + for (int k = 0; k < tr.getLength(); k++) { + NodeList downloadLine = ((Element) tr.item(k)).getElementsByTagName("td"); OptiFineVersion v = new OptiFineVersion(); - for(int j = 0; j < downloadLine.getLength(); j++) { - Element td = (Element)downloadLine.item(j); - if(StrUtils.startsWith(td.getAttribute("class"), "downloadLineMirror")) { - v.mirror = ((Element)td.getElementsByTagName("a").item(0)).getAttribute("href"); - } - if(StrUtils.startsWith(td.getAttribute("class"), "downloadLineDownload")) { - v.dl = ((Element)td.getElementsByTagName("a").item(0)).getAttribute("href"); - } - if(StrUtils.startsWith(td.getAttribute("class"), "downloadLineDate")) { + for (int j = 0; j < downloadLine.getLength(); j++) { + Element td = (Element) downloadLine.item(j); + if (StrUtils.startsWith(td.getAttribute("class"), "downloadLineMirror")) + v.mirror = ((Element) td.getElementsByTagName("a").item(0)).getAttribute("href"); + if (StrUtils.startsWith(td.getAttribute("class"), "downloadLineDownload")) + v.dl = ((Element) td.getElementsByTagName("a").item(0)).getAttribute("href"); + if (StrUtils.startsWith(td.getAttribute("class"), "downloadLineDate")) v.date = td.getTextContent(); - } - if(StrUtils.startsWith(td.getAttribute("class"), "downloadLineFile")) { + if (StrUtils.startsWith(td.getAttribute("class"), "downloadLineFile")) v.ver = td.getTextContent(); - } } - if(StrUtils.isBlank(v.mcver)) { + if (StrUtils.isBlank(v.mcver)) { Pattern p = Pattern.compile("OptiFine (.*?) "); Matcher m = p.matcher(v.ver); - while(m.find()) v.mcver = StrUtils.formatVersion(m.group(1)); + while (m.find()) v.mcver = StrUtils.formatVersion(m.group(1)); } InstallerVersion iv = new InstallerVersion(v.ver, StrUtils.formatVersion(v.mcver)); iv.installer = iv.universal = v.mirror; root.add(v); versions.add(iv); - List ivl = ArrayUtils.tryGetMapWithList(versionMap, StrUtils.formatVersion(v.mcver)); ivl.add(iv); } @@ -112,10 +108,10 @@ public class OptiFineVersionList extends InstallerVersionList { } catch (ParserConfigurationException | SAXException | IOException | DOMException ex) { throw new RuntimeException(ex); } - + Collections.sort(versions, InstallerVersionComparator.INSTANCE); } - + @Override public String getName() { return "OptiFine - OptiFine Official Site"; @@ -124,11 +120,11 @@ public class OptiFineVersionList extends InstallerVersionList { @Override public List getVersions(String mcVersion) { if (versions == null || versionMap == null) return null; - if(StrUtils.isBlank(mcVersion)) return versions; - List c = versionMap.get(mcVersion); - if(c == null) return versions; + if (StrUtils.isBlank(mcVersion)) return versions; + List c = versionMap.get(mcVersion); + if (c == null) return versions; Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; + return c; } - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Extract.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Extract.java index 27ea3b305..fac71dedf 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Extract.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Extract.java @@ -23,6 +23,7 @@ import java.util.Arrays; * @author huangyuhui */ public class Extract extends Object implements Cloneable { + String[] exclude; @Override @@ -31,6 +32,5 @@ public class Extract extends Object implements Cloneable { e.exclude = exclude == null ? null : Arrays.copyOf(exclude, exclude.length); return e; } - - + } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/GameDirType.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/GameDirType.java index 02e61b9be..d2a554070 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/GameDirType.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/GameDirType.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.version; * @author huangyuhui */ public enum GameDirType { + ROOT_FOLDER, VERSION_FOLDER; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/IMinecraftLibrary.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/IMinecraftLibrary.java index 70eb589e6..f56ad4578 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/IMinecraftLibrary.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/IMinecraftLibrary.java @@ -24,33 +24,39 @@ import org.jackhuang.hellominecraft.launcher.utils.download.DownloadType; * @author huangyuhui */ public abstract class IMinecraftLibrary implements Cloneable { - + public String name; + public IMinecraftLibrary(String name) { - this.name = name; + this.name = name; } - + public abstract boolean isRequiredToUnzip(); + public abstract String[] getDecompressExtractRules(); + public abstract void init(); + public abstract boolean allow(); + public abstract File getFilePath(File gameDir); + public abstract String getDownloadURL(String urlBase, DownloadType downloadType); - + @Override public boolean equals(Object obj) { - if(obj instanceof MinecraftLibrary) - return ((MinecraftLibrary) obj).name.equals(name); - return false; + if (obj instanceof MinecraftLibrary) + return ((MinecraftLibrary) obj).name.equals(name); + return false; } @Override public int hashCode() { - int hash = 3; - hash = 89 * hash + (this.name != null ? this.name.hashCode() : 0); - return hash; + int hash = 3; + hash = 89 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; } - + @Override public abstract Object clone(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftClassicVersion.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftClassicVersion.java index 8f3b41b1e..2ee5279a7 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftClassicVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftClassicVersion.java @@ -29,46 +29,46 @@ import org.jackhuang.hellominecraft.launcher.utils.download.DownloadType; public class MinecraftClassicVersion extends MinecraftVersion { public MinecraftClassicVersion() { - super(); + super(); - mainClass = "net.minecraft.client.Minecraft"; - id = "Classic"; - type = "release"; - processArguments = assets = releaseTime = time = null; - minecraftArguments = "${auth_player_name} ${auth_session} --workDir ${game_directory}"; - libraries = new ArrayList<>(); - libraries.add(new MinecraftOldLibrary("lwjgl")); - libraries.add(new MinecraftOldLibrary("jinput")); - libraries.add(new MinecraftOldLibrary("lwjgl_util")); + mainClass = "net.minecraft.client.Minecraft"; + id = "Classic"; + type = "release"; + processArguments = assets = releaseTime = time = null; + minecraftArguments = "${auth_player_name} ${auth_session} --workDir ${game_directory}"; + libraries = new ArrayList<>(); + libraries.add(new MinecraftOldLibrary("lwjgl")); + libraries.add(new MinecraftOldLibrary("jinput")); + libraries.add(new MinecraftOldLibrary("lwjgl_util")); } @Override public Object clone() { - return super.clone(); + return super.clone(); } @Override public MinecraftVersion resolve(IMinecraftProvider manager, Set resolvedSoFar, DownloadType sourceType) { - return this; + return this; } @Override public File getJar(File gameDir) { - return new File(gameDir, "bin/minecraft.jar"); + return new File(gameDir, "bin/minecraft.jar"); } @Override public File getJar(File gameDir, String suffix) { - return new File(gameDir, "bin/minecraft" + suffix + ".jar"); + return new File(gameDir, "bin/minecraft" + suffix + ".jar"); } @Override public File getNatives(File gameDir) { - return new File(gameDir, "bin/natives"); + return new File(gameDir, "bin/natives"); } - + @Override public boolean isAllowedToUnpackNatives() { - return false; + return false; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftLibrary.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftLibrary.java index 569dabb1b..a31a9212c 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftLibrary.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftLibrary.java @@ -31,28 +31,28 @@ import org.jackhuang.hellominecraft.utils.StrUtils; public class MinecraftLibrary extends IMinecraftLibrary { public ArrayList rules; - public String url, formatted=null; + public String url, formatted = null; //public boolean serverreq=true, clientreq=true; public String[] checksums; public Natives natives; public Extract extract; public MinecraftLibrary(String name) { - super(name); + super(name); } public MinecraftLibrary(ArrayList rules, String url, String[] checksums, Natives natives, String name, Extract extract) { - super(name); - this.rules = rules == null ? null : (ArrayList) rules.clone(); - this.url = url; - this.checksums = checksums == null ? null : Arrays.copyOf(checksums, checksums.length); - this.natives = natives == null ? null : (Natives)natives.clone(); - this.extract = extract == null ? null :(Extract)extract.clone(); + super(name); + this.rules = rules == null ? null : (ArrayList) rules.clone(); + this.url = url; + this.checksums = checksums == null ? null : Arrays.copyOf(checksums, checksums.length); + this.natives = natives == null ? null : (Natives) natives.clone(); + this.extract = extract == null ? null : (Extract) extract.clone(); } - + @Override public Object clone() { - return new MinecraftLibrary(rules, url, checksums, natives, name, extract); + return new MinecraftLibrary(rules, url, checksums, natives, name, extract); } /** @@ -62,73 +62,68 @@ public class MinecraftLibrary extends IMinecraftLibrary { */ @Override public boolean allow() { - boolean flag = false; - if (rules == null || rules.isEmpty()) { - flag = true; - } else { - for (Rules r : rules) { - if (r.action.equals("disallow")) { - if (r.os != null && (StrUtils.isBlank(r.os.name) || r.os.name.equalsIgnoreCase(OS.os().toString()))) { - flag = false; - break; - } - } else { - if (r.os == null || (r.os != null && (StrUtils.isBlank(r.os.name) || r.os.name.equalsIgnoreCase(OS.os().toString())))) { - flag = true; - } - } - } - } - return flag; + boolean flag = false; + if (rules == null || rules.isEmpty()) + flag = true; + else + for (Rules r : rules) + if (r.action.equals("disallow")) { + if (r.os != null && (StrUtils.isBlank(r.os.name) || r.os.name.equalsIgnoreCase(OS.os().toString()))) { + flag = false; + break; + } + } else + if (r.os == null || (r.os != null && (StrUtils.isBlank(r.os.name) || r.os.name.equalsIgnoreCase(OS.os().toString())))) + flag = true; + return flag; } private String formatArch(String nati) { - return nati == null ? "" : nati.replace("${arch}", Platform.getPlatform().getBit()); + return nati == null ? "" : nati.replace("${arch}", Platform.getPlatform().getBit()); } private String getNative() { - OS os = OS.os(); - if (os == OS.WINDOWS) { - return formatArch(natives.windows); - } else if (os == OS.OSX) { - return formatArch(natives.osx); - } else { - return formatArch(natives.linux); - } + OS os = OS.os(); + if (os == OS.WINDOWS) + return formatArch(natives.windows); + else if (os == OS.OSX) + return formatArch(natives.osx); + else + return formatArch(natives.linux); } @Override public boolean isRequiredToUnzip() { - return natives != null && allow(); + return natives != null && allow(); } @Override public void init() { - String str = name; - String[] s = str.split(":"); - str = s[0]; - str = str.replace('.', File.separatorChar); - if (natives == null) { - str += File.separator + s[1] + File.separator + s[2] - + File.separator + s[1] + '-' + s[2] + ".jar"; - } else { - str += File.separator + s[1] + File.separator + s[2] - + File.separator + s[1] + '-' + s[2] + '-'; - str += getNative(); - str += ".jar"; - } - formatted = str; + String str = name; + String[] s = str.split(":"); + str = s[0]; + str = str.replace('.', File.separatorChar); + if (natives == null) + str += File.separator + s[1] + File.separator + s[2] + + File.separator + s[1] + '-' + s[2] + ".jar"; + else { + str += File.separator + s[1] + File.separator + s[2] + + File.separator + s[1] + '-' + s[2] + '-'; + str += getNative(); + str += ".jar"; + } + formatted = str; } @Override public File getFilePath(File gameDir) { - return new File(gameDir, "libraries" + File.separatorChar + formatted); + return new File(gameDir, "libraries" + File.separatorChar + formatted); } @Override public String getDownloadURL(String urlBase, DownloadType downloadType) { - if(StrUtils.isNotBlank(url)&&downloadType.getProvider().isAllowedToUseSelfURL()) urlBase = this.url; - return urlBase + formatted.replace('\\', '/'); + if (StrUtils.isNotBlank(url) && downloadType.getProvider().isAllowedToUseSelfURL()) urlBase = this.url; + return urlBase + formatted.replace('\\', '/'); } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftOldLibrary.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftOldLibrary.java index efbc0e0d9..5da811836 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftOldLibrary.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftOldLibrary.java @@ -26,12 +26,12 @@ import org.jackhuang.hellominecraft.launcher.utils.download.DownloadType; public class MinecraftOldLibrary extends MinecraftLibrary { public MinecraftOldLibrary(String name) { - super(name); + super(name); } @Override public boolean isRequiredToUnzip() { - return false; + return false; } @Override @@ -40,22 +40,22 @@ public class MinecraftOldLibrary extends MinecraftLibrary { @Override public boolean allow() { - return true; + return true; } @Override public File getFilePath(File gameDir) { - return new File(gameDir, "bin/" + name + ".jar"); + return new File(gameDir, "bin/" + name + ".jar"); } @Override public Object clone() { - return new MinecraftOldLibrary(name); + return new MinecraftOldLibrary(name); } @Override public String getDownloadURL(String urlBase, DownloadType downloadType) { - return null; + return null; } - + } 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 6dfde2a98..463aed73b 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersion.java @@ -33,7 +33,7 @@ import org.jackhuang.hellominecraft.utils.ArrayUtils; public class MinecraftVersion implements Cloneable, Comparable { public String minecraftArguments, mainClass, time, id, type, processArguments, - releaseTime, assets, jar, inheritsFrom; + releaseTime, assets, jar, inheritsFrom; public int minimumLauncherVersion; public boolean hidden; @@ -43,82 +43,79 @@ public class MinecraftVersion implements Cloneable, Comparable } public MinecraftVersion(String minecraftArguments, String mainClass, String time, String id, String type, String processArguments, String releaseTime, String assets, String jar, String inheritsFrom, int minimumLauncherVersion, List libraries, boolean hidden) { - this(); - this.minecraftArguments = minecraftArguments; - this.mainClass = mainClass; - this.time = time; - this.id = id; - this.type = type; - this.processArguments = processArguments; - this.releaseTime = releaseTime; - this.assets = assets; - this.jar = jar; - this.inheritsFrom = inheritsFrom; - this.minimumLauncherVersion = minimumLauncherVersion; + this(); + this.minecraftArguments = minecraftArguments; + this.mainClass = mainClass; + this.time = time; + this.id = id; + this.type = type; + this.processArguments = processArguments; + this.releaseTime = releaseTime; + this.assets = assets; + this.jar = jar; + this.inheritsFrom = inheritsFrom; + this.minimumLauncherVersion = minimumLauncherVersion; this.hidden = hidden; - if(libraries == null) this.libraries = new ArrayList<>(); - else { - this.libraries = new ArrayList<>(libraries.size()); - for (IMinecraftLibrary library : libraries) { - this.libraries.add((MinecraftLibrary) library.clone()); - } - } + if (libraries == null) this.libraries = new ArrayList<>(); + else { + this.libraries = new ArrayList<>(libraries.size()); + for (IMinecraftLibrary library : libraries) + this.libraries.add((MinecraftLibrary) library.clone()); + } } @Override public Object clone() { - return new MinecraftVersion(minecraftArguments, mainClass, time, id, type, processArguments, releaseTime, assets, jar, inheritsFrom, minimumLauncherVersion, libraries, hidden); + return new MinecraftVersion(minecraftArguments, mainClass, time, id, type, processArguments, releaseTime, assets, jar, inheritsFrom, minimumLauncherVersion, libraries, hidden); } public MinecraftVersion resolve(IMinecraftProvider manager, DownloadType sourceType) { - return resolve(manager, new HashSet<>(), sourceType); + return resolve(manager, new HashSet<>(), sourceType); } protected MinecraftVersion resolve(IMinecraftProvider manager, Set resolvedSoFar, DownloadType sourceType) { - if (inheritsFrom == null) { - return this; - } - if (!resolvedSoFar.add(id)) { - throw new IllegalStateException("Circular dependency detected."); - } + if (inheritsFrom == null) + return this; + if (!resolvedSoFar.add(id)) + throw new IllegalStateException("Circular dependency detected."); - MinecraftVersion parent = manager.getVersionById(inheritsFrom); - if(parent == null) { - if(!manager.install(inheritsFrom, sourceType)) return this; - parent = manager.getVersionById(inheritsFrom); - } - parent = parent.resolve(manager, resolvedSoFar, sourceType); - MinecraftVersion result = new MinecraftVersion( - this.minecraftArguments != null ? this.minecraftArguments : parent.minecraftArguments, - this.mainClass != null ? this.mainClass : parent.mainClass, - this.time, this.id, this.type, parent.processArguments, this.releaseTime, - this.assets != null ? this.assets : parent.assets, - this.jar != null ? this.jar : parent.jar, - null, parent.minimumLauncherVersion, - this.libraries != null ? ArrayUtils.merge(this.libraries, parent.libraries) : parent.libraries, this.hidden); - - return result; + MinecraftVersion parent = manager.getVersionById(inheritsFrom); + if (parent == null) { + if (!manager.install(inheritsFrom, sourceType)) return this; + parent = manager.getVersionById(inheritsFrom); + } + parent = parent.resolve(manager, resolvedSoFar, sourceType); + MinecraftVersion result = new MinecraftVersion( + this.minecraftArguments != null ? this.minecraftArguments : parent.minecraftArguments, + this.mainClass != null ? this.mainClass : parent.mainClass, + this.time, this.id, this.type, parent.processArguments, this.releaseTime, + this.assets != null ? this.assets : parent.assets, + this.jar != null ? this.jar : parent.jar, + null, parent.minimumLauncherVersion, + this.libraries != null ? ArrayUtils.merge(this.libraries, parent.libraries) : parent.libraries, this.hidden); + + return result; } public File getJar(File gameDir) { - String jarId = this.jar == null ? this.id : this.jar; - return new File(gameDir, "versions/" + jarId + "/" + jarId + ".jar"); + String jarId = this.jar == null ? this.id : this.jar; + return new File(gameDir, "versions/" + jarId + "/" + jarId + ".jar"); } public File getJar(File gameDir, String suffix) { - String jarId = this.jar == null ? this.id : this.jar; - return new File(gameDir, "versions/" + jarId + "/" + jarId + suffix + ".jar"); + String jarId = this.jar == null ? this.id : this.jar; + return new File(gameDir, "versions/" + jarId + "/" + jarId + suffix + ".jar"); } public File getNatives(File gameDir) { - return new File(gameDir, "versions/" + id + "/" + id - + "-natives"); + return new File(gameDir, "versions/" + id + "/" + id + + "-natives"); } - + public boolean isAllowedToUnpackNatives() { - return true; + return true; } - + public String getAssets() { return assets == null ? AssetsIndex.DEFAULT_ASSET_NAME : assets; } 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 df9056264..d9ee67a2c 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java @@ -118,12 +118,10 @@ public final class MinecraftVersionManager extends IMinecraftProvider { if (StrUtils.formatVersion(id) == null) { if (MessageBox.Show(C.i18n("launcher.versions_json_not_matched_cannot_auto_completion", id), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) FileUtils.deleteDirectoryQuietly(dir); - } else if (MessageBox.Show(C.i18n("launcher.versions_json_not_matched_needs_auto_completion", id), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) { - if (!refreshJson(id)) { + } else if (MessageBox.Show(C.i18n("launcher.versions_json_not_matched_needs_auto_completion", id), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) + if (!refreshJson(id)) if (MessageBox.Show(C.i18n("launcher.versions_json_not_matched_cannot_auto_completion", id), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) FileUtils.deleteDirectoryQuietly(dir); - } - } continue; } MinecraftVersion mcVersion; @@ -215,10 +213,10 @@ public final class MinecraftVersionManager extends IMinecraftProvider { @Override public File getRunDirectory(String id) { switch (profile.getGameDirType()) { - case VERSION_FOLDER: - return new File(baseFolder, "versions/" + id + "/"); - default: - return baseFolder; + case VERSION_FOLDER: + return new File(baseFolder, "versions/" + id + "/"); + default: + return baseFolder; } } @@ -226,7 +224,7 @@ public final class MinecraftVersionManager extends IMinecraftProvider { public List getDownloadLibraries(DownloadType downloadType) { ArrayList downloadLibraries = new ArrayList<>(); MinecraftVersion v = profile.getSelectedMinecraftVersion().resolve(this, Settings.getInstance().getDownloadSource()); - if(v.libraries != null) { + if (v.libraries != null) for (IMinecraftLibrary l : v.libraries) { l.init(); if (l.allow()) { @@ -239,7 +237,6 @@ public final class MinecraftVersionManager extends IMinecraftProvider { } } } - } return downloadLibraries; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Natives.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Natives.java index 928d3a5e4..f882dd4e7 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Natives.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Natives.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.version; * @author huangyuhui */ public class Natives implements Cloneable { + public String windows, osx, linux; @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/OS.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/OS.java index 0c01859d1..933684e60 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/OS.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/OS.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.launcher.version; * @author huangyuhui */ public class OS { + public String version, name; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Rules.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Rules.java index d2c28aeae..6309dbba4 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Rules.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/Rules.java @@ -21,6 +21,7 @@ package org.jackhuang.hellominecraft.launcher.version; * @author huangyuhui */ public class Rules { + public String action; public OS os; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/DraggableFrame.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/DraggableFrame.java index 561d1fa52..7552c9c96 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/DraggableFrame.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/DraggableFrame.java @@ -63,9 +63,8 @@ public class DraggableFrame extends JFrame @Override public void mouseDragged(MouseEvent e) { - if ((e.getModifiersEx() & 0x400) != 0) { + if ((e.getModifiersEx() & 0x400) != 0) setLocation(e.getXOnScreen() - this.dragGripX, e.getYOnScreen() - this.dragGripY); - } } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java index e80c3e997..ed536c9cb 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/GameSettingsPanel.java @@ -914,7 +914,7 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { private void btnRemoveProfileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveProfileActionPerformed if (profile == null) return; if (MessageBox.Show(C.i18n("ui.message.sure_remove", profile.getName()), MessageBox.YES_NO_OPTION) == MessageBox.NO_OPTION) return; - if(Settings.delVersion(profile)) { + if (Settings.delVersion(profile)) { cboProfiles.removeItem(profile.getName()); profile = Settings.getOneProfile(); if (profile != null) { @@ -925,12 +925,12 @@ btnRefreshLiteLoader.addActionListener(new java.awt.event.ActionListener() { }//GEN-LAST:event_btnRemoveProfileActionPerformed private void cboVersionsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboVersionsItemStateChanged - + if (isLoading || evt.getStateChange() != ItemEvent.SELECTED || cboVersions.getSelectedIndex() < 0 || StrUtils.isBlank((String) cboVersions.getSelectedItem()) || getProfile() == null) return; loadMinecraftVersion((String) cboVersions.getSelectedItem()); versionChanged(getProfile(), (String) cboVersions.getSelectedItem()); - + getProfile().setSelectedMinecraftVersion(cboVersions.getSelectedItem().toString()); cboVersions.setToolTipText(cboVersions.getSelectedItem().toString()); Settings.save(); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/HeaderTab.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/HeaderTab.java index adfccb852..610aae381 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/HeaderTab.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/HeaderTab.java @@ -48,7 +48,7 @@ public class HeaderTab extends JLabel return this.isActive; } - public void setIsActive(boolean isActive) { + public final void setIsActive(boolean isActive) { this.isActive = isActive; setOpaque(isActive); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/LauncherSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/LauncherSettingsPanel.java index 8f9bb75ea..ce7c14187 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/LauncherSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/LauncherSettingsPanel.java @@ -37,7 +37,7 @@ public class LauncherSettingsPanel extends javax.swing.JPanel { */ public LauncherSettingsPanel() { initComponents(); - + txtBackgroundPath.setText(Settings.getInstance().getBgpath()); txtProxyHost.setText(Settings.getInstance().getProxyHost()); txtProxyPort.setText(Settings.getInstance().getProxyPort()); @@ -46,7 +46,7 @@ public class LauncherSettingsPanel extends javax.swing.JPanel { cboDownloadSource.setSelectedIndex(Settings.getInstance().getDownloadType()); cboTheme.setSelectedIndex(Settings.getInstance().getTheme()); chkEnableShadow.setSelected(Settings.getInstance().isEnableShadow()); - + setBackground(Color.white); setOpaque(true); } @@ -259,9 +259,8 @@ public class LauncherSettingsPanel extends javax.swing.JPanel { fc.setDialogTitle(C.i18n("launcher.choose_bgpath")); fc.setMultiSelectionEnabled(false); fc.showOpenDialog(this); - if (fc.getSelectedFile() == null) { + if (fc.getSelectedFile() == null) return; - } try { String path = fc.getSelectedFile().getCanonicalPath(); path = IOUtils.removeLastSeparator(path); @@ -289,7 +288,7 @@ public class LauncherSettingsPanel extends javax.swing.JPanel { private void cboThemeItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboThemeItemStateChanged Settings.getInstance().setTheme(cboTheme.getSelectedIndex()); - if(MainFrame.instance != null) + if (MainFrame.instance != null) MainFrame.instance.reloadColor(); }//GEN-LAST:event_cboThemeItemStateChanged diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainFrame.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainFrame.java index c83d51786..395015865 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainFrame.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainFrame.java @@ -86,8 +86,7 @@ public final class MainFrame extends DraggableFrame { if (enableShadow) try { - //AWTUtilities.setWindowOpaque(this, false); - setBackground(new Color(0,0,0,0)); + setBackground(new Color(0, 0, 0, 0)); getRootPane().setBorder(border = new DropShadowBorder(borderColor, 4)); } catch (Throwable ex) { HMCLog.err("Failed to set window transparent.", ex); @@ -250,14 +249,14 @@ public final class MainFrame extends DraggableFrame { this.mainTab.setIsActive(true); this.mainPanel.onSelected(); } else if (tabName.equalsIgnoreCase("game")) { - if(gamePanel == null) { + if (gamePanel == null) { gamePanel = new GameSettingsPanel(); gamePanelWrapper.add(gamePanel); } this.gameTab.setIsActive(true); this.gamePanel.onSelected(); } else if (tabName.equalsIgnoreCase("launcher")) { - if(launcherPanel == null) { + if (launcherPanel == null) { launcherPanel = new LauncherSettingsPanel(); launcherPanelWrapper.add(launcherPanel); } 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 7b6d81657..459f02675 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/views/MainPagePanel.java @@ -457,7 +457,7 @@ public class MainPagePanel extends javax.swing.JPanel { SwingUtilities.invokeLater(() -> { MessageBox.Show(C.i18n("mainwindow.no_version")); showedNoVersion = true; - }); + }); } else { for (MinecraftVersion mcVersion : getCurrentProfile().getMinecraftProvider().getVersions()) { if (mcVersion.hidden) continue; diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/C.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/C.java index 2c59be043..7068c14a8 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/C.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/C.java @@ -25,34 +25,35 @@ import java.util.ResourceBundle; * @author huangyuhui */ public final class C { + public static final Gson gsonPrettyPrinting = new GsonBuilder().setPrettyPrinting().create(); public static final Gson gson = new Gson(); - + public static final ResourceBundle I18N = ResourceBundle.getBundle("org/jackhuang/hellominecraft/launcher/I18N"); - + //http://repo1.maven.org/maven2 - public static final String URL_PUBLISH = "http://www.mcbbs.net/thread-142335-1-1.html"; public static final String URL_TIEBA = "http://tieba.baidu.com/f?kw=hellominecraftlauncher"; public static final String URL_GITHUB = "https://github.com/huanghongxun/HMCL/issues"; public static final String URL_MINECRAFTFORUM = "http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1265720-hello-minecraft-launcher-1-9-3-mc-1-7-4-auto"; - + public static final String FILE_MINECRAFT_VERSIONS = "versions"; - + public static final String LINE_SEPARATOR = System.getProperty("line.separator"); - + public static final String URL_FORGE_LIST = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/json"; public static final String URL_LITELOADER_LIST = "http://dl.liteloader.com/versions/versions.json"; - - private C(){} - + + private C() { + } + public static String i18n(String a, Object... format) { try { return String.format(C.I18N.getString(a), format); - } catch(Exception e) { + } catch (Exception e) { HMCLog.warn("Failed to read localization lang: " + a, e); return a; } } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/HMCLog.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/HMCLog.java index 699a0346f..09488cb12 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/HMCLog.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/HMCLog.java @@ -18,33 +18,32 @@ package org.jackhuang.hellominecraft; import org.jackhuang.hellominecraft.logging.logger.Logger; - /** * * @author huangyuhui */ public class HMCLog { - + public static Logger logger = new Logger("HMC"); - + public static void log(String message) { logger.info(message); } - + public static void warn(String message) { logger.warn(message); } - + public static void warn(String msg, Throwable t) { logger.warn(msg, t); } - + public static void err(String msg) { logger.error(msg); } - + public static void err(String msg, Throwable t) { logger.error(msg, t); } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/DoingDoneListener.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/DoingDoneListener.java index 2840014dd..1c0f9edcf 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/DoingDoneListener.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/DoingDoneListener.java @@ -21,19 +21,25 @@ package org.jackhuang.hellominecraft.tasks; * @author huangyuhui */ public interface DoingDoneListener { + /** * Task done. - * @param k + * + * @param k */ void onDone(K k); + /** * Before task executing. - * @param k + * + * @param k */ void onDoing(K k); + /** * Task failed. - * @param k + * + * @param k */ void onFailed(K k); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ParallelTask.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ParallelTask.java index 0dff7483c..47720b7a9 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ParallelTask.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ParallelTask.java @@ -24,6 +24,7 @@ import java.util.HashSet; * @author huangyuhui */ public class ParallelTask extends Task { + Collection dependsTask = new HashSet<>(); @Override @@ -40,9 +41,9 @@ public class ParallelTask extends Task { public Collection getDependTasks() { return dependsTask; } - + public void addDependsTask(Task t) { dependsTask.add(t); } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProvider.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProvider.java index 1ab24c587..df03af137 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProvider.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProvider.java @@ -21,8 +21,9 @@ package org.jackhuang.hellominecraft.tasks; * @author huangyuhui */ public abstract class ProgressProvider { + protected ProgressProviderListener ppl; - + public ProgressProvider setProgressProviderListener(ProgressProviderListener p) { ppl = p; return this; diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProviderListener.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProviderListener.java index b6f5f2cf4..e5a94d0a1 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProviderListener.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/ProgressProviderListener.java @@ -21,7 +21,10 @@ package org.jackhuang.hellominecraft.tasks; * @author huangyuhui */ public interface ProgressProviderListener { + void setProgress(int prog, int max); + void setStatus(String sta); + void onProgressProviderDone(); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/Task.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/Task.java index 4159b78bd..018c2042d 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/Task.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/Task.java @@ -23,28 +23,36 @@ import java.util.Collection; * @author huangyuhui */ public abstract class Task extends ProgressProvider { - + /** * Run in a new thread(packed in TaskList). + * * @return is task finished sucessfully. */ public abstract boolean executeTask(); - + /** - * if this func returns false, TaskList will force abort the thread. - * run in main thread. + * if this func returns false, TaskList will force abort the thread. run in + * main thread. + * * @return is aborted. */ - public boolean abort() { return false; } - - public Throwable getFailReason() { return failReason; } + public boolean abort() { + return false; + } + + public Throwable getFailReason() { + return failReason; + } protected Throwable failReason = null; + protected void setFailReason(Throwable s) { failReason = s; } - + protected String tag; protected boolean parallelExecuting; + public Task setTag(String tag) { this.tag = tag; return this; @@ -57,9 +65,14 @@ public abstract class Task extends ProgressProvider { public void setParallelExecuting(boolean parallelExecuting) { this.parallelExecuting = parallelExecuting; } - + public abstract String getInfo(); - - public Collection getDependTasks() { return null; } - public Collection getAfterTasks() { return null; } + + public Collection getDependTasks() { + return null; + } + + public Collection getAfterTasks() { + return null; + } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskInfo.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskInfo.java index 686e8ef70..3fc98d8e6 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskInfo.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskInfo.java @@ -23,14 +23,14 @@ package org.jackhuang.hellominecraft.tasks; public abstract class TaskInfo extends Task { String info; - + public TaskInfo(String info) { this.info = info; } - + @Override public String getInfo() { return info; } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskList.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskList.java index 288a3bf23..022f4b5db 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskList.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskList.java @@ -87,9 +87,8 @@ public class TaskList extends Thread { static final Set taskPool = Collections.synchronizedSet(new HashSet()); private void processTasks(Collection c) { - if (c == null) { + if (c == null) return; - } this.totTask += c.size(); Set runningThread = Collections.synchronizedSet(new HashSet()); for (Task t2 : c) { @@ -99,46 +98,41 @@ public class TaskList extends Thread { runningThread.add(thread); thread.start(); } - while (!runningThread.isEmpty()) { + while (!runningThread.isEmpty()) try { - if(this.isInterrupted()) return; + if (this.isInterrupted()) return; Thread.sleep(1); } catch (InterruptedException ex) { HMCLog.warn("Failed to sleep task thread", ex); } - } - + } private void executeTask(Task t) { - if (!shouldContinue || t == null) { + if (!shouldContinue || t == null) return; - } processTasks(t.getDependTasks()); HMCLog.log("Executing task: " + t.getInfo()); - for (DoingDoneListener d : taskListener) { + for (DoingDoneListener d : taskListener) d.onDoing(t); - } if (t.executeTask()) { HMCLog.log("Task finished: " + t.getInfo()); - for (DoingDoneListener d : taskListener) { + for (DoingDoneListener d : taskListener) d.onDone(t); - } processTasks(t.getAfterTasks()); } else { HMCLog.err("Task failed: " + t.getInfo(), t.getFailReason()); - for (DoingDoneListener d : taskListener) { + for (DoingDoneListener d : taskListener) d.onFailed(t); - } } } @Override public void run() { Thread.currentThread().setName("TaskList"); - + threadPool.clear(); for (Task taskQueue1 : taskQueue) executeTask(taskQueue1); @@ -153,10 +147,10 @@ public class TaskList extends Thread { public void abort() { shouldContinue = false; - while(!threadPool.isEmpty()) - synchronized(threadPool) { + while (!threadPool.isEmpty()) + synchronized (threadPool) { InvokeThread it = threadPool.iterator().next(); - if(!it.task.abort()) it.interrupt(); + if (!it.task.abort()) it.interrupt(); threadPool.remove(it); } this.interrupt(); diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskRunnable.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskRunnable.java index da7197b95..e76918edd 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskRunnable.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskRunnable.java @@ -21,7 +21,9 @@ package org.jackhuang.hellominecraft.tasks; * @author huangyuhui */ public class TaskRunnable extends TaskInfo { + private final Runnable r; + public TaskRunnable(String info, Runnable r) { super(info); this.r = r; @@ -32,10 +34,10 @@ public class TaskRunnable extends TaskInfo { try { r.run(); return true; - } catch(Throwable t) { + } catch (Throwable t) { setFailReason(t); return false; } } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskWindow.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskWindow.java index d5cadc20c..df9173ac9 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskWindow.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/TaskWindow.java @@ -170,7 +170,7 @@ public class TaskWindow extends javax.swing.JDialog }// //GEN-END:initComponents private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed - if(MessageBox.Show(C.i18n("operation.confirm_stop"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) + if (MessageBox.Show(C.i18n("operation.confirm_stop"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) this.dispose(); }//GEN-LAST:event_btnCancelActionPerformed @@ -230,7 +230,7 @@ public class TaskWindow extends javax.swing.JDialog @Override public void onFailed(Task task) { - failReasons.add(task.getInfo() + ": " + (task.getFailReason() == null ? "No exception" : task.getFailReason().getLocalizedMessage())); + failReasons.add(task.getInfo() + ": " + (null == task.getFailReason() ? "No exception" : task.getFailReason().getLocalizedMessage())); pgsTotal.setMaximum(taskList.taskCount()); pgsTotal.setValue(pgsTotal.getValue() + 1); SwingUtils.replaceLast(lstDownload, task.getFailReason()); diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/communication/DefaultPreviousResult.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/communication/DefaultPreviousResult.java index 8d97c19ad..444a1c1ae 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/communication/DefaultPreviousResult.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/tasks/communication/DefaultPreviousResult.java @@ -21,16 +21,17 @@ package org.jackhuang.hellominecraft.tasks.communication; * @author huangyuhui * @param the type of result. */ -public class DefaultPreviousResult implements PreviousResult{ +public class DefaultPreviousResult implements PreviousResult { + T a; public DefaultPreviousResult(T a) { this.a = a; } - + @Override public T getResult() { return a; } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ArrayUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ArrayUtils.java index 0f00f5b5e..94584a6d4 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ArrayUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ArrayUtils.java @@ -27,89 +27,79 @@ import java.util.Map; public class ArrayUtils { public static boolean isEmpty(T[] array) { - return array == null || array.length <= 0; + return array == null || array.length <= 0; } public static boolean isNotEmpty(T[] array) { - return !isEmpty(array); + return !isEmpty(array); } public static boolean contains(T[] array, T objectToFind) { - return indexOf(array, objectToFind) != -1; + return indexOf(array, objectToFind) != -1; } public static int indexOf(T[] array, T valueToFind) { - return indexOf(array, valueToFind, 0); + return indexOf(array, valueToFind, 0); } public static int indexOf(T[] array, T valueToFind, int startIndex) { - if (array == null) { - return -1; - } - if (startIndex < 0) { - startIndex = 0; - } - for (int i = startIndex; i < array.length; i++) { - if (valueToFind.equals(array[i])) { - return i; - } - } - return -1; + if (array == null) + return -1; + if (startIndex < 0) + startIndex = 0; + for (int i = startIndex; i < array.length; i++) + if (valueToFind.equals(array[i])) + return i; + return -1; } public static int lastIndexOf(T[] array, T valueToFind) { - return lastIndexOf(array, valueToFind, 2147483647); + return lastIndexOf(array, valueToFind, 2147483647); } public static int lastIndexOf(T[] array, T valueToFind, int startIndex) { - if (array == null) { - return -1; - } - if (startIndex < 0) { - return -1; - } - if (startIndex >= array.length) { - startIndex = array.length - 1; - } - for (int i = startIndex; i >= 0; i--) { - if (valueToFind.equals(array[i])) { - return i; - } - } - return -1; + if (array == null) + return -1; + if (startIndex < 0) + return -1; + if (startIndex >= array.length) + startIndex = array.length - 1; + for (int i = startIndex; i >= 0; i--) + if (valueToFind.equals(array[i])) + return i; + return -1; } public static ArrayList merge(List a, List b) { - ArrayList al = new ArrayList(a.size() + b.size()); - al.addAll(a); al.addAll(b); - return al; + ArrayList al = new ArrayList(a.size() + b.size()); + al.addAll(a); + al.addAll(b); + return al; } - + public static K getEnd(K[] k) { - if(k == null) return null; - else return k[k.length-1]; + if (k == null) return null; + else return k[k.length - 1]; } - + public static List tryGetMapWithList(Map map, String key) { - List l = (List)map.get(key); - if(l == null) - map.put(key, l = new ArrayList()); - return l; + List l = (List) map.get(key); + if (l == null) + map.put(key, l = new ArrayList()); + return l; } public static int matchArray(T[] a, T[] b) { for (int i = 0; i < a.length - b.length; i++) { int j = 1; for (int k = 0; k < b.length; k++) { - if (b[k].equals(a[(i + k)])) { + if (b[k].equals(a[(i + k)])) continue; - } j = 0; break; } - if (j != 0) { + if (j != 0) return i; - } } return -1; } @@ -118,15 +108,13 @@ public class ArrayUtils { for (int i = 0; i < a.length - b.length; i++) { int j = 1; for (int k = 0; k < b.length; k++) { - if (b[k] == a[(i + k)]) { + if (b[k] == a[(i + k)]) continue; - } j = 0; break; } - if (j != 0) { + if (j != 0) return i; - } } return -1; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/CollectionUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/CollectionUtils.java index 305e98921..07b386237 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/CollectionUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/CollectionUtils.java @@ -27,16 +27,19 @@ import java.util.Iterator; * @author huangyuhui */ public final class CollectionUtils { + public static void forEach(Collection coll, Consumer p) { - for(T t : coll) p.accept(t); + for (T t : coll) p.accept(t); } - + public static Collection sortOut(Collection coll, Predicate p) { ArrayList newColl = new ArrayList<>(); - forEach(coll, t -> { if(p.apply(t)) newColl.add(t); }); + forEach(coll, t -> { + if (p.apply(t)) newColl.add(t); + }); return newColl; } - + public static boolean removeIf(Collection coll, Predicate p) { boolean removed = false; final Iterator each = coll.iterator(); diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/DoubleOutputStream.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/DoubleOutputStream.java index 1b48a207a..46b7748fd 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/DoubleOutputStream.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/DoubleOutputStream.java @@ -30,73 +30,60 @@ public class DoubleOutputStream extends OutputStream { private boolean c = true; public DoubleOutputStream(OutputStream paramOutputStream1, OutputStream paramOutputStream2) { - this(paramOutputStream1, paramOutputStream2, true); + this(paramOutputStream1, paramOutputStream2, true); } private DoubleOutputStream(OutputStream paramOutputStream1, OutputStream paramOutputStream2, boolean paramBoolean) { - this.a = paramOutputStream1; - this.b = paramOutputStream2; - this.c = true; + this.a = paramOutputStream1; + this.b = paramOutputStream2; + this.c = true; } @Override public final void write(byte[] arr, int off, int len) throws IOException { - if (this.a != null) { - this.a.write(arr, off, len); - } - if (this.b != null) { - this.b.write(arr, off, len); - } - if (this.c) { - flush(); - } + if (this.a != null) + this.a.write(arr, off, len); + if (this.b != null) + this.b.write(arr, off, len); + if (this.c) + flush(); } @Override public final void write(byte[] paramArrayOfByte) throws IOException { - if (this.a != null) { - this.a.write(paramArrayOfByte); - } - if (this.b != null) { - this.b.write(paramArrayOfByte); - } - if (this.c) { - flush(); - } + if (this.a != null) + this.a.write(paramArrayOfByte); + if (this.b != null) + this.b.write(paramArrayOfByte); + if (this.c) + flush(); } @Override public final void write(int paramInt) throws IOException { - if (this.a != null) { - this.a.write(paramInt); - } - if (this.b != null) { - this.b.write(paramInt); - } - if (this.c) { - flush(); - } + if (this.a != null) + this.a.write(paramInt); + if (this.b != null) + this.b.write(paramInt); + if (this.c) + flush(); } @Override public final void close() throws IOException { - flush(); + flush(); - if (this.a != null) { - this.a.close(); - } - if (this.b != null) { - this.b.close(); - } + if (this.a != null) + this.a.close(); + if (this.b != null) + this.b.close(); } @Override public final void flush() throws IOException { - if (this.a != null) { - this.a.flush(); - } - if (this.b != null) { - this.b.flush(); - } + if (this.a != null) + this.a.flush(); + if (this.b != null) + this.b.flush(); } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Event.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Event.java index 2a66be050..50a98accf 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Event.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Event.java @@ -22,5 +22,6 @@ package org.jackhuang.hellominecraft.utils; * @param EventArgs */ public interface Event { + boolean call(Object sender, T t); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/EventHandler.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/EventHandler.java index 07332caa8..dd8f0133b 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/EventHandler.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/EventHandler.java @@ -24,27 +24,28 @@ import java.util.HashSet; * @param EventArgs */ public class EventHandler { + HashSet> handlers; Object sender; - + public EventHandler(Object sender) { handlers = new HashSet<>(); this.sender = sender; } - + public void register(Event t) { handlers.add(t); } - + public void unregister(Event t) { handlers.remove(t); } - + public boolean execute(T x) { boolean flag = true; - for(Event t : handlers) - if(!t.call(sender, x)) flag = false; + for (Event t : handlers) + if (!t.call(sender, x)) flag = false; return flag; } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/LauncherPrintStream.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/LauncherPrintStream.java index d64aa9594..5055ea923 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/LauncherPrintStream.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/LauncherPrintStream.java @@ -30,19 +30,18 @@ public class LauncherPrintStream extends PrintStream { private final ArrayList> printListeners = new ArrayList<>(); public LauncherPrintStream(OutputStream paramOutputStream) { - super(paramOutputStream); + super(paramOutputStream); } @Override public final void println(String paramString) { - super.println(paramString); + super.println(paramString); - for (Consumer a1 : printListeners) { - a1.accept(paramString); - } + for (Consumer a1 : printListeners) + a1.accept(paramString); } public final void addPrintListener(Consumer paraml) { - this.printListeners.add(paraml); + this.printListeners.add(paraml); } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/MathUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/MathUtils.java index 98c02eede..192597eb4 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/MathUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/MathUtils.java @@ -38,16 +38,16 @@ public class MathUtils { return false; } } - + public static int parseMemory(String s, int def) { try { return Integer.parseInt(s); } catch (Exception e) { int a = parseInt(s.substring(0, s.length() - 1), def); - if(s.endsWith("g")) return a * 1024; - else if(s.endsWith("k")) return a / 1024; + if (s.endsWith("g")) return a * 1024; + else if (s.endsWith("k")) return a / 1024; else return a; } } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/NetUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/NetUtils.java index 96bbbb89f..092330cbc 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/NetUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/NetUtils.java @@ -34,40 +34,38 @@ import org.jackhuang.hellominecraft.HMCLog; * @author huang */ public final class NetUtils { - + public static byte[] getBytesFromStream(InputStream is) throws IOException { ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); byte[] arrayOfByte1 = new byte[1024]; int i; - while ((i = is.read(arrayOfByte1)) >= 0) { + while ((i = is.read(arrayOfByte1)) >= 0) localByteArrayOutputStream.write(arrayOfByte1, 0, i); - } is.close(); return localByteArrayOutputStream.toByteArray(); } - + public static String getStreamContent(InputStream is) throws IOException { return getStreamContent(is, DEFAULT_CHARSET); } - + public static String getStreamContent(InputStream is, String encoding) - throws IOException { + throws IOException { String result; try (BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding))) { result = ""; String line; - while ((line = br.readLine()) != null) { + while ((line = br.readLine()) != null) result += line + "\n"; - } } - if(result.length() < 1) return ""; - else return result.substring(0, result.length() - 1); + if (result.length() < 1) return ""; + else return result.substring(0, result.length() - 1); } - + public static String doGet(String url, String encoding) throws IOException { return getStreamContent(new URL(url).openConnection().getInputStream()); } - + public static String doGet(String url) throws IOException { return doGet(url, DEFAULT_CHARSET); } @@ -85,16 +83,15 @@ public final class NetUtils { public static String sendGetRequest(String endpoint, String requestParameters) { String result = null; - if (endpoint.startsWith("http://")) { + if (endpoint.startsWith("http://")) // Send a GET request to the servlet try { // Construct data StringBuilder data = new StringBuilder(); // Send data String urlStr = endpoint; - if (requestParameters != null && requestParameters.length() > 0) { + if (requestParameters != null && requestParameters.length() > 0) urlStr += "?" + requestParameters; - } URL url = new URL(urlStr); URLConnection conn = url.openConnection(); @@ -110,7 +107,6 @@ public final class NetUtils { } catch (Exception e) { HMCLog.warn("Failed to send get request.", e); } - } return result; } @@ -164,7 +160,7 @@ public final class NetUtils { } private static final String METHOD_POST = "POST"; private static final String DEFAULT_CHARSET = "UTF-8"; - + public static URL constantURL(String url) { try { return new URL(url); @@ -173,15 +169,14 @@ public final class NetUtils { return null; } } - + public static URL concatenateURL(URL url, String query) { - try { - if ((url.getQuery() != null) && (url.getQuery().length() > 0)) { - return new URL(url.getProtocol(), url.getHost(), url.getPort(), new StringBuilder().append(url.getFile()).append("&").append(query).toString()); - } - return new URL(url.getProtocol(), url.getHost(), url.getPort(), new StringBuilder().append(url.getFile()).append("?").append(query).toString()); - } catch (MalformedURLException ex) { - throw new IllegalArgumentException("Could not concatenate given URL with GET arguments!", ex); - } + try { + if ((url.getQuery() != null) && (url.getQuery().length() > 0)) + return new URL(url.getProtocol(), url.getHost(), url.getPort(), new StringBuilder().append(url.getFile()).append("&").append(query).toString()); + return new URL(url.getProtocol(), url.getHost(), url.getPort(), new StringBuilder().append(url.getFile()).append("?").append(query).toString()); + } catch (MalformedURLException ex) { + throw new IllegalArgumentException("Could not concatenate given URL with GET arguments!", ex); + } } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Pair.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Pair.java index ea39e6b7f..74699f6f9 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Pair.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Pair.java @@ -25,6 +25,7 @@ import java.util.Map; * @param V Type */ public class Pair implements Map.Entry { + public K key; public V value; @@ -49,5 +50,5 @@ public class Pair implements Map.Entry { this.value = value; return t; } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ReflectUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ReflectUtils.java deleted file mode 100644 index eb452a678..000000000 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/ReflectUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2013 huangyuhui - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. - */ -package org.jackhuang.hellominecraft.utils; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -/** - * - * @author huangyuhui - */ -public class ReflectUtils { - - public static Set> getClasses(Class c) { - HashSet set = new HashSet(); - set.addAll(Arrays.asList(c.getInterfaces())); - while(c != Object.class) { - set.add(c); - c = c.getSuperclass(); - } - return set; - } - -} diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java index eba624fd7..7d35d1482 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/SwingUtils.java @@ -32,6 +32,14 @@ import org.jackhuang.hellominecraft.HMCLog; */ public class SwingUtils { + /** + * Make DefaultTableModel by overriding getColumnClass and isCellEditable of DefaultTableModel. + * + * @param titleA The title of each column. + * @param typesA The type of each column value. + * @param canEditA Is column editable? + * @return + */ public static DefaultTableModel makeDefaultTableModel(String[] titleA, final Class[] typesA, final boolean[] canEditA) { return new javax.swing.table.DefaultTableModel( new Object[][]{}, @@ -51,6 +59,10 @@ public class SwingUtils { }; } + /** + * Open URL by java.awt.Desktop + * @param link + */ public static void openLink(URI link) { try { java.awt.Desktop.getDesktop().browse(link); @@ -58,40 +70,61 @@ public class SwingUtils { HMCLog.warn("Failed to open link: " + link, e); } } - + + /** + * Move the cursor to the end of TextArea. + * @param tf the TextArea + */ public static void moveEnd(JTextArea tf) { int position = tf.getText().length(); tf.setCaretPosition(position); } - + + /** + * Move the cursor to the end of ScrollPane. + * @param pane the ScrollPane + */ public static void moveEnd(JScrollPane pane) { JScrollBar bar = pane.getVerticalScrollBar(); bar.setValue(bar.getMaximum()); } - + + /** + * Get the DefaultListModel from JList. + * @param list + * @return Forcely Type casted to DefaultListModel + */ public static DefaultListModel getDefaultListModel(JList list) { - return (DefaultListModel)list.getModel(); + return (DefaultListModel) list.getModel(); } - + + /** + * Append new element to JList + * @param list the JList + * @param element the Element + */ public static void appendLast(JList list, Object element) { getDefaultListModel(list).addElement(element); } - + public static void replaceLast(JList list, Object element) { DefaultListModel model = getDefaultListModel(list); - model.set(model.getSize()-1, element); + model.set(model.getSize() - 1, element); } - + public static void clear(JList list) { list.setModel(new DefaultListModel()); } - + + /** + * Clear the JTable + * @param table JTable with DefaultTableModel. + */ public static void clearDefaultTable(JTable table) { - DefaultTableModel model = (DefaultTableModel)table.getModel(); - while(model.getRowCount() > 0) { + DefaultTableModel model = (DefaultTableModel) table.getModel(); + while (model.getRowCount() > 0) model.removeRow(0); - } table.updateUI(); } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/UpdateChecker.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/UpdateChecker.java index b7c36df93..18bd77947 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/UpdateChecker.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/UpdateChecker.java @@ -26,6 +26,7 @@ import org.jackhuang.hellominecraft.HMCLog; * @author huangyuhui */ public final class UpdateChecker extends Thread { + public static boolean OUT_DATED = false; public VersionNumber base; public String type; @@ -33,46 +34,43 @@ public final class UpdateChecker extends Thread { public NonConsumer dl; public UpdateChecker(VersionNumber base, String type, boolean continueUpdate, NonConsumer dl) { - super("UpdateChecker"); + super("UpdateChecker"); this.base = base; this.type = type; this.continueUpdate = continueUpdate; this.dl = dl; } - + VersionNumber value; @Override public void run() { - String url = "http://huangyuhui.duapp.com/info.php?type=" + type, version; - try { - version = NetUtils.doGet(url); - } catch (Exception e) { + String url = "http://huangyuhui.duapp.com/info.php?type=" + type, version; + try { + version = NetUtils.doGet(url); + } catch (Exception e) { HMCLog.warn("Failed to get update url.", e); - return; - } - value = VersionNumber.check(version); - if (!continueUpdate) { - return; - } + return; + } + value = VersionNumber.check(version); + if (!continueUpdate) + return; process(false); } - + public void process(boolean showMessage) { - if (value == null) { - HMCLog.warn("Failed to check update..."); - if(showMessage) { + if (value == null) { + HMCLog.warn("Failed to check update..."); + if (showMessage) MessageBox.Show(C.i18n("update.failed")); - } - } else { - if (VersionNumber.isOlder(base, value)) { + } else + if (VersionNumber.isOlder(base, value)) { OUT_DATED = true; - dl.onDone(); - } - } + dl.onDone(); + } } - + public VersionNumber getNewVersion() { return value; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Utils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Utils.java index c4136c46d..6abdf2697 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Utils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/Utils.java @@ -44,8 +44,9 @@ import org.jackhuang.hellominecraft.HMCLog; * @author huangyuhui */ public final class Utils { - + private static final GsonBuilder gsonBuilder = new GsonBuilder().setPrettyPrinting(); + public static GsonBuilder getDefaultGsonBuilder() { return gsonBuilder; } @@ -53,13 +54,12 @@ public final class Utils { public static String[] getURL() { URL[] urls = ((URLClassLoader) Utils.class.getClassLoader()).getURLs(); String[] urlStrings = new String[urls.length]; - for (int i = 0; i < urlStrings.length; i++) { + for (int i = 0; i < urlStrings.length; i++) try { urlStrings[i] = URLDecoder.decode(urls[i].getPath(), "UTF-8"); } catch (UnsupportedEncodingException ex) { HMCLog.warn("Unsupported UTF-8 encoding", ex); } - } return urlStrings; } @@ -79,31 +79,31 @@ public final class Utils { throw new IOException("Failed to get field handle to set library path"); } } - + public static int getSuggestedMemorySize() { - try { - OperatingSystemMXBean osmb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); - int memory = (int)(osmb.getTotalPhysicalMemorySize() / 1024 / 1024) / 4; - memory = Math.round((float)memory/128.0f)*128; - return memory; - } catch(Throwable t) { - HMCLog.warn("Failed to get total memory size, use 1024MB.", t); - return 1024; - } + try { + OperatingSystemMXBean osmb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + int memory = (int) (osmb.getTotalPhysicalMemorySize() / 1024 / 1024) / 4; + memory = Math.round((float) memory / 128.0f) * 128; + return memory; + } catch (Throwable t) { + HMCLog.warn("Failed to get total memory size, use 1024MB.", t); + return 1024; + } } - + public static void setClipborad(String text) { - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(text), null); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(text), null); } - + public static boolean openLink(String url) { - try { - Desktop.getDesktop().browse(new URI(url)); - return true; - } catch (URISyntaxException | IOException ex) { - HMCLog.warn("Failed to open link:" + url, ex); - return false; - } + try { + Desktop.getDesktop().browse(new URI(url)); + return true; + } catch (URISyntaxException | IOException ex) { + HMCLog.warn("Failed to open link:" + url, ex); + return false; + } } public static void openFolder(File f) { @@ -112,66 +112,66 @@ public final class Utils { java.awt.Desktop.getDesktop().open(f); } catch (Exception ex) { MessageBox.Show(C.i18n("message.cannot_open_explorer") + ex.getMessage()); - HMCLog.warn("Failed to open folder:" + f, ex); + HMCLog.warn("Failed to open folder:" + f, ex); } } - + public static ImageIcon scaleImage(ImageIcon i, int x, int y) { return new ImageIcon(i.getImage().getScaledInstance(x, y, Image.SCALE_SMOOTH)); } - + public static ImageIcon searchBackgroundImage(ImageIcon background, String bgpath, int width, int height) { Random r = new Random(); boolean loaded = false; - + // bgpath - if (StrUtils.isNotBlank(bgpath) && !loaded) { - String[] backgroundPath = bgpath.split(";"); - if(backgroundPath.length > 0) { + if (StrUtils.isNotBlank(bgpath) && !loaded) { + String[] backgroundPath = bgpath.split(";"); + if (backgroundPath.length > 0) { int index = r.nextInt(backgroundPath.length); background = new ImageIcon(Toolkit.getDefaultToolkit().getImage(backgroundPath[index]).getScaledInstance(width, height, Image.SCALE_DEFAULT)); HMCLog.log("Prepared background image in bgpath."); loaded = true; } - } - + } + // bgskin if (!loaded) { - File backgroundImageFile = new File("bg"); - if (backgroundImageFile.exists() && backgroundImageFile.isDirectory()) { - String[] backgroundPath = backgroundImageFile.list(); - if(backgroundPath.length > 0) { + File backgroundImageFile = new File("bg"); + if (backgroundImageFile.exists() && backgroundImageFile.isDirectory()) { + String[] backgroundPath = backgroundImageFile.list(); + if (backgroundPath.length > 0) { int index = r.nextInt(backgroundPath.length); background = new ImageIcon(Toolkit.getDefaultToolkit().getImage("bg" + File.separator + backgroundPath[index]).getScaledInstance(width, height, Image.SCALE_DEFAULT)); HMCLog.log("Prepared background image in bgskin folder."); loaded = true; } } - } - + } + // background.png if (!loaded) { File backgroundImageFile = new File("background.png"); if (backgroundImageFile.exists()) { loaded = true; - background = new ImageIcon(Toolkit.getDefaultToolkit().getImage(backgroundImageFile.getAbsolutePath()).getScaledInstance(width, height, Image.SCALE_DEFAULT)); + background = new ImageIcon(Toolkit.getDefaultToolkit().getImage(backgroundImageFile.getAbsolutePath()).getScaledInstance(width, height, Image.SCALE_DEFAULT)); HMCLog.log("Prepared background image in background.png."); } - } - + } + // background.jpg if (!loaded) { File backgroundImageFile = new File("background.jpg"); if (backgroundImageFile.exists()) { - loaded = true; - background = new ImageIcon(Toolkit.getDefaultToolkit().getImage(backgroundImageFile.getAbsolutePath()).getScaledInstance(width, height, Image.SCALE_DEFAULT)); + //loaded = true; + background = new ImageIcon(Toolkit.getDefaultToolkit().getImage(backgroundImageFile.getAbsolutePath()).getScaledInstance(width, height, Image.SCALE_DEFAULT)); HMCLog.log("Prepared background image in background.jpg."); } - } - + } + return background; } - + /** * In order to fight against the permission manager. */ @@ -181,7 +181,7 @@ public final class Utils { Method exit = z.getDeclaredMethod("exit", int.class); exit.setAccessible(true); exit.invoke(z, 0); - } catch(ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { MessageBox.Show(C.i18n("launcher.exit_failed")); e.printStackTrace(); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/VersionNumber.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/VersionNumber.java index 339c15cd6..43b1b21e8 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/VersionNumber.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/VersionNumber.java @@ -27,16 +27,16 @@ public final class VersionNumber implements Comparable { public byte firstVer, secondVer, thirdVer; public VersionNumber(byte a, byte b, byte c) { - firstVer = a; secondVer = b; thirdVer = c; + firstVer = a; + secondVer = b; + thirdVer = c; } public static VersionNumber check(String data) { - while (!data.isEmpty() && ((data.charAt(0) < '0' || data.charAt(0) > '9') && data.charAt(0) != '.')) { + while (!data.isEmpty() && ((data.charAt(0) < '0' || data.charAt(0) > '9') && data.charAt(0) != '.')) data = data.substring(1); - } - if (data.isEmpty()) { + if (data.isEmpty()) return null; - } VersionNumber ur; String[] ver = data.split("\\."); if (ver.length == 3) { @@ -55,24 +55,21 @@ public final class VersionNumber implements Comparable { } public static boolean isOlder(VersionNumber a, VersionNumber b) { - if (a.firstVer < b.firstVer) { + if (a.firstVer < b.firstVer) return true; - } else if (a.firstVer == b.firstVer) { - if (a.secondVer < b.secondVer) { + else if (a.firstVer == b.firstVer) + if (a.secondVer < b.secondVer) return true; - } else if (a.secondVer == b.secondVer) { - if (a.thirdVer < b.thirdVer) { + else if (a.secondVer == b.secondVer) + if (a.thirdVer < b.thirdVer) return true; - } - } - } return false; } @Override public int compareTo(VersionNumber o) { - if(isOlder(this, o)) return -1; - else if(isOlder(o, this)) return 1; + if (isOlder(this, o)) return -1; + else if (isOlder(o, this)) return 1; else return 0; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/DigestUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/DigestUtils.java index d0ad92838..f80d2946b 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/DigestUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/code/DigestUtils.java @@ -16,7 +16,6 @@ */ package org.jackhuang.hellominecraft.utils.code; -import org.jackhuang.hellominecraft.utils.code.Hex; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiConsumer.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiConsumer.java index 64fad088a..588fe30ea 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiConsumer.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiConsumer.java @@ -20,5 +20,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface BiConsumer { + void onDone(V value, V2 value2); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiFunction.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiFunction.java index 089dc0fc6..f712f7f9b 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiFunction.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/BiFunction.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface BiFunction { + C apply(A a, B b); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Consumer.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Consumer.java index 3ce781a68..c72276a1e 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Consumer.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Consumer.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface Consumer { + void accept(T t); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Function.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Function.java index e25b8deee..ae5d65f5c 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Function.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Function.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface Function { + R apply(T t); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonConsumer.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonConsumer.java index 91a35e45b..221823184 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonConsumer.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonConsumer.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface NonConsumer { + void onDone(); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonFunction.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonFunction.java index 8c8c37f37..276d36e2f 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonFunction.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/NonFunction.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface NonFunction { + T onDone(); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Predicate.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Predicate.java index 840a55026..c0283975c 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Predicate.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/Predicate.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface Predicate { + boolean apply(T t); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/TriConsumer.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/TriConsumer.java index a003110c8..76577ae59 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/TriConsumer.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/functions/TriConsumer.java @@ -21,5 +21,6 @@ package org.jackhuang.hellominecraft.utils.functions; * @author huangyuhui */ public interface TriConsumer { + void onDone(V1 v1, V2 v2, V3 v3); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Compressor.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Compressor.java index f17208386..f82f32b24 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Compressor.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Compressor.java @@ -52,11 +52,10 @@ public class Compressor { BufferedOutputStream bos = new BufferedOutputStream(os); try (ZipOutputStream zos = new ZipOutputStream(bos)) { String basePath; - if (sourceDir.isDirectory()) { + if (sourceDir.isDirectory()) basePath = sourceDir.getPath(); - } else {//直接压缩单个文件时,取父目录 + else//直接压缩单个文件时,取父目录 basePath = sourceDir.getParent(); - } zipFile(sourceDir, basePath, zos); zos.closeEntry(); } @@ -72,22 +71,21 @@ public class Compressor { private static void zipFile(File source, String basePath, ZipOutputStream zos) throws IOException { File[] files; - if (source.isDirectory()) { + if (source.isDirectory()) files = source.listFiles(); - } else { + else { files = new File[1]; files[0] = source; } String pathName;//存相对路径(相对于待压缩的根目录) byte[] buf = new byte[1024]; int length; - for (File file : files) { + for (File file : files) if (file.isDirectory()) { pathName = file.getPath().substring(basePath.length() + 1) + "/"; - if (file.getName().toLowerCase().contains("meta-inf")) { + if (file.getName().toLowerCase().contains("meta-inf")) continue; - } zos.putNextEntry(new ZipEntry(pathName)); zipFile(file, basePath, zos); } else { @@ -95,18 +93,16 @@ public class Compressor { try (InputStream is = new FileInputStream(file)) { BufferedInputStream bis = new BufferedInputStream(is); zos.putNextEntry(new ZipEntry(pathName)); - while ((length = bis.read(buf)) > 0) { + while ((length = bis.read(buf)) > 0) zos.write(buf, 0, length); - } } } - } } public static void unzip(String zipFileName, String extPlace) throws IOException { unzip(new File(zipFileName), new File(extPlace)); } - + public static void unzip(File zipFileName, File extPlace) throws IOException { unzip(zipFileName, extPlace, new String[0]); } @@ -129,7 +125,7 @@ public class Compressor { while (e.hasMoreElements()) { ZipEntry zipEnt = (ZipEntry) e.nextElement(); gbkPath = zipEnt.getName(); - if(StrUtils.startsWithOne(without, gbkPath)) continue; + if (StrUtils.startsWithOne(without, gbkPath)) continue; if (zipEnt.isDirectory()) { strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); @@ -142,15 +138,13 @@ public class Compressor { strtemp = strPath + File.separator + gbkPath; //建目录 String strsubdir = gbkPath; - for (int i = 0; i < strsubdir.length(); i++) { + for (int i = 0; i < strsubdir.length(); i++) if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); - if (!subdir.exists()) { + if (!subdir.exists()) subdir.mkdir(); - } } - } try (FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos)) { int c; while ((c = bis.read()) != -1) 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 273b7e4d9..8f0fb3b49 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/FileUtils.java @@ -36,197 +36,177 @@ import org.jackhuang.hellominecraft.utils.NetUtils; public class FileUtils { public static void deleteDirectory(File directory) - throws IOException { - if (!directory.exists()) { - return; - } + throws IOException { + if (!directory.exists()) + return; - if (!isSymlink(directory)) { - cleanDirectory(directory); - } + if (!isSymlink(directory)) + cleanDirectory(directory); - if (!directory.delete()) { - String message = "Unable to delete directory " + directory + "."; + if (!directory.delete()) { + String message = "Unable to delete directory " + directory + "."; - throw new IOException(message); - } + throw new IOException(message); + } } - + public static boolean deleteDirectoryQuietly(File directory) { try { deleteDirectory(directory); return true; - } catch(Exception e) { + } catch (Exception e) { HMCLog.err("Failed to delete directory " + directory, e); return false; } } - + public static boolean cleanDirectoryQuietly(File directory) { try { cleanDirectory(directory); return true; - } catch(Exception e) { + } catch (Exception e) { HMCLog.err("Failed to clean directory " + directory, e); return false; } } public static void cleanDirectory(File directory) - throws IOException { - if (!directory.exists()) { + throws IOException { + if (!directory.exists()) { //String message = directory + " does not exist"; - //throw new IllegalArgumentException(message); + //throw new IllegalArgumentException(message); directory.mkdirs(); return; - } + } - if (!directory.isDirectory()) { - String message = directory + " is not a directory"; - throw new IllegalArgumentException(message); - } + if (!directory.isDirectory()) { + String message = directory + " is not a directory"; + throw new IllegalArgumentException(message); + } - File[] files = directory.listFiles(); - if (files == null) { - throw new IOException("Failed to list contents of " + directory); - } + File[] files = directory.listFiles(); + if (files == null) + throw new IOException("Failed to list contents of " + directory); - IOException exception = null; - for (File file : files) { - try { - forceDelete(file); - } catch (IOException ioe) { - exception = ioe; - } - } + IOException exception = null; + for (File file : files) + try { + forceDelete(file); + } catch (IOException ioe) { + exception = ioe; + } - if (null != exception) { - throw exception; - } + if (null != exception) + throw exception; } public static void forceDelete(File file) - throws IOException { - if (file.isDirectory()) { - deleteDirectory(file); - } else { - boolean filePresent = file.exists(); - if (!file.delete()) { - if (!filePresent) { - throw new FileNotFoundException("File does not exist: " + file); - } - String message = "Unable to delete file: " + file; + throws IOException { + if (file.isDirectory()) + deleteDirectory(file); + else { + boolean filePresent = file.exists(); + if (!file.delete()) { + if (!filePresent) + throw new FileNotFoundException("File does not exist: " + file); + String message = "Unable to delete file: " + file; - throw new IOException(message); - } - } + throw new IOException(message); + } + } } public static boolean isSymlink(File file) - throws IOException { - if (file == null) { - throw new NullPointerException("File must not be null"); - } - if (File.separatorChar == '\\') { - return false; - } - File fileInCanonicalDir; - if (file.getParent() == null) { - fileInCanonicalDir = file; - } else { - File canonicalDir = file.getParentFile().getCanonicalFile(); - fileInCanonicalDir = new File(canonicalDir, file.getName()); - } + throws IOException { + if (file == null) + throw new NullPointerException("File must not be null"); + if (File.separatorChar == '\\') + return false; + File fileInCanonicalDir; + if (file.getParent() == null) + fileInCanonicalDir = file; + else { + File canonicalDir = file.getParentFile().getCanonicalFile(); + fileInCanonicalDir = new File(canonicalDir, file.getName()); + } - return !fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile()); + return !fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile()); } public static void copyDirectory(File srcDir, File destDir) - throws IOException { - copyDirectory(srcDir, destDir, true); + throws IOException { + copyDirectory(srcDir, destDir, true); } public static void copyDirectory(File srcDir, File destDir, boolean preserveFileDate) - throws IOException { - copyDirectory(srcDir, destDir, null, preserveFileDate); + throws IOException { + copyDirectory(srcDir, destDir, null, preserveFileDate); } public static void copyDirectory(File srcDir, File destDir, FileFilter filter) - throws IOException { - copyDirectory(srcDir, destDir, filter, true); + throws IOException { + copyDirectory(srcDir, destDir, filter, true); } public static void copyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate) - throws IOException { - if (srcDir == null) { - throw new NullPointerException("Source must not be null"); - } - if (destDir == null) { - throw new NullPointerException("Destination must not be null"); - } - if (!srcDir.exists()) { - throw new FileNotFoundException("Source '" + srcDir + "' does not exist"); - } - if (!srcDir.isDirectory()) { - throw new IOException("Source '" + srcDir + "' exists but is not a directory"); - } - if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) { - throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same"); - } + throws IOException { + if (srcDir == null) + throw new NullPointerException("Source must not be null"); + if (destDir == null) + throw new NullPointerException("Destination must not be null"); + if (!srcDir.exists()) + throw new FileNotFoundException("Source '" + srcDir + "' does not exist"); + if (!srcDir.isDirectory()) + throw new IOException("Source '" + srcDir + "' exists but is not a directory"); + if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) + throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same"); - List exclusionList = null; - if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) { - File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); - if ((srcFiles != null) && (srcFiles.length > 0)) { - exclusionList = new ArrayList(srcFiles.length); - for (File srcFile : srcFiles) { - File copiedFile = new File(destDir, srcFile.getName()); - exclusionList.add(copiedFile.getCanonicalPath()); - } - } - } - doCopyDirectory(srcDir, destDir, filter, preserveFileDate, exclusionList); + List exclusionList = null; + if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) { + File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); + if ((srcFiles != null) && (srcFiles.length > 0)) { + exclusionList = new ArrayList(srcFiles.length); + for (File srcFile : srcFiles) { + File copiedFile = new File(destDir, srcFile.getName()); + exclusionList.add(copiedFile.getCanonicalPath()); + } + } + } + doCopyDirectory(srcDir, destDir, filter, preserveFileDate, exclusionList); } private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter, boolean preserveFileDate, List exclusionList) - throws IOException { - File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); - if (srcFiles == null) { - throw new IOException("Failed to list contents of " + srcDir); - } - if (destDir.exists()) { - if (!destDir.isDirectory()) { - throw new IOException("Destination '" + destDir + "' exists but is not a directory"); - } - } else if ((!destDir.mkdirs()) && (!destDir.isDirectory())) { - throw new IOException("Destination '" + destDir + "' directory cannot be created"); - } + throws IOException { + File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); + if (srcFiles == null) + throw new IOException("Failed to list contents of " + srcDir); + if (destDir.exists()) { + if (!destDir.isDirectory()) + throw new IOException("Destination '" + destDir + "' exists but is not a directory"); + } else if ((!destDir.mkdirs()) && (!destDir.isDirectory())) + throw new IOException("Destination '" + destDir + "' directory cannot be created"); - if (!destDir.canWrite()) { - throw new IOException("Destination '" + destDir + "' cannot be written to"); - } - for (File srcFile : srcFiles) { - File dstFile = new File(destDir, srcFile.getName()); - if ((exclusionList == null) || (!exclusionList.contains(srcFile.getCanonicalPath()))) { - if (srcFile.isDirectory()) { - doCopyDirectory(srcFile, dstFile, filter, preserveFileDate, exclusionList); - } else { - doCopyFile(srcFile, dstFile, preserveFileDate); - } - } + if (!destDir.canWrite()) + throw new IOException("Destination '" + destDir + "' cannot be written to"); + for (File srcFile : srcFiles) { + File dstFile = new File(destDir, srcFile.getName()); + if ((exclusionList == null) || (!exclusionList.contains(srcFile.getCanonicalPath()))) + if (srcFile.isDirectory()) + doCopyDirectory(srcFile, dstFile, filter, preserveFileDate, exclusionList); + else + doCopyFile(srcFile, dstFile, preserveFileDate); - } + } - if (preserveFileDate) { - destDir.setLastModified(srcDir.lastModified()); - } + if (preserveFileDate) + destDir.setLastModified(srcDir.lastModified()); } public static String readFileToString(File file) - throws IOException { - return NetUtils.getStreamContent(IOUtils.openInputStream(file)); + throws IOException { + return NetUtils.getStreamContent(IOUtils.openInputStream(file)); } - + public static String readFileToStringQuietly(File file) { try { return NetUtils.getStreamContent(IOUtils.openInputStream(file)); @@ -237,239 +217,216 @@ public class FileUtils { } public static String readFileToString(File file, String charset) - throws IOException { - return NetUtils.getStreamContent(IOUtils.openInputStream(file), charset); + throws IOException { + return NetUtils.getStreamContent(IOUtils.openInputStream(file), charset); } - + public static String readFileToStringIgnoreFileNotFound(File file) throws IOException { - try { - return NetUtils.getStreamContent(IOUtils.openInputStream(file)); - } catch (FileNotFoundException ex) { - return ""; - } + try { + return NetUtils.getStreamContent(IOUtils.openInputStream(file)); + } catch (FileNotFoundException ex) { + return ""; + } } public static void copyFile(File srcFile, File destFile) - throws IOException { - copyFile(srcFile, destFile, true); + throws IOException { + copyFile(srcFile, destFile, true); } public static void copyFile(File srcFile, File destFile, boolean preserveFileDate) - throws IOException { - if (srcFile == null) { - throw new NullPointerException("Source must not be null"); - } - if (destFile == null) { - throw new NullPointerException("Destination must not be null"); - } - if (!srcFile.exists()) { - throw new FileNotFoundException("Source '" + srcFile + "' does not exist"); - } - if (srcFile.isDirectory()) { - throw new IOException("Source '" + srcFile + "' exists but is a directory"); - } - if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) { - throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same"); - } - File parentFile = destFile.getParentFile(); - if ((parentFile != null) - && (!parentFile.mkdirs()) && (!parentFile.isDirectory())) { - throw new IOException("Destination '" + parentFile + "' directory cannot be created"); - } + throws IOException { + if (srcFile == null) + throw new NullPointerException("Source must not be null"); + if (destFile == null) + throw new NullPointerException("Destination must not be null"); + if (!srcFile.exists()) + throw new FileNotFoundException("Source '" + srcFile + "' does not exist"); + if (srcFile.isDirectory()) + throw new IOException("Source '" + srcFile + "' exists but is a directory"); + if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) + throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same"); + File parentFile = destFile.getParentFile(); + if ((parentFile != null) + && (!parentFile.mkdirs()) && (!parentFile.isDirectory())) + throw new IOException("Destination '" + parentFile + "' directory cannot be created"); - if ((destFile.exists()) && (!destFile.canWrite())) { - throw new IOException("Destination '" + destFile + "' exists but is read-only"); - } - doCopyFile(srcFile, destFile, preserveFileDate); + if ((destFile.exists()) && (!destFile.canWrite())) + throw new IOException("Destination '" + destFile + "' exists but is read-only"); + doCopyFile(srcFile, destFile, preserveFileDate); } private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) - throws IOException { - if ((destFile.exists()) && (destFile.isDirectory())) { - throw new IOException("Destination '" + destFile + "' exists but is a directory"); - } + throws IOException { + if ((destFile.exists()) && (destFile.isDirectory())) + throw new IOException("Destination '" + destFile + "' exists but is a directory"); - FileInputStream fis = null; - FileOutputStream fos = null; - FileChannel input = null; - FileChannel output = null; - try { - fis = new FileInputStream(srcFile); - fos = new FileOutputStream(destFile); - input = fis.getChannel(); - output = fos.getChannel(); - long size = input.size(); - long pos = 0L; - long count; - while (pos < size) { - count = size - pos > 31457280L ? 31457280L : size - pos; - pos += output.transferFrom(input, pos, count); - } - } finally { - IOUtils.closeQuietly(output); - IOUtils.closeQuietly(fos); - IOUtils.closeQuietly(input); - IOUtils.closeQuietly(fis); - } + FileInputStream fis = null; + FileOutputStream fos = null; + FileChannel input = null; + FileChannel output = null; + try { + fis = new FileInputStream(srcFile); + fos = new FileOutputStream(destFile); + input = fis.getChannel(); + output = fos.getChannel(); + long size = input.size(); + long pos = 0L; + long count; + while (pos < size) { + count = size - pos > 31457280L ? 31457280L : size - pos; + pos += output.transferFrom(input, pos, count); + } + } finally { + IOUtils.closeQuietly(output); + IOUtils.closeQuietly(fos); + IOUtils.closeQuietly(input); + IOUtils.closeQuietly(fis); + } - if (srcFile.length() != destFile.length()) { - throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'"); - } + if (srcFile.length() != destFile.length()) + throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'"); - if (preserveFileDate) { - destFile.setLastModified(srcFile.lastModified()); - } + if (preserveFileDate) + destFile.setLastModified(srcFile.lastModified()); } public static int indexOfLastSeparator(String filename) { - if (filename == null) { - return -1; - } - int lastUnixPos = filename.lastIndexOf(47); - int lastWindowsPos = filename.lastIndexOf(92); - return Math.max(lastUnixPos, lastWindowsPos); + if (filename == null) + return -1; + int lastUnixPos = filename.lastIndexOf(47); + int lastWindowsPos = filename.lastIndexOf(92); + return Math.max(lastUnixPos, lastWindowsPos); } public static int indexOfExtension(String filename) { - if (filename == null) { - return -1; - } - int extensionPos = filename.lastIndexOf(46); - int lastSeparator = indexOfLastSeparator(filename); - return lastSeparator > extensionPos ? -1 : extensionPos; + if (filename == null) + return -1; + int extensionPos = filename.lastIndexOf(46); + int lastSeparator = indexOfLastSeparator(filename); + return lastSeparator > extensionPos ? -1 : extensionPos; } public static String getName(String filename) { - if (filename == null) { - return null; - } - int index = indexOfLastSeparator(filename); - return filename.substring(index + 1); + if (filename == null) + return null; + int index = indexOfLastSeparator(filename); + return filename.substring(index + 1); } public static String getBaseName(String filename) { - return removeExtension(getName(filename)); + return removeExtension(getName(filename)); } public static String getExtension(String filename) { - if (filename == null) { - return null; - } - int index = indexOfExtension(filename); - if (index == -1) { - return ""; - } - return filename.substring(index + 1); + if (filename == null) + return null; + int index = indexOfExtension(filename); + if (index == -1) + return ""; + return filename.substring(index + 1); } public static String removeExtension(String filename) { - if (filename == null) { - return null; - } - int index = indexOfExtension(filename); - if (index == -1) { - return filename; - } - return filename.substring(0, index); + if (filename == null) + return null; + int index = indexOfExtension(filename); + if (index == -1) + return filename; + return filename.substring(0, index); } - + public static void writeQuietly(File file, CharSequence data) { try { write(file, data); - } catch(IOException e) { + } catch (IOException e) { HMCLog.warn("Failed to write data to file: " + file, e); } } public static void write(File file, CharSequence data) - throws IOException { - write(file, data, "UTF-8", false); + throws IOException { + write(file, data, "UTF-8", false); } public static void write(File file, CharSequence data, boolean append) - throws IOException { - write(file, data, "UTF-8", append); + throws IOException { + write(file, data, "UTF-8", append); } public static void write(File file, CharSequence data, String encoding) - throws IOException { - write(file, data, encoding, false); + throws IOException { + write(file, data, encoding, false); } public static void write(File file, CharSequence data, String encoding, boolean append) - throws IOException { - String str = data == null ? null : data.toString(); - writeStringToFile(file, str, encoding, append); + throws IOException { + String str = data == null ? null : data.toString(); + writeStringToFile(file, str, encoding, append); } public static void writeStringToFile(File file, String data) - throws IOException { - writeStringToFile(file, data, "UTF-8", false); + throws IOException { + writeStringToFile(file, data, "UTF-8", false); } public static void writeStringToFile(File file, String data, String encoding) - throws IOException { - writeStringToFile(file, data, encoding, false); + throws IOException { + writeStringToFile(file, data, encoding, false); } public static void writeStringToFile(File file, String data, String encoding, boolean append) - throws IOException { - OutputStream out = null; - try { - out = openOutputStream(file, append); - IOUtils.write(data, out, encoding); - out.close(); - } finally { - IOUtils.closeQuietly(out); - } + throws IOException { + OutputStream out = null; + try { + out = openOutputStream(file, append); + IOUtils.write(data, out, encoding); + out.close(); + } finally { + IOUtils.closeQuietly(out); + } } public static FileInputStream openInputStream(File file) - throws IOException { - if (file.exists()) { - if (file.isDirectory()) { - throw new IOException("File '" + file + "' exists but is a directory"); - } - if (!file.canRead()) { - throw new IOException("File '" + file + "' cannot be read"); - } - } else { - throw new FileNotFoundException("File '" + file + "' does not exist"); - } - return new FileInputStream(file); + throws IOException { + if (file.exists()) { + if (file.isDirectory()) + throw new IOException("File '" + file + "' exists but is a directory"); + if (!file.canRead()) + throw new IOException("File '" + file + "' cannot be read"); + } else + throw new FileNotFoundException("File '" + file + "' does not exist"); + return new FileInputStream(file); } public static FileOutputStream openOutputStream(File file) - throws IOException { - return openOutputStream(file, false); + throws IOException { + return openOutputStream(file, false); } public static FileOutputStream openOutputStream(File file, boolean append) - throws IOException { - if (file.exists()) { - if (file.isDirectory()) { - throw new IOException("File '" + file + "' exists but is a directory"); - } - if (!file.canWrite()) { - throw new IOException("File '" + file + "' cannot be written to"); - } - } else { - File parent = file.getParentFile(); - if ((parent != null) - && (!parent.mkdirs()) && (!parent.isDirectory())) { - throw new IOException("Directory '" + parent + "' could not be created"); - } + throws IOException { + if (file.exists()) { + if (file.isDirectory()) + throw new IOException("File '" + file + "' exists but is a directory"); + if (!file.canWrite()) + throw new IOException("File '" + file + "' cannot be written to"); + } else { + File parent = file.getParentFile(); + if ((parent != null) + && (!parent.mkdirs()) && (!parent.isDirectory())) + throw new IOException("Directory '" + parent + "' could not be created"); file.createNewFile(); - } + } - return new FileOutputStream(file, append); + return new FileOutputStream(file, append); } - + public static File[] searchSuffix(File dir, String suffix) { ArrayList al = new ArrayList(); File[] files = dir.listFiles(); - for(File f : files) - if(f.getName().endsWith(suffix)) al.add(f); + for (File f : files) + if (f.getName().endsWith(suffix)) al.add(f); return al.toArray(new File[0]); } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/IOUtils.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/IOUtils.java index 1d21a07a0..a6b8e413c 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/IOUtils.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/IOUtils.java @@ -16,7 +16,6 @@ */ package org.jackhuang.hellominecraft.utils.system; -import org.jackhuang.hellominecraft.utils.system.OS; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; @@ -43,14 +42,12 @@ import org.jackhuang.hellominecraft.HMCLog; public class IOUtils { public static String addSeparator(String path) { - if (path == null || path.trim().length() == 0) { + if (path == null || path.trim().length() == 0) return ""; - } - if (isSeparator(path.charAt(path.length() - 1))) { + if (isSeparator(path.charAt(path.length() - 1))) return path; - } else { + else return path + File.separatorChar; - } } public static boolean isSeparator(char ch) { @@ -60,21 +57,18 @@ public class IOUtils { public static String removeLastSeparator(String dir) { String t = dir.trim(); char ch = t.charAt(t.length() - 1); - if (isSeparator(ch)) { + if (isSeparator(ch)) return t.substring(0, t.length() - 1); - } return t; } public static String extractLastDirectory(String dir) { String t = removeLastSeparator(dir); int i = t.length() - 1; - while (i >= 0 && !isSeparator(dir.charAt(i))) { + while (i >= 0 && !isSeparator(dir.charAt(i))) i--; - } - if (i < 0) { + if (i < 0) return t; - } return t.substring(i + 1, (t.length() - i) + (i + 1) - 1); } @@ -83,11 +77,9 @@ public class IOUtils { if (f.isDirectory()) { File[] f1 = f.listFiles(); int len = f1.length; - for (int i = 0; i < len; i++) { - if (f1[i].isFile()) { + for (int i = 0; i < len; i++) + if (f1[i].isFile()) arr.add(f1[i].getName()); - } - } } return arr; } @@ -97,11 +89,9 @@ public class IOUtils { if (f.isDirectory()) { File[] f1 = f.listFiles(); int len = f1.length; - for (int i = 0; i < len; i++) { - if (f1[i].isFile()) { + for (int i = 0; i < len; i++) + if (f1[i].isFile()) arr.add(addSeparator(f.getAbsolutePath()) + f1[i].getName()); - } - } } return arr; } @@ -111,11 +101,9 @@ public class IOUtils { if (f.isDirectory()) { File[] f1 = f.listFiles(); int len = f1.length; - for (int i = 0; i < len; i++) { - if (f1[i].isDirectory()) { + for (int i = 0; i < len; i++) + if (f1[i].isDirectory()) arr.add(f1[i].getName()); - } - } } return arr; } @@ -152,9 +140,8 @@ public class IOUtils { for (int i = 0; i < macs.length; i++) { mac = Integer.toHexString(macs[i] & 0xFF); - if (mac.length() == 1) { + if (mac.length() == 1) mac = '0' + mac; - } sb.append(mac).append("-"); } @@ -179,11 +166,10 @@ public class IOUtils { public static String getJavaDir() { String path = System.getProperty("java.home") + File.separatorChar + "bin" + File.separatorChar; path = addSeparator(path); - if (OS.os() == OS.WINDOWS && new File(path + "javaw.exe").isFile()) { + if (OS.os() == OS.WINDOWS && new File(path + "javaw.exe").isFile()) return path + "javaw.exe"; - } else { + else return path + "java"; - } } public static byte[] readFully(InputStream stream) throws IOException { @@ -192,9 +178,8 @@ public class IOUtils { int len; do { len = stream.read(data); - if (len <= 0) { + if (len <= 0) continue; - } entryBuffer.write(data, 0, len); } while (len != -1); @@ -219,39 +204,33 @@ public class IOUtils { public static void closeQuietly(Closeable closeable) { try { - if (closeable != null) { + if (closeable != null) closeable.close(); - } } catch (IOException ioe) { } } public static void write(byte[] data, OutputStream output) throws IOException { - if (data != null) { + if (data != null) output.write(data); - } } public static void write(String data, OutputStream output, String encoding) throws IOException { - if (data != null) { + if (data != null) output.write(data.getBytes(encoding)); - } } public static FileInputStream openInputStream(File file) throws IOException { if (file.exists()) { - if (file.isDirectory()) { + if (file.isDirectory()) throw new IOException("File '" + file + "' exists but is a directory"); - } - if (!file.canRead()) { + if (!file.canRead()) throw new IOException("File '" + file + "' cannot be read"); - } - } else { + } else throw new FileNotFoundException("File '" + file + "' does not exist"); - } return new FileInputStream(file); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JavaProcess.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JavaProcess.java index 843c3ab22..9a5b43123 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JavaProcess.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JavaProcess.java @@ -16,7 +16,6 @@ */ package org.jackhuang.hellominecraft.utils.system; -import org.jackhuang.hellominecraft.utils.system.ProcessManager; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -35,7 +34,7 @@ public class JavaProcess { public JavaProcess(List commands, Process process, ProcessManager pm) { this.commands = commands; this.process = process; - if(pm != null) pm.registerProcess(this); + if (pm != null) pm.registerProcess(this); } public JavaProcess(String[] commands, Process process, ProcessManager pm) { @@ -89,4 +88,4 @@ public class JavaProcess { public void stop() { this.process.destroy(); } -} \ No newline at end of file +} diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JdkVersion.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JdkVersion.java index 398422dca..f19d9526f 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JdkVersion.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/JdkVersion.java @@ -45,7 +45,7 @@ public final class JdkVersion { public String getLocation() { return location; } - + public int getParsedVersion() { return parseVersion(getVersion()); } @@ -109,18 +109,14 @@ public final class JdkVersion { // version String should look like "1.4.2_10" majorJavaVersion = parseVersion(javaVersion); } - + private static int parseVersion(String javaVersion) { - if(StrUtils.isBlank(javaVersion)) return UNKOWN; + if (StrUtils.isBlank(javaVersion)) return UNKOWN; int a = UNKOWN; - if (javaVersion.contains("1.9.")) - a = JAVA_19; - else if (javaVersion.contains("1.8.")) - a = JAVA_18; - else if (javaVersion.contains("1.7.")) - a = JAVA_17; - else if (javaVersion.contains("1.6.")) - a = JAVA_16; + if (javaVersion.contains("1.9.")) a = JAVA_19; + else if (javaVersion.contains("1.8.")) a = JAVA_18; + else if (javaVersion.contains("1.7.")) a = JAVA_17; + else if (javaVersion.contains("1.6.")) a = JAVA_16; return a; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/MessageBox.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/MessageBox.java index d14d76e29..610598333 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/MessageBox.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/MessageBox.java @@ -16,38 +16,38 @@ */ package org.jackhuang.hellominecraft.utils.system; -import javax.swing.JOptionPane; +import javax.swing.JOptionPane; import org.jackhuang.hellominecraft.C; - -/** - * @author huangyuhui - */ -public class MessageBox -{ + +/** + * @author huangyuhui + */ +public class MessageBox { + private static String Title = C.i18n("message.info"); /** * Buttons: OK */ - public static final int DEFAULT_OPTION = -1; + public static final int DEFAULT_OPTION = -1; /** * Buttons: Yes No */ - public static final int YES_NO_OPTION = 10; + public static final int YES_NO_OPTION = 10; /** * Buttons: Yes No Cancel */ - public static final int YES_NO_CANCEL_OPTION =11; + public static final int YES_NO_CANCEL_OPTION = 11; /** * Buttons: OK Cancel */ - public static final int OK_CANCEL_OPTION = 12; + public static final int OK_CANCEL_OPTION = 12; /** * User Operation: Yes */ public static final int YES_OPTION = 0; /** * User Operation: No - */ + */ public static final int NO_OPTION = 1; /** * User Operation: Cancel @@ -67,7 +67,7 @@ public class MessageBox public static final int ERROR_MESSAGE = 0; /** * Message Box Type: Info - */ + */ public static final int INFORMATION_MESSAGE = 1; /** * Message Box Type: Warning @@ -81,46 +81,45 @@ public class MessageBox * Message Box Type: Plain */ public static final int PLAIN_MESSAGE = -1; - + /** * Show MsgBox with title and options + * * @param Msg The Message * @param Title The title of MsgBox. * @param Option The type of MsgBox. * @return user operation. */ - public static int Show(String Msg, String Title, int Option) - { - switch(Option) - { - case YES_NO_OPTION: - case YES_NO_CANCEL_OPTION: - case OK_CANCEL_OPTION: - return JOptionPane.showConfirmDialog(null, Msg, Title, Option - 10); - default: - JOptionPane.showMessageDialog(null, Msg, Title, Option); - } - return 0; + public static int Show(String Msg, String Title, int Option) { + switch (Option) { + case YES_NO_OPTION: + case YES_NO_CANCEL_OPTION: + case OK_CANCEL_OPTION: + return JOptionPane.showConfirmDialog(null, Msg, Title, Option - 10); + default: + JOptionPane.showMessageDialog(null, Msg, Title, Option); + } + return 0; } - + /** * Show MsgBox with options + * * @param Msg The Message * @param Option The type of MsgBox. * @return User Operation */ - public static int Show(String Msg, int Option) - { - return Show(Msg, Title, Option); - } - + public static int Show(String Msg, int Option) { + return Show(Msg, Title, Option); + } + /** * Show Default MsgBox + * * @param Msg The Message * @return User Operation */ - public static int Show(String Msg) - { - return Show(Msg, Title, INFORMATION_MESSAGE); - } -} \ No newline at end of file + public static int Show(String Msg) { + return Show(Msg, Title, INFORMATION_MESSAGE); + } +} diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/OS.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/OS.java index d3f8d682e..e11fab392 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/OS.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/OS.java @@ -24,12 +24,12 @@ import org.jackhuang.hellominecraft.HMCLog; * @author huangyuhui */ public enum OS { - + LINUX('/'), WINDOWS('\\'), OSX('/'), UNKOWN('/'); - + public final char fileSeparator; private OS(char fileSeparator) { @@ -39,27 +39,21 @@ public enum OS { public static OS os() { String str; if ((str = System.getProperty("os.name").toLowerCase()) - .contains("win")) { + .contains("win")) return OS.WINDOWS; - } - if (str.contains("mac")) { + if (str.contains("mac")) return OS.OSX; - } - if (str.contains("solaris")) { + if (str.contains("solaris")) return OS.LINUX; - } - if (str.contains("sunos")) { + if (str.contains("sunos")) return OS.LINUX; - } - if (str.contains("linux")) { + if (str.contains("linux")) return OS.LINUX; - } - if (str.contains("unix")) { + if (str.contains("unix")) return OS.LINUX; - } return OS.UNKOWN; } - + /** * @return Free Physical Memory Size (Byte) */ @@ -67,10 +61,10 @@ public enum OS { try { OperatingSystemMXBean o = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); return o.getTotalPhysicalMemorySize(); - } catch(Throwable t) { + } catch (Throwable t) { HMCLog.warn("Failed to get total physical memory size"); return -1; } } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Platform.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Platform.java index ef082e4e2..1ef2f5f30 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Platform.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Platform.java @@ -48,8 +48,8 @@ public enum Platform { }; public abstract String getBit(); - + public static Platform getPlatform() { - return System.getProperty("os.arch").contains("64") ? BIT_64 : BIT_32; + return System.getProperty("os.arch").contains("64") ? BIT_64 : BIT_32; } } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessManager.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessManager.java index 89443735c..5bd091f3f 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessManager.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessManager.java @@ -25,18 +25,17 @@ import java.util.HashSet; public class ProcessManager { private static final HashSet gameProcesses = new HashSet(); - + public void registerProcess(JavaProcess jp) { gameProcesses.add(jp); } - + public void stopAllProcesses() { - for(JavaProcess jp : gameProcesses) { + for (JavaProcess jp : gameProcesses) jp.stop(); - } gameProcesses.clear(); } - + public void onProcessStopped(JavaProcess p) { gameProcesses.remove(p); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessThread.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessThread.java index 341dc86c2..5913e0cb4 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessThread.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/ProcessThread.java @@ -31,7 +31,7 @@ public class ProcessThread extends Thread { JavaProcess p; boolean readError = false, enableReading = true; - + public final EventHandler printlnEvent = new EventHandler<>(this); public final EventHandler stopEvent = new EventHandler<>(this); @@ -49,22 +49,20 @@ public class ProcessThread extends Thread { public void run() { InputStream in = null; BufferedReader br = null; - if (enableReading) { + if (enableReading) in = readError ? p.getRawProcess().getErrorStream() : p.getRawProcess().getInputStream(); - } try { - if (enableReading) { + if (enableReading) try { br = new BufferedReader(new InputStreamReader(in, System.getProperty("sun.jnu.encoding", "UTF-8"))); } catch (UnsupportedEncodingException ex) { HMCLog.warn("Unsupported encoding: " + System.getProperty("sun.jnu.encoding", "UTF-8"), ex); br = new BufferedReader(new InputStreamReader(in)); } - } - + String line; - while (p.isRunning()) { - if (enableReading) { + while (p.isRunning()) + if (enableReading) while ((line = br.readLine()) != null) { printlnEvent.execute(line); if (readError) { @@ -75,14 +73,12 @@ public class ProcessThread extends Thread { p.getStdOutLines().add(line); } } - } else { + else try { Thread.sleep(1); } catch (Exception e) { } - } - } - if (enableReading) { + if (enableReading) while ((line = br.readLine()) != null) { printlnEvent.execute(line); if (readError) { @@ -93,7 +89,6 @@ public class ProcessThread extends Thread { p.getStdOutLines().add(line); } } - } stopEvent.execute(p); } catch (Exception e) { e.printStackTrace(); diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftRemoteVersions.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftRemoteVersions.java index 49d0efade..9c2426e64 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftRemoteVersions.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftRemoteVersions.java @@ -24,12 +24,12 @@ import org.jackhuang.hellominecraft.C; * @author huangyuhui */ public class MinecraftRemoteVersions { - + public ArrayList versions; public MinecraftRemoteLatestVersion latest; - + public static MinecraftRemoteVersions fromJson(String s) { return C.gson.fromJson(s, MinecraftRemoteVersions.class); } - + } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftVersionRequest.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftVersionRequest.java index 5e0f2ec2b..cd84c7e05 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftVersionRequest.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/version/MinecraftVersionRequest.java @@ -22,11 +22,12 @@ import org.jackhuang.hellominecraft.C; * @author huangyuhui */ public class MinecraftVersionRequest { + public static final int Unkown = 0, Invaild = 1, InvaildJar = 2, Modified = 3, OK = 4, NotFound = 5, NotReadable = 6, NotAFile = 7; public int type; public String version; - + public static String getResponse(MinecraftVersionRequest minecraftVersion) { String text = ""; switch (minecraftVersion.type) { diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java index 5ea0eb52a..9c7704215 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java @@ -30,7 +30,7 @@ import org.jackhuang.hellominecraft.utils.Utils; * @author huangyuhui */ public class LogWindow extends javax.swing.JFrame { - + boolean movingEnd; NonFunction listener; NonConsumer terminateGameListener; @@ -40,18 +40,18 @@ public class LogWindow extends javax.swing.JFrame { */ public LogWindow() { initComponents(); - + movingEnd = true; setLocationRelativeTo(null); - - TextComponentOutputStream tc = new TextComponentOutputStream(txtLog); - DoubleOutputStream out = new DoubleOutputStream(tc, System.out); - System.setOut(new LauncherPrintStream(out)); - DoubleOutputStream err = new DoubleOutputStream(tc, System.err); - System.setErr(new LauncherPrintStream(err)); + + TextComponentOutputStream tc = new TextComponentOutputStream(txtLog); + DoubleOutputStream out = new DoubleOutputStream(tc, System.out); + System.setOut(new LauncherPrintStream(out)); + DoubleOutputStream err = new DoubleOutputStream(tc, System.err); + System.setErr(new LauncherPrintStream(err)); } - + public static LogWindow instance = new LogWindow(); /** @@ -206,15 +206,15 @@ public class LogWindow extends javax.swing.JFrame { }//GEN-LAST:event_btnClearActionPerformed private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed - if(listener != null && listener.onDone()) Utils.shutdownForcely(); + if (listener != null && listener.onDone()) Utils.shutdownForcely(); }//GEN-LAST:event_formWindowClosed private void btnCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCopyActionPerformed - Utils.setClipborad(this.txtLog.getText()); + Utils.setClipborad(this.txtLog.getText()); }//GEN-LAST:event_btnCopyActionPerformed private void btnMCBBSActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMCBBSActionPerformed - Utils.openLink(C.URL_PUBLISH); + Utils.openLink(C.URL_PUBLISH); }//GEN-LAST:event_btnMCBBSActionPerformed private void btnTieBaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTieBaActionPerformed @@ -226,7 +226,7 @@ public class LogWindow extends javax.swing.JFrame { }//GEN-LAST:event_btnMCFActionPerformed private void btnTerminateGameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnTerminateGameActionPerformed - if(terminateGameListener != null) + if (terminateGameListener != null) terminateGameListener.onDone(); }//GEN-LAST:event_btnTerminateGameActionPerformed @@ -238,49 +238,49 @@ public class LogWindow extends javax.swing.JFrame { String text = txtLog.getText(); text += status + System.getProperty("line.separator"); txtLog.setText(text); - - if(movingEnd) { + + if (movingEnd) { int position = text.length(); txtLog.setCaretPosition(position); } } - + public void log(String status, Throwable t) { - log(status); - log(StrUtils.getStackTrace(t)); + log(status); + log(StrUtils.getStackTrace(t)); } - + public void setExit(NonFunction exit) { - this.listener = exit; + this.listener = exit; } - + public void setTerminateGame(NonConsumer l) { - this.terminateGameListener = l; + this.terminateGameListener = l; } - + public void clean() { txtLog.setText(""); } - + public boolean getMovingEnd() { return movingEnd; } - + public void setMovingEnd(boolean b) { movingEnd = b; } @Override public void setVisible(boolean b) { - lblCrash.setVisible(false); - btnMCBBS.setVisible(false); - btnTieBa.setVisible(false); - btnMCF.setVisible(false); - super.setVisible(b); + lblCrash.setVisible(false); + btnMCBBS.setVisible(false); + btnTieBa.setVisible(false); + btnMCF.setVisible(false); + super.setVisible(b); } - + public void showAsCrashWindow(boolean out_date) { - if(out_date) { + if (out_date) { lblCrash.setVisible(false); btnMCBBS.setVisible(false); btnTieBa.setVisible(false); @@ -293,10 +293,10 @@ public class LogWindow extends javax.swing.JFrame { btnMCF.setVisible(true); lblCrash.setText(C.i18n("ui.label.crashing")); } - - super.setVisible(true); + + super.setVisible(true); } - + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnClear; private javax.swing.JButton btnClose; diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/Selector.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/Selector.java index f17ae0d11..a782ceb8c 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/Selector.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/Selector.java @@ -18,9 +18,11 @@ package org.jackhuang.hellominecraft.views; /** * The frame given to choose things. + * * @author huangyuhui */ public class Selector extends javax.swing.JDialog { + String[] selList; String msg; /** @@ -39,12 +41,12 @@ public class Selector extends javax.swing.JDialog { initComponents(); setLocationRelativeTo(null); - + this.selList = selList; this.sel = failedToSel; this.msg = msg; jLabel1.setText(msg); - for(String s : selList) + for (String s : selList) jComboBox1.addItem(s); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/TintablePanel.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/TintablePanel.java index 77780b08b..f54bf7841 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/TintablePanel.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/TintablePanel.java @@ -46,9 +46,8 @@ public class TintablePanel extends JPanel { } public void setOverIcon(ImageIcon image) { - if (this.overIcon != null) { + if (this.overIcon != null) remove(this.overIcon); - } this.overIcon = new JLabel(image); this.overIcon.setVisible(false);