From d5fc862f0eba62565dee5b8e511544573c281ec1 Mon Sep 17 00:00:00 2001 From: artdeell Date: Sun, 20 Aug 2023 14:16:49 +0300 Subject: [PATCH] Feat[agent]: modpack version ID fixer --- .../forge_installer/forge_installer.jar | Bin 79680 -> 80814 bytes .../assets/components/forge_installer/version | 2 +- .../pojavlaunch/modloaders/ForgeUtils.java | 6 +++ .../modloaders/modpacks/api/ModLoader.java | 2 +- .../git/artdeell/installer_agent/Agent.java | 29 ++++++++++-- .../installer_agent/ProfileFixer.java | 43 ++++++++++++++++-- 6 files changed, 71 insertions(+), 11 deletions(-) diff --git a/app_pojavlauncher/src/main/assets/components/forge_installer/forge_installer.jar b/app_pojavlauncher/src/main/assets/components/forge_installer/forge_installer.jar index 2e498a39b30888990bf7dfead827eb7da41efdb6..c540bee9c39d85c418898030383676067bbbc39f 100644 GIT binary patch delta 6605 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 delta 5427 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 mSMe*1svwI1 diff --git a/app_pojavlauncher/src/main/assets/components/forge_installer/version b/app_pojavlauncher/src/main/assets/components/forge_installer/version index 825b64780..50f426278 100644 --- a/app_pojavlauncher/src/main/assets/components/forge_installer/version +++ b/app_pojavlauncher/src/main/assets/components/forge_installer/version @@ -1 +1 @@ -1688133008591 \ No newline at end of file +1692525087345 \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeUtils.java index 31420de90..5925d9b4d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/ForgeUtils.java @@ -59,4 +59,10 @@ public class ForgeUtils { " -jar "+modInstallerJar.getAbsolutePath()); intent.putExtra("skipDetectMod", true); } + public static void addAutoInstallArgs(Intent intent, File modInstallerJar, String modpackFixupId) { + intent.putExtra("javaArgs", "-javaagent:"+ Tools.DIR_DATA+"/forge_installer/forge_installer.jar" + + "=\"" + modpackFixupId +"\"" + + " -jar "+modInstallerJar.getAbsolutePath()); + intent.putExtra("skipDetectMod", true); + } } 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 4f847ec05..c47cfd48a 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 @@ -73,7 +73,7 @@ public class ModLoader { Intent baseIntent = new Intent(context, JavaGUILauncherActivity.class); switch (modLoaderType) { case MOD_LOADER_FORGE: - ForgeUtils.addAutoInstallArgs(baseIntent, modInstallerJar, false); + ForgeUtils.addAutoInstallArgs(baseIntent, modInstallerJar, getVersionId()); return baseIntent; case MOD_LOADER_FABRIC: FabricUtils.addAutoInstallArgs(baseIntent, modInstallerJar, minecraftVersion, modLoaderVersion, false, false); diff --git a/forge_installer/src/main/java/git/artdeell/installer_agent/Agent.java b/forge_installer/src/main/java/git/artdeell/installer_agent/Agent.java index dc2cf22c2..53a7361ae 100644 --- a/forge_installer/src/main/java/git/artdeell/installer_agent/Agent.java +++ b/forge_installer/src/main/java/git/artdeell/installer_agent/Agent.java @@ -21,11 +21,13 @@ public class Agent implements AWTEventListener { private boolean forgeWindowHandled = false; private final boolean suppressProfileCreation; private final boolean optiFineInstallation; + private final String modpackFixupId; private final Timer componentTimer = new Timer(); - public Agent(boolean nps, boolean of) { + public Agent(boolean nps, boolean of, String mf) { this.suppressProfileCreation = !nps; this.optiFineInstallation = of; + this.modpackFixupId = mf; } @Override @@ -104,7 +106,7 @@ public class Agent implements AWTEventListener { JOptionPane optionPane = (JOptionPane) components.get(0); if(optionPane.getMessageType() == JOptionPane.INFORMATION_MESSAGE) { // forge doesn't emit information messages for other reasons yet System.out.println("The install was successful!"); - ProfileFixer.reinsertProfile(optiFineInstallation ? "OptiFine" : "forge", suppressProfileCreation); + ProfileFixer.reinsertProfile(optiFineInstallation ? "OptiFine" : "forge", modpackFixupId, suppressProfileCreation); System.exit(0); // again, forge doesn't call exit for some reason, so we do that ourselves here } } @@ -124,13 +126,30 @@ public class Agent implements AWTEventListener { public static void premain(String args, Instrumentation inst) { boolean noProfileSuppression = false; boolean optifine = false; + String modpackFixupId = null; if(args != null ) { - noProfileSuppression = args.contains("NPS"); // No Profile Suppression - optifine = args.contains("OF"); // OptiFine + modpackFixupId = findQuotedString(args); + if(modpackFixupId != null) { + noProfileSuppression = args.contains("NPS") && !modpackFixupId.contains("NPS"); + // No Profile Suppression + optifine = args.contains("OF") && !modpackFixupId.contains("OF"); + // OptiFine + }else { + noProfileSuppression = args.contains("NPS"); // No Profile Suppression + optifine = args.contains("OF"); // OptiFine + } } - Agent agent = new Agent(noProfileSuppression, optifine); + Agent agent = new Agent(noProfileSuppression, optifine, modpackFixupId); Toolkit.getDefaultToolkit() .addAWTEventListener(agent, AWTEvent.WINDOW_EVENT_MASK); } + + private static String findQuotedString(String args) { + int quoteIndex = args.indexOf('"'); + if(quoteIndex == -1) return null; + int nextQuoteIndex = args.indexOf('"', quoteIndex+1); + if(nextQuoteIndex == -1) return null; + return args.substring(quoteIndex+1, nextQuoteIndex); + } } diff --git a/forge_installer/src/main/java/git/artdeell/installer_agent/ProfileFixer.java b/forge_installer/src/main/java/git/artdeell/installer_agent/ProfileFixer.java index da6e72967..5dadb711d 100644 --- a/forge_installer/src/main/java/git/artdeell/installer_agent/ProfileFixer.java +++ b/forge_installer/src/main/java/git/artdeell/installer_agent/ProfileFixer.java @@ -10,6 +10,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.Random; +import java.util.Set; public class ProfileFixer { private static final Random random = new Random(); @@ -22,7 +23,8 @@ public class ProfileFixer { StandardCharsets.UTF_8) ); JSONObject profilesArray = minecraftProfiles.getJSONObject("profiles"); - oldProfile = profilesArray.optJSONObject(profileName, null); + profileName = findProfileName(profileName, profilesArray); + oldProfile = profileName != null ? minecraftProfiles.getJSONObject(profileName) : null; }catch (IOException | JSONException e) { System.out.println("Failed to store Forge profile: "+e); } @@ -31,22 +33,24 @@ public class ProfileFixer { private static String pickProfileName(String profileName) { return profileName+random.nextInt(); } - public static void reinsertProfile(String profileName, boolean suppressProfileCreation) { + public static void reinsertProfile(String profileName, String modpackFixupId, boolean suppressProfileCreation) { try { JSONObject minecraftProfiles = new JSONObject( new String(Files.readAllBytes(profilesPath), StandardCharsets.UTF_8) ); JSONObject profilesArray = minecraftProfiles.getJSONObject("profiles"); + profileName = findProfileName(profileName, profilesArray); + if(modpackFixupId != null) fixupModpackProfile(profileName, modpackFixupId, profilesArray); if(oldProfile != null) { - if(suppressProfileCreation) profilesArray.put("forge", oldProfile); // restore the old profile + if(suppressProfileCreation) profilesArray.put(profileName, oldProfile); // restore the old profile else { String name = pickProfileName(profileName); while(profilesArray.has(name)) name = pickProfileName(profileName); profilesArray.put(name, oldProfile); // restore the old profile under a new name } }else{ - if(suppressProfileCreation) profilesArray.remove("forge"); // remove the new profile + if(suppressProfileCreation) profilesArray.remove(profileName); // remove the new profile // otherwise it wont be removed } minecraftProfiles.put("profiles", profilesArray); @@ -56,4 +60,35 @@ public class ProfileFixer { System.out.println("Failed to restore old Forge profile: "+e); } } + + private static void fixupModpackProfile(String profileId, String expectedVersionId, JSONObject profilesArray) { + System.out.println("Fixing up modpack profile version ID..."); + JSONObject modloaderProfile = profilesArray.optJSONObject(profileId); + if(modloaderProfile == null) { + System.out.println("Failed to find the modloader profile, keys:" + profilesArray.keySet().toString()); + return; + } + String modloaderVersionId = modloaderProfile.optString("lastVersionId"); + if(modloaderVersionId == null) { + System.out.println("Failed to find the modloader profile version, keys:" + modloaderProfile.keySet().toString()); + return; + } + System.out.println("Expected version ID: "+expectedVersionId+" Modloader version ID: "+modloaderVersionId); + if(expectedVersionId.equals(modloaderVersionId)) return; + for(String profileKey : profilesArray.keySet()) { + if(profileKey.equals(profileId)) continue; + JSONObject profile = profilesArray.getJSONObject(profileKey); + if(!expectedVersionId.equals(profile.optString("lastVersionId"))) continue; + profile.put("lastVersionId", modloaderVersionId); + System.out.println("Replacing version ID in profile "+profileKey); + } + } + + private static String findProfileName(String profileId, JSONObject profilesArray) { + Set profiles = profilesArray.keySet(); + for(String profile : profiles) { + if(profile.equalsIgnoreCase(profileId)) return profile; + } + return null; + } }