From 92ca49b9bfa5dc0c9d577eab54e63fecbb1b86fe Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Sun, 13 Dec 2020 17:50:37 +0700 Subject: [PATCH] [Forge 1.13+ installer] Added --- .../ForgeInstallerHeadless/README.md | 3 + .../forge-installer-headless-1.0.1.jar | Bin 0 -> 11295 bytes .../pojavlaunch/JavaGUILauncherActivity.java | 7 +- .../kdt/pojavlaunch/PojavLoginActivity.java | 9 ++- .../main/java/net/kdt/pojavlaunch/Tools.java | 23 +++---- .../installers/InstallerDetector.java | 9 ++- .../Legacy1p12p2ForgeInstaller.java | 60 ++++++++++++++++++ .../installers/NewForgeInstaller.java | 51 ++------------- 8 files changed, 97 insertions(+), 65 deletions(-) create mode 100644 app/src/main/assets/components/ForgeInstallerHeadless/README.md create mode 100644 app/src/main/assets/components/ForgeInstallerHeadless/forge-installer-headless-1.0.1.jar create mode 100644 app/src/main/java/net/kdt/pojavlaunch/installers/Legacy1p12p2ForgeInstaller.java diff --git a/app/src/main/assets/components/ForgeInstallerHeadless/README.md b/app/src/main/assets/components/ForgeInstallerHeadless/README.md new file mode 100644 index 000000000..6de0d0432 --- /dev/null +++ b/app/src/main/assets/components/ForgeInstallerHeadless/README.md @@ -0,0 +1,3 @@ +From https://github.com/xfl03/ForgeInstallerHeadless +No changes on source code. + diff --git a/app/src/main/assets/components/ForgeInstallerHeadless/forge-installer-headless-1.0.1.jar b/app/src/main/assets/components/ForgeInstallerHeadless/forge-installer-headless-1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..0449086d0bc9427fe136adda35418adcbaadbc4a GIT binary patch literal 11295 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 Vop1e1_KOJN@_R}$|5_gq{|BFeXaoQN literal 0 HcmV?d00001 diff --git a/app/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java index ed5ae0cf2..948c11a96 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java @@ -163,8 +163,11 @@ public class JavaGUILauncherActivity extends LoggableActivity { if (InstallerDetector.isForgeLegacy(installer)) { appendlnToLog("Detected Forge Installer 1.12.1 or below!"); return new LegacyForgeInstaller(installer).install(this); - } else if (InstallerDetector.isForgeNew(installer)) { - appendlnToLog("Detected Forge Installer 1.12.2 or above!"); + } else if (InstallerDetector.isForge1p12p2(installer)) { + appendlnToLog("Detected Forge Installer 1.12.2!"); + return new Legacy1p12p2ForgeInstaller(installer).install(this); + } else if (InstallerDetector.isForge1p12p2(installer)) { + appendlnToLog("Detected Forge Installer 1.13 or above!"); return new NewForgeInstaller(installer).install(this); } else if (InstallerDetector.isFabric(installer)) { appendlnToLog("Detected Fabric Installer!"); diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index 77a5dbddc..3b83da05c 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -363,18 +363,18 @@ public class PojavLoginActivity extends BaseActivity mkdirs(Tools.mpProfiles); mkdirs(Tools.MAIN_PATH); + mkdirs(Tools.MAIN_PATH + "/config"); mkdirs(Tools.MAIN_PATH + "/lwjgl3"); mkdirs(Tools.MAIN_PATH + "/mods"); File forgeSplashFile = new File(Tools.MAIN_PATH, "config/splash.properties"); - forgeSplashFile.mkdir(); String forgeSplashContent = "enabled=true"; try { if (forgeSplashFile.exists()) { forgeSplashContent = Tools.read(forgeSplashFile.toString()); } if (forgeSplashContent.contains("enabled=true")) { - Tools.write(forgeSplashFile.toString(), + Tools.write(forgeSplashFile.getAbsolutePath(), forgeSplashContent.replace("enabled=true", "enabled=false")); } } catch (IOException e) { @@ -384,8 +384,9 @@ public class PojavLoginActivity extends BaseActivity mkdirs(Tools.CTRLMAP_PATH); try { - AssetManager am = this.getAssets(); new CustomControls(this).save(Tools.CTRLDEF_FILE); + + Tools.copyAssetFile(this, "components/ForgeInstallerHeadless/forge-installer-headless.jar", Tools.MAIN_PATH + "/config", "forge-installer-headless.jar", true); Tools.copyAssetFile(this, "options.txt", Tools.MAIN_PATH, false); @@ -393,6 +394,8 @@ public class PojavLoginActivity extends BaseActivity // TODO: Remove after implement. Tools.copyAssetFile(this, "launcher_profiles.json", Tools.MAIN_PATH, false); + AssetManager am = this.getAssets(); + InputStream is = am.open("components/lwjgl3/version"); if(!new File(Tools.MAIN_PATH + "/lwjgl3/version").exists()) { Log.i("LWJGL3Prep","Pack was installed manually, or does not exist, unpacking new..."); diff --git a/app/src/main/java/net/kdt/pojavlaunch/Tools.java b/app/src/main/java/net/kdt/pojavlaunch/Tools.java index 5a6c37d27..54c14d473 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -312,24 +312,19 @@ public final class Tools return (scaledDp * currentDisplayMetrics.density); } - public static void copyAssetFile(Context ctx, String fileName, String output, boolean overwrite) throws Exception - { + public static void copyAssetFile(Context ctx, String fileName, String output, boolean overwrite) throws IOException { copyAssetFile(ctx, fileName, output, fileName, overwrite); } - public static void copyAssetFile(Context ctx, String fileName, String output, String outputName, boolean overwrite) throws Exception + public static void copyAssetFile(Context ctx, String fileName, String output, String outputName, boolean overwrite) throws IOException { - try { - File file = new File(output); - if(!file.exists()) { - file.mkdirs(); - } - File file2 = new File(output, outputName); - if(!file2.exists() || overwrite){ - write(file2.getAbsolutePath(), loadFromAssetToByte(ctx, fileName)); - } - } catch (Throwable th) { - throw new RuntimeException("Unable to copy " + fileName + " to " + output + "/" + outputName, th); + File file = new File(output); + if(!file.exists()) { + file.mkdirs(); + } + File file2 = new File(output, outputName); + if(!file2.exists() || overwrite){ + write(file2.getAbsolutePath(), loadFromAssetToByte(ctx, fileName)); } } /* diff --git a/app/src/main/java/net/kdt/pojavlaunch/installers/InstallerDetector.java b/app/src/main/java/net/kdt/pojavlaunch/installers/InstallerDetector.java index 789004d74..98af7ac90 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/installers/InstallerDetector.java +++ b/app/src/main/java/net/kdt/pojavlaunch/installers/InstallerDetector.java @@ -16,7 +16,14 @@ public class InstallerDetector return profile != null && profile.versionInfo != null; } - // Forge New: for 1.12.2 and above + // Forge for 1.12.2 only + public static boolean isForge1p12p2(BaseInstaller installer) throws IOException, JsonSyntaxException { + ForgeInstallProfile profile = LegacyForgeInstaller.readInstallProfile(installer); + // Forge 1.12.2 install_profile.json has same format as Forge 1.13+ + return isForgeNew(installer) && profile.minecraft.equals("1.12.2"); + } + + // Forge New: for 1.13 and above public static boolean isForgeNew(BaseInstaller installer) throws IOException, JsonSyntaxException { ForgeInstallProfile profile = LegacyForgeInstaller.readInstallProfile(installer); return profile != null && profile.version != null; diff --git a/app/src/main/java/net/kdt/pojavlaunch/installers/Legacy1p12p2ForgeInstaller.java b/app/src/main/java/net/kdt/pojavlaunch/installers/Legacy1p12p2ForgeInstaller.java new file mode 100644 index 000000000..319b89ba1 --- /dev/null +++ b/app/src/main/java/net/kdt/pojavlaunch/installers/Legacy1p12p2ForgeInstaller.java @@ -0,0 +1,60 @@ +package net.kdt.pojavlaunch.installers; + +import android.content.*; +import java.io.*; +import java.util.jar.*; +import net.kdt.pojavlaunch.*; +import java.nio.charset.*; +import net.kdt.pojavlaunch.value.*; +import org.apache.commons.io.*; +import com.google.gson.*; +import java.util.zip.*; + +public class Legacy1p12p2ForgeInstaller extends BaseInstaller { + public Legacy1p12p2ForgeInstaller(BaseInstaller i) { + from(i); + } + + @Override + public int install(JavaGUILauncherActivity ctx) throws IOException { + String target; + + ctx.appendlnToLog("Reading install_profile.json"); + ForgeInstallProfile profile = readInstallProfile(this); + + // Write the json file + File versionFile = new File(Tools.versnDir, profile.version); + versionFile.mkdir(); + target = versionFile.getAbsolutePath() + "/" + profile.version + ".json"; + ctx.appendlnToLog("Writing " + target + " from " + profile.json); + ZipEntry versionJson = mJarFile.getEntry(profile.json==null ? "version.json" : profile.json.substring(profile.json.indexOf("/")+1,profile.json.length())); + Tools.write( + target, + Tools.convertStream(mJarFile.getInputStream(versionJson)) + ); + + // Forge 1.12.2+ installer does not include universal, so download + // Users are already go throught Forge ads to download installer, so not again. + String[] libInfos = profile.path.split(":"); + File libraryFile = new File(Tools.libraries, Tools.artifactToPath(libInfos[0], libInfos[1], libInfos[2])); + libraryFile.getParentFile().mkdirs(); + target = libraryFile.getAbsolutePath(); + String downloadPath = "https://files.minecraftforge.net/maven/" + profile.path.replace(":", "/").replace("net.minecraftforge","net/minecraftforge") + "/forge-" + libInfos[2] + "-universal.jar"; + ctx.appendlnToLog("Downloading " + target); + Tools.downloadFile(downloadPath, target); + + mJarFile.close(); + + return 0; + } + + public static ForgeInstallProfile readInstallProfile(BaseInstaller base) throws IOException, JsonSyntaxException { + ZipEntry entry = base.mJarFile.getEntry("install_profile.json"); + return entry == null ? null : Tools.GLOBAL_GSON.fromJson( + Tools.convertStream( + base.mJarFile.getInputStream(entry) + ), + ForgeInstallProfile.class + ); + } +} diff --git a/app/src/main/java/net/kdt/pojavlaunch/installers/NewForgeInstaller.java b/app/src/main/java/net/kdt/pojavlaunch/installers/NewForgeInstaller.java index 429c1e5ec..a4e56f909 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/installers/NewForgeInstaller.java +++ b/app/src/main/java/net/kdt/pojavlaunch/installers/NewForgeInstaller.java @@ -1,60 +1,21 @@ package net.kdt.pojavlaunch.installers; -import android.content.*; import java.io.*; -import java.util.jar.*; import net.kdt.pojavlaunch.*; -import java.nio.charset.*; -import net.kdt.pojavlaunch.value.*; -import org.apache.commons.io.*; -import com.google.gson.*; -import java.util.zip.*; -public class NewForgeInstaller extends BaseInstaller { +public class NewForgeInstaller extends BaseInstaller + { public NewForgeInstaller(BaseInstaller i) { from(i); } @Override public int install(JavaGUILauncherActivity ctx) throws IOException { - String target; - - ctx.appendlnToLog("Reading install_profile.json"); - ForgeInstallProfile profile = readInstallProfile(this); - - // Write the json file - File versionFile = new File(Tools.versnDir, profile.version); - versionFile.mkdir(); - target = versionFile.getAbsolutePath() + "/" + profile.version + ".json"; - ctx.appendlnToLog("Writing " + target + " from " + profile.json); - ZipEntry versionJson = mJarFile.getEntry(profile.json==null ? "version.json" : profile.json.substring(profile.json.indexOf("/")+1,profile.json.length())); - Tools.write( - target, - Tools.convertStream(mJarFile.getInputStream(versionJson)) - ); - - // Forge 1.12.2+ installer does not include universal, so download - // Users are already go throught Forge ads to download installer, so not again. - String[] libInfos = profile.path.split(":"); - File libraryFile = new File(Tools.libraries, Tools.artifactToPath(libInfos[0], libInfos[1], libInfos[2])); - libraryFile.getParentFile().mkdirs(); - target = libraryFile.getAbsolutePath(); - String downloadPath = "https://files.minecraftforge.net/maven/" + profile.path.replace(":", "/").replace("net.minecraftforge","net/minecraftforge") + "/forge-" + libInfos[2] + "-universal.jar"; - ctx.appendlnToLog("Downloading " + target); - Tools.downloadFile(downloadPath, target); - + // Unused ZipFile mJarFile.close(); - - return 0; - } - public static ForgeInstallProfile readInstallProfile(BaseInstaller base) throws IOException, JsonSyntaxException { - ZipEntry entry = base.mJarFile.getEntry("install_profile.json"); - return entry == null ? null : Tools.GLOBAL_GSON.fromJson( - Tools.convertStream( - base.mJarFile.getInputStream(entry) - ), - ForgeInstallProfile.class - ); + ctx.appendlnToLog("Launching JVM"); + return ctx.launchJavaRuntime(null, + "-cp " + Tools.MAIN_PATH + "/config/forge-installer-headless.jar:" + mFile.getAbsolutePath() + " --installClient ."); } }