diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java index 6005a7b67..24536b9b3 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/BMCLAPIDownloadProvider.java @@ -57,7 +57,7 @@ public class BMCLAPIDownloadProvider extends IDownloadProvider { @Override public String getVersionsListDownloadURL() { - return "http://bmclapi2.bangbang93.com/versions/versions.json"; + return "http://bmclapi2.bangbang93.com/mc/game/version_manifest.json"; } @Override @@ -66,13 +66,17 @@ public class BMCLAPIDownloadProvider extends IDownloadProvider { } @Override - public String getParsedLibraryDownloadURL(String str) { - return str == null ? null : str.replace("http://files.minecraftforge.net/maven", "http://bmclapi2.bangbang93.com/maven"); + public String getParsedDownloadURL(String str) { + return str == null ? null + : str.replace("https://launchermeta.mojang.com", "http://bmclapi2.bangbang93.com") + .replace("https://launcher.mojang.com", "http://bmclapi2.bangbang93.com") + .replace("https://libraries.minecraft.net", "http://bmclapi2.bangbang93.com/libraries") + .replace("http://files.minecraftforge.net/maven", "http://bmclapi2.bangbang93.com/maven"); } @Override public boolean isAllowedToUseSelfURL() { - return false; + return true; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/CurseDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/CurseDownloadProvider.java index 0f7d03545..1d8f773a1 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/CurseDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/CurseDownloadProvider.java @@ -24,7 +24,7 @@ package org.jackhuang.hellominecraft.launcher.core.download; public class CurseDownloadProvider extends MojangDownloadProvider { @Override - public String getParsedLibraryDownloadURL(String str) { + public String getParsedDownloadURL(String str) { return str == null ? null : str.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven/"); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/IDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/IDownloadProvider.java index 67d48349e..b6142969d 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/IDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/IDownloadProvider.java @@ -55,7 +55,15 @@ public abstract class IDownloadProvider { public abstract String getAssetsDownloadURL(); - public abstract String getParsedLibraryDownloadURL(String str); + /** + * For example, minecraft.json/assetIndex/url or + * minecraft.json/downloads/client/url + * + * @param str baseURL + * + * @return parsedURL + */ + public abstract String getParsedDownloadURL(String str); public abstract boolean isAllowedToUseSelfURL(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java index dd1b76d0d..fac9b24e4 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftDownloadService.java @@ -21,6 +21,7 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftDownloadServ import com.google.gson.JsonSyntaxException; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -31,11 +32,9 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService; import org.jackhuang.hellominecraft.launcher.core.version.GameDownloadInfo; import org.jackhuang.hellominecraft.launcher.core.version.IMinecraftLibrary; import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion; -import org.jackhuang.hellominecraft.util.tasks.TaskWindow; import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask; import org.jackhuang.hellominecraft.util.func.Function; import org.jackhuang.hellominecraft.util.system.FileUtils; -import org.jackhuang.hellominecraft.util.tasks.DoingDoneListener; import org.jackhuang.hellominecraft.util.tasks.Task; import org.jackhuang.hellominecraft.util.tasks.TaskInfo; @@ -60,7 +59,7 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { if (l.allow()) { File ff = l.getFilePath(service.baseDirectory()); if (!ff.exists()) { - String libURL = service.getDownloadType().getProvider().getParsedLibraryDownloadURL(l.getDownloadInfo().getUrl(service.getDownloadType())); + String libURL = l.getDownloadInfo().getUrl(service.getDownloadType()); if (libURL != null) downloadLibraries.add(new DownloadLibraryJob(l, libURL, ff)); } @@ -71,58 +70,31 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { @Override public Task downloadMinecraft(String id) { return new TaskInfo("Download Minecraft") { + @Override + public Collection getDependTasks() { + return Arrays.asList(downloadMinecraftVersionJson(id)); + } + @Override public void executeTask() throws Throwable { - List versions = MinecraftRemoteVersions.getRemoteVersions(service.getDownloadType()).justDo(); - MinecraftRemoteVersion currentVersion = null; - for (MinecraftRemoteVersion v : versions) - if (id.equals(v.id)) { - currentVersion = v; - break; - } - if (currentVersion == null) - throw new RuntimeException("Cannot find version: " + id + " in remote repository."); - String jsonURL = currentVersion.getUrl(service.getDownloadType()); File vpath = new File(service.baseDirectory(), "versions/" + id); - File mvt = new File(vpath, id + ".json"); + if (!areDependTasksSucceeded) { + FileUtils.deleteDirectory(vpath); + throw new RuntimeException("Cannot continue because of download failing."); + } File mvj = new File(vpath, id + ".jar"); - if (!vpath.exists() && !vpath.mkdirs()) - HMCLog.warn("Failed to make directories: " + vpath); - if (mvt.exists() && !mvt.delete()) - HMCLog.warn("Failed to delete " + mvt); if (mvj.exists() && !mvj.delete()) HMCLog.warn("Failed to delete " + mvj); + try { + MinecraftVersion mv = C.GSON.fromJson(FileUtils.readFileToStringQuietly(new File(vpath, id + ".json")), MinecraftVersion.class); + if (mv == null) + throw new JsonSyntaxException("incorrect version"); - Task t = new FileDownloadTask(jsonURL, mvt).setTag(id + ".json"); - t.addTaskListener(new DoingDoneListener() { - @Override - public void onDone(Task k, Collection taskCollection) { - MinecraftVersion mv; - try { - mv = C.GSON.fromJson(FileUtils.readFileToStringQuietly(mvt), MinecraftVersion.class); - if (mv == null) - throw new JsonSyntaxException("incorrect version"); - } catch (JsonSyntaxException ex) { - HMCLog.err("Failed to parse minecraft version json.", ex); - onFailed(k); - return; - } - GameDownloadInfo i = mv.getClientDownloadInfo(); - taskCollection.add(new FileDownloadTask(i.getUrl(service.getDownloadType()), mvj, i.sha1) - .setFailedCallbackReturnsNewURL(new DownloadTypeSwitcher(id + "/" + id + ".jar")).setTag(id + ".jar")); - } - - @Override - public void onDoing(Task k, Collection taskCollection) { - } - - @Override - public void onFailed(Task k) { - FileUtils.deleteDirectoryQuietly(vpath); - } - }); - - afters.add(t); + afters.add(downloadMinecraftJar(mv, mvj)); + } catch (JsonSyntaxException ex) { + HMCLog.err("Failed to parse minecraft version json.", ex); + FileUtils.deleteDirectory(vpath); + } } Collection afters = new HashSet<>(); @@ -134,34 +106,6 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { }; } - @Override - public boolean downloadMinecraftJar(String id) { - String vurl = service.getDownloadType().getProvider().getVersionsDownloadURL() + id + "/"; - File vpath = new File(service.baseDirectory(), "versions/" + id); - File mvv = new File(vpath, id + ".jar"), moved = null; - if (mvv.exists()) { - moved = new File(vpath, id + "-renamed.jar"); - if (!mvv.renameTo(moved)) - HMCLog.warn("Failed to rename " + mvv + " to " + moved); - } - File mvt = new File(vpath, id + ".jar"); - if (!vpath.exists() && !vpath.mkdirs()) - HMCLog.warn("Failed to make version folder " + vpath); - if (TaskWindow.factory() - .append(new FileDownloadTask(vurl + id + ".jar", mvt).setFailedCallbackReturnsNewURL(new DownloadTypeSwitcher(id + "/" + id + ".jar")).setTag(id + ".jar")) - .create()) { - if (moved != null && moved.exists() && !moved.delete()) - HMCLog.warn("Failed to delete " + moved); - return true; - } else { - if (mvt.exists() && !mvt.delete()) - HMCLog.warn("Failed to delete game jar " + mvt); - if (moved != null && moved.exists() && !moved.renameTo(mvt)) - HMCLog.warn("Failed to rename " + moved + " to " + mvt); - return false; - } - } - private static class DownloadTypeSwitcher implements Function { String suffix; @@ -178,37 +122,43 @@ public class MinecraftDownloadService extends IMinecraftDownloadService { } @Override - public Task downloadMinecraftJarTo(MinecraftVersion mv, File mvt) { - String jar = mv.jar == null ? mv.id : mv.jar; + public Task downloadMinecraftJar(MinecraftVersion mv, File mvj) { GameDownloadInfo i = mv.getClientDownloadInfo(); - return new FileDownloadTask(i.getUrl(service.getDownloadType(), true), mvt, i.sha1).setTag(jar + ".jar"); + return new FileDownloadTask(i.getUrl(service.getDownloadType()), mvj, i.sha1) + .setFailedCallbackReturnsNewURL(new DownloadTypeSwitcher(mv.id + "/" + mv.id + ".jar")).setTag(mv.id + ".jar"); } @Override - public boolean downloadMinecraftVersionJson(String id) { - String vurl = service.getDownloadType().getProvider().getVersionsDownloadURL() + id + "/"; - File vpath = new File(service.baseDirectory(), "versions/" + id); - File mvv = new File(vpath, id + ".json"), moved = null; - if (mvv.exists()) { - moved = new File(vpath, id + "-renamed.json"); - if (!mvv.renameTo(moved)) - HMCLog.warn("Failed to rename " + mvv + " to " + moved); - } - File mvt = new File(vpath, id + ".json"); - if (!vpath.exists() && !vpath.mkdirs()) - HMCLog.warn("Failed to make version folder " + vpath); - if (TaskWindow.factory() - .append(new FileDownloadTask(vurl + id + ".json", mvt).setTag(id + ".json")) - .create()) { - if (moved != null && moved.exists() && !moved.delete()) - HMCLog.warn("Failed to delete " + moved); - return true; - } else { - if (mvt.exists() && !mvt.delete()) - HMCLog.warn("Failed to delete minecraft version json" + mvt); - if (moved != null && moved.exists() && !moved.renameTo(mvt)) - HMCLog.warn("Failed to rename " + moved + " to " + mvt); - return false; - } + public Task downloadMinecraftVersionJson(String id) { + return new TaskInfo("Download Minecraft Json") { + @Override + public void executeTask() throws Throwable { + List versions = MinecraftRemoteVersions.getRemoteVersions(service.getDownloadType()).justDo(); + MinecraftRemoteVersion currentVersion = null; + for (MinecraftRemoteVersion v : versions) + if (id.equals(v.id)) { + currentVersion = v; + break; + } + if (currentVersion == null) + throw new RuntimeException("Cannot find version: " + id + " in remote repository."); + String jsonURL = currentVersion.getUrl(service.getDownloadType()); + File vpath = new File(service.baseDirectory(), "versions/" + id); + File mvt = new File(vpath, id + ".json"); + if (!vpath.exists() && !vpath.mkdirs()) + HMCLog.warn("Failed to make directories: " + vpath); + if (mvt.exists() && !mvt.delete()) + HMCLog.warn("Failed to delete " + mvt); + + afters.add(new FileDownloadTask(jsonURL, mvt).setTag(id + ".json")); + } + + Collection afters = new HashSet<>(); + + @Override + public Collection getAfterTasks() { + return afters; + } + }; } } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MojangDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MojangDownloadProvider.java index dedf229f5..815bbe4c9 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MojangDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/MojangDownloadProvider.java @@ -73,7 +73,7 @@ public class MojangDownloadProvider extends IDownloadProvider { } @Override - public String getParsedLibraryDownloadURL(String str) { + public String getParsedDownloadURL(String str) { if (str == null) return null; else if (str.contains("scala-swing") || str.contains("scala-xml") || str.contains("scala-parser-combinators")) @@ -86,5 +86,4 @@ public class MojangDownloadProvider extends IDownloadProvider { else return str; } - } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/RapidDataDownloadProvider.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/RapidDataDownloadProvider.java index 7b84eca2b..eb22ccf74 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/RapidDataDownloadProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/download/RapidDataDownloadProvider.java @@ -49,7 +49,7 @@ public class RapidDataDownloadProvider extends MojangDownloadProvider { } @Override - public String getParsedLibraryDownloadURL(String str) { + public String getParsedDownloadURL(String str) { return str == null ? null : str.replace("http://files.minecraftforge.net/maven", "http://mirrors.rapiddata.org/forge/maven"); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java index 890d9dfd8..93e5f1031 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java @@ -64,7 +64,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "forge-installer.jar"); if (v.installer != null) TaskWindow.factory() - .append(new FileDownloadTask(service.getDownloadType().getProvider().getParsedLibraryDownloadURL(v.installer), filepath).setTag("forge")) + .append(new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge")) .append(new ForgeInstaller(service, filepath)) .create(); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java index 259b27361..800874e7a 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java @@ -51,7 +51,7 @@ public class MinecraftForgeVersionList extends InstallerVersionList { public void refreshList(String[] needed) throws Exception { if (root != null) return; - String s = NetUtils.get(DownloadType.getSuggestedDownloadType().getProvider().getParsedLibraryDownloadURL(C.URL_FORGE_LIST)); + String s = NetUtils.get(DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(C.URL_FORGE_LIST)); root = C.GSON.fromJson(s, MinecraftForgeVersionRoot.class); @@ -70,7 +70,7 @@ public class MinecraftForgeVersionList extends InstallerVersionList { if (!StrUtils.isBlank(v.branch)) ver = ver + "-" + v.branch; String filename = root.artifact + "-" + ver + "-" + f[1] + "." + f[0]; - String url = DownloadType.getSuggestedDownloadType().getProvider().getParsedLibraryDownloadURL(root.webpath + ver + "/" + filename); + String url = DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(root.webpath + ver + "/" + filename); switch (f[1]) { case "installer": iv.installer = url; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java index 4d32fe671..8a3fc4386 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java @@ -168,7 +168,7 @@ public final class ModpackManager { if (mv.jar == null) throw new FileNotFoundException(C.i18n("modpack.incorrect_format.no_jar")); - c.add(service.download().downloadMinecraftJarTo(mv, new File(nowFile, id + ".jar"))); + c.add(service.download().downloadMinecraftJar(mv, new File(nowFile, id + ".jar"))); mv.jar = null; FileUtils.writeStringToFile(json, C.GSON.toJson(mv)); if (!json.renameTo(new File(nowFile, id + ".json"))) diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/service/IMinecraftDownloadService.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/service/IMinecraftDownloadService.java index 089caf773..87d65406f 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/service/IMinecraftDownloadService.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/service/IMinecraftDownloadService.java @@ -22,9 +22,7 @@ import java.util.List; import org.jackhuang.hellominecraft.launcher.core.GameException; import org.jackhuang.hellominecraft.launcher.core.download.DownloadLibraryJob; import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion; -import org.jackhuang.hellominecraft.util.OverridableSwingWorker; import org.jackhuang.hellominecraft.util.tasks.Task; -import org.jackhuang.hellominecraft.launcher.core.download.MinecraftRemoteVersion; /** * @@ -38,11 +36,9 @@ public abstract class IMinecraftDownloadService extends IMinecraftBasicService { public abstract Task downloadMinecraft(String id); - public abstract boolean downloadMinecraftJar(String id); + public abstract Task downloadMinecraftJar(MinecraftVersion mv, File f); - public abstract Task downloadMinecraftJarTo(MinecraftVersion mv, File f); - - public abstract boolean downloadMinecraftVersionJson(String id); + public abstract Task downloadMinecraftVersionJson(String id); /** * Get the libraries that need to download. diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/AssetIndexDownloadInfo.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/AssetIndexDownloadInfo.java index 636dc7232..751d6ab59 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/AssetIndexDownloadInfo.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/AssetIndexDownloadInfo.java @@ -36,11 +36,8 @@ public class AssetIndexDownloadInfo extends GameDownloadInfo { } @Override - public String getUrl(DownloadType dt, boolean allowSelf) { - if (url != null && dt.getProvider().isAllowedToUseSelfURL()) - return url; - else - return dt.getProvider().getIndexesDownloadURL() + id + ".json"; + public String getCustomizedURL(DownloadType dt) { + return dt.getProvider().getIndexesDownloadURL() + id + ".json"; } public String getId() { diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/GameDownloadInfo.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/GameDownloadInfo.java index b35a60d80..2398eb3b3 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/GameDownloadInfo.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/core/version/GameDownloadInfo.java @@ -55,9 +55,13 @@ public class GameDownloadInfo implements Cloneable { */ public String getUrl(DownloadType dt, boolean allowSelf) { if (url != null && allowSelf) - return url; + return dt.getProvider().getParsedDownloadURL(url); else - return dt.getProvider().getVersionsDownloadURL() + id + "/" + id + ".jar"; + return getCustomizedURL(dt); + } + + protected String getCustomizedURL(DownloadType dt) { + return dt.getProvider().getVersionsDownloadURL() + id + "/" + id + ".jar"; } @Override diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form index ef5a7e51b..6dd26e971 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.form @@ -388,43 +388,40 @@ - - - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + - - - + + + + + + + + + diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java index d2fe9b4c5..c6d01b2d9 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java @@ -1376,10 +1376,12 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget final Runnable onLoadingProfiles = this::loadProfiles; private void loadProfiles() { + isLoading = true; DefaultComboBoxModel model = new DefaultComboBoxModel(); for (Profile s : Settings.getProfilesFiltered()) model.addElement(s.getName()); cboProfiles.setModel(model); + isLoading = false; } final Consumer onRefreshedVersions = t -> { @@ -1425,12 +1427,15 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget t.selectedVersionChangedEvent.register(selectedVersionChangedEvent); txtGameDir.setText(t.getGameDir()); + + isLoading = true; DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(t.getName())) { model.setSelectedItem(t.getName()); break; } + isLoading = false; }; // } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java index 446803f25..6e8a4479c 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java @@ -472,10 +472,12 @@ public class MainPagePanel extends AnimatedPanel { final Runnable onLoadingProfiles = this::loadProfiles; private void loadProfiles() { + isLoading = true; DefaultComboBoxModel model = new DefaultComboBoxModel(); for (Profile s : Settings.getProfilesFiltered()) model.addElement(s.getName()); cboProfiles.setModel(model); + isLoading = false; } final Consumer onRefreshedVersions = t -> { @@ -529,11 +531,13 @@ public class MainPagePanel extends AnimatedPanel { t.selectedVersionChangedEvent.register(versionChanged); t.launcher().launchingStateChanged.register(launchingStateChanged); + isLoading = true; DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(t.getName())) { model.setSelectedItem(t.getName()); break; } + isLoading = false; }; } diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java new file mode 100644 index 000000000..5b3a76fb0 --- /dev/null +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java @@ -0,0 +1,29 @@ +/* + * 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 + * (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. If not, see {http://www.gnu.org/licenses/}. + */ +package org.jackhuang.hellominecraft.util.tasks; + +/** + * + * @author huangyuhui + */ +public class NoShownTaskException extends RuntimeException { + + public NoShownTaskException(String msg) { + super(msg); + } +}