From d8b1fbf96882e334ce3dbe4fecf08095745a5eb2 Mon Sep 17 00:00:00 2001 From: artdeell Date: Sat, 19 Aug 2023 22:18:30 +0300 Subject: [PATCH] Fix[forge]: consult the version list for the full loader version --- .../modloaders/ForgeDownloadTask.java | 75 ++++++++++++++----- .../modloaders/modpacks/api/ModLoader.java | 2 +- .../src/main/res/values/strings.xml | 1 + 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeDownloadTask.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeDownloadTask.java index 4bb177888..7a6150529 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeDownloadTask.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeDownloadTask.java @@ -10,30 +10,29 @@ import net.kdt.pojavlaunch.utils.DownloadUtils; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.List; public class ForgeDownloadTask implements Runnable, Tools.DownloaderFeedback { - private final String mForgeUrl; - private final String mForgeVersion; + private String mDownloadUrl; + private String mFullVersion; + private String mLoaderVersion; + private String mGameVersion; private final ModloaderDownloadListener mListener; public ForgeDownloadTask(ModloaderDownloadListener listener, String forgeVersion) { this.mListener = listener; - this.mForgeUrl = ForgeUtils.getInstallerUrl(forgeVersion); - this.mForgeVersion = forgeVersion; + this.mDownloadUrl = ForgeUtils.getInstallerUrl(forgeVersion); + this.mFullVersion = forgeVersion; + } + + public ForgeDownloadTask(ModloaderDownloadListener listener, String gameVersion, String loaderVersion) { + this.mListener = listener; + this.mLoaderVersion = loaderVersion; + this.mGameVersion = gameVersion; } @Override public void run() { - ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, 0, R.string.forge_dl_progress, mForgeVersion); - try { - File destinationFile = new File(Tools.DIR_CACHE, "forge-installer.jar"); - byte[] buffer = new byte[8192]; - DownloadUtils.downloadFileMonitored(mForgeUrl, destinationFile, buffer, this); - mListener.onDownloadFinished(destinationFile); - }catch (IOException e) { - if(e instanceof FileNotFoundException) { - mListener.onDataNotAvailable(); - }else{ - mListener.onDownloadError(e); - } + if(determineDownloadUrl()) { + downloadForge(); } ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, -1, -1); } @@ -41,7 +40,49 @@ public class ForgeDownloadTask implements Runnable, Tools.DownloaderFeedback { @Override public void updateProgress(int curr, int max) { int progress100 = (int)(((float)curr / (float)max)*100f); - ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, progress100, R.string.forge_dl_progress, mForgeVersion); + ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, progress100, R.string.forge_dl_progress, mFullVersion); + } + + private void downloadForge() { + ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, 0, R.string.forge_dl_progress, mFullVersion); + try { + File destinationFile = new File(Tools.DIR_CACHE, "forge-installer.jar"); + byte[] buffer = new byte[8192]; + DownloadUtils.downloadFileMonitored(mDownloadUrl, destinationFile, buffer, this); + mListener.onDownloadFinished(destinationFile); + }catch (FileNotFoundException e) { + mListener.onDataNotAvailable(); + } catch (IOException e) { + mListener.onDownloadError(e); + } + } + + public boolean determineDownloadUrl() { + if(mDownloadUrl != null && mFullVersion != null) return true; + ProgressKeeper.submitProgress(ProgressLayout.INSTALL_MODPACK, 0, R.string.forge_dl_searching); + try { + if(!findVersion()) { + mListener.onDataNotAvailable(); + return false; + } + }catch (IOException e) { + mListener.onDownloadError(e); + return false; + } + return true; + } + + public boolean findVersion() throws IOException { + List forgeVersions = ForgeUtils.downloadForgeVersions(); + if(forgeVersions == null) return false; + String versionStart = mGameVersion+"-"+mLoaderVersion; + for(String versionName : forgeVersions) { + if(!versionName.startsWith(versionStart)) continue; + mFullVersion = versionName; + mDownloadUrl = ForgeUtils.getInstallerUrl(mFullVersion); + return true; + } + return false; } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModLoader.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModLoader.java index d7040ab92..4f847ec05 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModLoader.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModLoader.java @@ -51,7 +51,7 @@ public class ModLoader { public Runnable getDownloadTask(ModloaderDownloadListener listener) { switch (modLoaderType) { case MOD_LOADER_FORGE: - return new ForgeDownloadTask(listener, minecraftVersion+"-"+modLoaderVersion); + return new ForgeDownloadTask(listener, minecraftVersion, modLoaderVersion); case MOD_LOADER_FABRIC: return new FabricDownloadTask(listener); case MOD_LOADER_QUILT: diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index c76402552..f9b821395 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -384,6 +384,7 @@ Forces the Minecraft render thread to run on the core with the highest max frequency Select a version Downloading installer for %s + Searching for Forge version number Failed to load the version list! Sorry, but this version of Forge does not have an installer, which is not yet supported. Select Forge version