From 5f78f2725a79beb7383d4febef862abfc31bd453 Mon Sep 17 00:00:00 2001 From: huangyuhui Date: Wed, 30 Dec 2015 18:51:38 +0800 Subject: [PATCH] fix some bugs --- .../launch/AbstractMinecraftLoader.java | 15 ++++++-- .../launcher/launch/GameLauncher.java | 24 +++++++++---- .../launcher/launch/IMinecraftLoader.java | 5 ++- .../launcher/launch/IMinecraftProvider.java | 29 +++++++--------- .../launcher/launch/MinecraftLoader.java | 7 ++-- .../launcher/settings/Profile.java | 14 +------- .../installers/InstallerVersionList.java | 34 +++++++++++++++++-- .../forge/MinecraftForgeVersionList.java | 4 +-- .../liteloader/LiteLoaderVersionList.java | 4 +-- .../bmcl/OptiFineBMCLVersionList.java | 6 ++-- .../optifine/vanilla/OptiFineVersionList.java | 8 ++--- .../launcher/version/MinecraftModService.java | 9 +++-- .../version/MinecraftVersionManager.java | 25 ++++++-------- .../hellominecraft/views/LogWindow.form | 2 +- .../hellominecraft/views/LogWindow.java | 10 +++--- 15 files changed, 113 insertions(+), 83 deletions(-) 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 3da01a2ac..a67d928dc 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -28,6 +28,7 @@ import org.jackhuang.hellominecraft.launcher.Launcher; import org.jackhuang.hellominecraft.launcher.utils.auth.UserProfileProvider; import org.jackhuang.hellominecraft.launcher.settings.Profile; import org.jackhuang.hellominecraft.launcher.settings.Settings; +import org.jackhuang.hellominecraft.launcher.version.MinecraftVersion; import org.jackhuang.hellominecraft.utils.system.JdkVersion; import org.jackhuang.hellominecraft.utils.MathUtils; import org.jackhuang.hellominecraft.utils.MessageBox; @@ -46,6 +47,7 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { protected UserProfileProvider lr; protected File gameDir; protected IMinecraftProvider provider; + protected final MinecraftVersion version; public AbstractMinecraftLoader(Profile ver, IMinecraftProvider provider, UserProfileProvider lr) { this.lr = lr; @@ -53,6 +55,12 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { v = ver; this.provider = provider; gameDir = v.getCanonicalGameDirFile(); + version = provider.getSelectedVersion().resolve(provider); + } + + @Override + public MinecraftVersion getMinecraftVersion() { + return version; } public void makeHeadCommand(List res) { @@ -126,7 +134,7 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { res.add(a); } - res.add("-Djava.library.path=" + provider.getDecompressNativesToLocation().getPath()); + res.add("-Djava.library.path=" + provider.getDecompressNativesToLocation(version).getPath()); res.add("-Dfml.ignoreInvalidMinecraftCertificates=true"); res.add("-Dfml.ignorePatchDiscrepancies=true"); @@ -160,7 +168,8 @@ public abstract class AbstractMinecraftLoader implements IMinecraftLoader { } String serverIp = v.getServerIp(); - if (lr.getServer() != null) serverIp = lr.getServer().addr; + if (lr.getServer() != null) + serverIp = lr.getServer().addr; if (StrUtils.isNotBlank(serverIp)) { String[] args = serverIp.split(":"); res.add("--server"); 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 e241f5044..254604cd3 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java @@ -31,7 +31,6 @@ import org.jackhuang.hellominecraft.launcher.utils.auth.IAuthenticator; import org.jackhuang.hellominecraft.launcher.utils.auth.LoginInfo; import org.jackhuang.hellominecraft.launcher.utils.auth.UserProfileProvider; import org.jackhuang.hellominecraft.launcher.settings.Profile; -import org.jackhuang.hellominecraft.launcher.utils.auth.AuthenticationException; import org.jackhuang.hellominecraft.utils.system.FileUtils; import org.jackhuang.hellominecraft.utils.system.IOUtils; import org.jackhuang.hellominecraft.utils.system.JavaProcess; @@ -90,9 +89,13 @@ public class GameLauncher { HMCLog.err("Failed to get minecraft loader", e); failEvent.execute(C.i18n("launch.circular_dependency_versions")); return null; + } catch (Exception e) { + failEvent.execute(C.i18n("launch.failed")); + HMCLog.err("Failed to get minecraft loader", e); + return null; } - File file = provider.getDecompressNativesToLocation(); + File file = provider.getDecompressNativesToLocation(loader.getMinecraftVersion()); if (file != null) FileUtils.cleanDirectoryQuietly(file); @@ -103,11 +106,20 @@ public class GameLauncher { } HMCLog.log("Unpacking natives..."); - if (!decompressNativesEvent.execute(provider.getDecompressLibraries())) { + if (!decompressNativesEvent.execute(provider.getDecompressLibraries(loader.getMinecraftVersion()))) { failEvent.execute(C.i18n("launch.failed")); return null; } - successEvent.execute(loader.makeLaunchingCommand()); + + List lst = null; + try { + lst = loader.makeLaunchingCommand(); + } catch (Exception e) { + failEvent.execute(C.i18n("launch.failed")); + HMCLog.err("Failed to launch game", e); + return null; + } + successEvent.execute(lst); return loader; } @@ -134,7 +146,7 @@ public class GameLauncher { if (get == null || get.getSelectedMinecraftVersion() == null || StrUtils.isBlank(get.getCanonicalGameDir())) throw new Error("Fucking bug!"); builder.directory(provider.getRunDirectory(get.getSelectedMinecraftVersion().id)) - .environment().put("APPDATA", get.getCanonicalGameDir()); + .environment().put("APPDATA", get.getCanonicalGameDir()); JavaProcess jp = new JavaProcess(str, builder.start(), PROCESS_MANAGER); launchEvent.execute(jp); } catch (Exception e) { @@ -147,7 +159,7 @@ public class GameLauncher { * According to the name... * * @param launcherName the name of launch bat/sh - * @param str launch command + * @param str launch command * * @return launcher location * 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 5f3a492e3..e48cae266 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftLoader.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -18,6 +18,7 @@ package org.jackhuang.hellominecraft.launcher.launch; import java.util.List; +import org.jackhuang.hellominecraft.launcher.version.MinecraftVersion; /** * @@ -25,5 +26,7 @@ import java.util.List; */ public interface IMinecraftLoader { + MinecraftVersion getMinecraftVersion(); + 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 d9ae4e9ff..f03e2cb62 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/IMinecraftProvider.java @@ -53,7 +53,7 @@ public abstract class IMinecraftProvider { public abstract File getRunDirectory(String id); public File getRunDirectory(String id, String subFolder) { - return new File(getRunDirectory(getSelectedMinecraftVersion().id), subFolder); + return new File(getRunDirectory(getSelectedVersion().id), subFolder); } public abstract void open(String version, String folder); @@ -71,9 +71,14 @@ public abstract class IMinecraftProvider { */ public abstract File getResourcePacks(); - public abstract GameLauncher.DecompressLibraryJob getDecompressLibraries(); + /** + * + * @param v should be resolved + * @return libraries of resolved minecraft version v. + */ + public abstract GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v); - public abstract File getDecompressNativesToLocation(); + public abstract File getDecompressNativesToLocation(MinecraftVersion v); /** * @return the Minecraft jar of selected version. @@ -101,7 +106,7 @@ public abstract class IMinecraftProvider { * Rename version * * @param from The old name - * @param to The new name + * @param to The new name * * @return Is the action successful? */ @@ -151,18 +156,10 @@ public abstract class IMinecraftProvider { public abstract MinecraftVersion getVersionById(String id); public MinecraftVersion getSelectedVersion() { - return profile.getSelectedMinecraftVersion(); - } - - public MinecraftVersion getSelectedMinecraftVersion() { - if (StrUtils.isBlank(profile.getSelectedMinecraftVersionName())) { - MinecraftVersion v = getOneVersion(); - if (v == null) - return null; - profile.setSelectedMinecraftVersion(v.id); - return v; - } - MinecraftVersion v = getVersionById(profile.getSelectedMinecraftVersionName()); + String versionName = profile.getSelectedMinecraftVersionName(); + MinecraftVersion v = null; + if (StrUtils.isNotBlank(versionName)) + v = getVersionById(versionName); if (v == null) v = getOneVersion(); if (v != null) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftLoader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftLoader.java index 052a7621b..c1c3f8855 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/MinecraftLoader.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -33,7 +33,6 @@ import org.jackhuang.hellominecraft.launcher.utils.assets.IAssetsHandler; import org.jackhuang.hellominecraft.launcher.utils.download.DownloadType; import org.jackhuang.hellominecraft.utils.system.OS; import org.jackhuang.hellominecraft.launcher.version.MinecraftLibrary; -import org.jackhuang.hellominecraft.launcher.version.MinecraftVersion; import org.jackhuang.hellominecraft.tasks.TaskWindow; import org.jackhuang.hellominecraft.utils.system.FileUtils; import org.jackhuang.hellominecraft.utils.MessageBox; @@ -44,13 +43,11 @@ import org.jackhuang.hellominecraft.utils.MessageBox; */ public class MinecraftLoader extends AbstractMinecraftLoader { - private final MinecraftVersion version; DownloadType dt; String text; public MinecraftLoader(Profile ver, IMinecraftProvider provider, UserProfileProvider lr) throws IllegalStateException { super(ver, provider, lr); - version = ver.getSelectedMinecraftVersion().resolve(provider); } @Override @@ -61,7 +58,7 @@ public class MinecraftLoader extends AbstractMinecraftLoader { if (l.allow() && !l.isRequiredToUnzip()) library += l.getFilePath(gameDir).getAbsolutePath() + File.pathSeparator; } - library += IOUtils.tryGetCanonicalFilePath(provider.getMinecraftJar()) + File.pathSeparator; + library += IOUtils.tryGetCanonicalFilePath(version.getJar(provider.getBaseFolder())) + File.pathSeparator; library = library.substring(0, library.length() - File.pathSeparator.length()); if (v.isCanceledWrapper()) res.add("-cp"); 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 e73b2f907..0ead37d07 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/settings/Profile.java @@ -111,19 +111,7 @@ public final class Profile { } public MinecraftVersion getSelectedMinecraftVersion() { - if (StrUtils.isBlank(selectedMinecraftVersion)) { - MinecraftVersion v = getMinecraftProvider().getOneVersion(); - if (v == null) - return null; - setSelectedMinecraftVersion(v.id); - return v; - } - MinecraftVersion v = getMinecraftProvider().getVersionById(selectedMinecraftVersion); - if (v == null) - v = getMinecraftProvider().getOneVersion(); - if (v != null) - setSelectedMinecraftVersion(v.id); - return v; + return getMinecraftProvider().getSelectedVersion(); } public transient final EventHandler selectedVersionChangedEvent = new EventHandler<>(this); 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 9db222ef7..fee90fc3d 100755 --- 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 @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -17,6 +17,8 @@ */ package org.jackhuang.hellominecraft.launcher.utils.installers; +import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; import org.jackhuang.hellominecraft.utils.functions.Consumer; @@ -32,13 +34,39 @@ public abstract class InstallerVersionList implements Consumer { * * @param versions Minecraft versions you need to refresh * - * @throws java.lang.Exception + * @throws java.lang.Exception including network exceptions, IO exceptions. */ public abstract void refreshList(String[] versions) throws Exception; + /** + * Installer name. + * + * @return installer name. + */ public abstract String getName(); - public abstract List getVersions(String mcVersion); + /** + * Get installers you want. + * + * @param mcVersion the installers to this Minecraft version. + * @return cached result. + */ + protected abstract List getVersionsImpl(String mcVersion); + + /** + * Get installers you want, please cache this method's result to save time. + * + * @param mcVersion the installers to this Minecraft version. + * @return a copy of the cached data to prevent + * ConcurrentModificationException. + */ + public List getVersions(String mcVersion) { + List a = getVersionsImpl(mcVersion); + if (a == null) + return null; + else + return new ArrayList<>(a); + } public static class InstallerVersion implements Comparable { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/MinecraftForgeVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/MinecraftForgeVersionList.java index 8754e8347..ee5b3bc94 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/MinecraftForgeVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/forge/MinecraftForgeVersionList.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -97,7 +97,7 @@ public class MinecraftForgeVersionList extends InstallerVersionList { } @Override - public List getVersions(String mcVersion) { + public List getVersionsImpl(String mcVersion) { if (versions == null || versionMap == null) return null; if (StrUtils.isBlank(mcVersion)) 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 5a2ca3d29..756c6882d 100755 --- 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 @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -83,7 +83,7 @@ public class LiteLoaderVersionList extends InstallerVersionList { } @Override - public List getVersions(String mcVersion) { + public List getVersionsImpl(String mcVersion) { if (versions == null || versionMap == null) return null; if (StrUtils.isBlank(mcVersion)) 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 1c32f34db..04aac2ddf 100755 --- 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 @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -60,7 +60,7 @@ public class OptiFineBMCLVersionList extends InstallerVersionList { if (s == null) return; root = C.gson.fromJson(s, new TypeToken>() { - }.getType()); + }.getType()); for (OptiFineVersion v : root) { v.mirror = v.mirror.replace("http://optifine.net/http://optifine.net/", "http://optifine.net/"); @@ -83,7 +83,7 @@ public class OptiFineBMCLVersionList extends InstallerVersionList { } @Override - public List getVersions(String mcVersion) { + public List getVersionsImpl(String mcVersion) { if (versions == null || versionMap == null) return null; if (StrUtils.isBlank(mcVersion)) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineVersionList.java index eeb340cdb..d3f628e76 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/utils/installers/optifine/vanilla/OptiFineVersionList.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -17,8 +17,8 @@ */ package org.jackhuang.hellominecraft.launcher.utils.installers.optifine.vanilla; +import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.StringBufferInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -71,7 +71,7 @@ public class OptiFineVersionList extends InstallerVersionList { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); - Document doc = db.parse(new StringBufferInputStream(content)); + Document doc = db.parse(new ByteArrayInputStream(content.getBytes())); Element r = doc.getDocumentElement(); NodeList tables = r.getElementsByTagName("table"); for (int i = 0; i < tables.getLength(); i++) { @@ -121,7 +121,7 @@ public class OptiFineVersionList extends InstallerVersionList { } @Override - public List getVersions(String mcVersion) { + public List getVersionsImpl(String mcVersion) { if (versions == null || versionMap == null) return null; if (StrUtils.isBlank(mcVersion)) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftModService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftModService.java index f2cb25c77..99a526f0e 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftModService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftModService.java @@ -21,7 +21,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import org.jackhuang.hellominecraft.HMCLog; @@ -56,9 +55,9 @@ public class MinecraftModService extends IMinecraftModService { @Override public List recacheMods() { - if (mgr.getSelectedMinecraftVersion() == null) + if (mgr.getSelectedVersion() == null) return modCache = new ArrayList<>(); - File modsFolder = mgr.getRunDirectory(mgr.getSelectedMinecraftVersion().id, "mods"); + File modsFolder = mgr.getRunDirectory(mgr.getSelectedVersion().id, "mods"); ArrayList mods = new ArrayList<>(); File[] fs = modsFolder.listFiles(); if (fs != null) @@ -84,11 +83,11 @@ public class MinecraftModService extends IMinecraftModService { @Override public boolean addMod(File f) { try { - if (mgr.getSelectedMinecraftVersion() == null) + if (mgr.getSelectedVersion() == null) return false; if (!ModInfo.isFileMod(f)) return false; - File modsFolder = mgr.getRunDirectory(mgr.getSelectedMinecraftVersion().id, "mods"); + File modsFolder = mgr.getRunDirectory(mgr.getSelectedVersion().id, "mods"); if (modsFolder == null) return false; modsFolder.mkdirs(); 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 dd2cc6e1f..ec3b8e7bd 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/version/MinecraftVersionManager.java @@ -196,10 +196,10 @@ public 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; } } @@ -209,13 +209,9 @@ public class MinecraftVersionManager extends IMinecraftProvider { } @Override - public GameLauncher.DecompressLibraryJob getDecompressLibraries() { - MinecraftVersion v = getSelectedMinecraftVersion(); - if (v == null) - return null; - v = v.resolve(this); + public GameLauncher.DecompressLibraryJob getDecompressLibraries(MinecraftVersion v) { if (v.libraries == null) - return null; + throw new IllegalStateException("Wrong format: minecraft.json"); ArrayList unzippings = new ArrayList<>(); ArrayList extractRules = new ArrayList<>(); for (IMinecraftLibrary l : v.libraries) { @@ -225,23 +221,22 @@ public class MinecraftVersionManager extends IMinecraftProvider { extractRules.add(l.getDecompressExtractRules()); } } - return new GameLauncher.DecompressLibraryJob(unzippings.toArray(new File[0]), extractRules.toArray(new String[0][]), getDecompressNativesToLocation()); + return new GameLauncher.DecompressLibraryJob(unzippings.toArray(new File[0]), extractRules.toArray(new String[0][]), getDecompressNativesToLocation(v)); } @Override - public File getDecompressNativesToLocation() { - MinecraftVersion v = profile.getSelectedMinecraftVersion(); + public File getDecompressNativesToLocation(MinecraftVersion v) { return v == null ? null : v.getNatives(profile.getCanonicalGameDirFile()); } @Override public File getMinecraftJar() { - return profile.getSelectedMinecraftVersion().getJar(baseFolder); + return getSelectedVersion().getJar(baseFolder); } @Override public IMinecraftLoader provideMinecraftLoader(UserProfileProvider p) - throws IllegalStateException { + throws IllegalStateException { return new MinecraftLoader(profile, this, p); } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.form b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.form index 6a903e52d..b2c5c5c87 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.form +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.form @@ -113,7 +113,7 @@ - + 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 5e95ab75c..96e270c4d 100755 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/views/LogWindow.java @@ -1,7 +1,7 @@ /* * Hello Minecraft! Launcher. * Copyright (C) 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 3 of the License, or @@ -108,7 +108,7 @@ public class LogWindow extends javax.swing.JFrame { } }); - lblCrash.setText(C.I18N.getString("ui.label.crashing")); // NOI18N + lblCrash.setText(C.i18n("ui.label.crashing")); // NOI18N btnMCBBS.setText("MCBBS"); btnMCBBS.addActionListener(new java.awt.event.ActionListener() { @@ -200,8 +200,10 @@ public class LogWindow extends javax.swing.JFrame { private void btnCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCloseActionPerformed boolean flag = false; for (Frame f : Frame.getFrames()) { - if (f == this) continue; - if (f.isVisible()) flag = true; + if (f == this) + continue; + if (f.isVisible()) + flag = true; } if (flag) this.dispose();