From eb0bab0b830016ff023f0611bc2aef20493ae3bb Mon Sep 17 00:00:00 2001
From: alexytomi <60690056+alexytomi@users.noreply.github.com>
Date: Tue, 7 Oct 2025 14:27:05 +0800
Subject: [PATCH] fix: 1.6.4 crash
i hate forge
---
.../net/kdt/pojavlaunch/MainActivity.java | 39 +++++++++++--------
.../main/java/net/kdt/pojavlaunch/Tools.java | 6 +++
.../src/main/res/values/strings.xml | 1 +
3 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
index 288812494..7f4c2aa65 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -390,24 +390,29 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
private void runCraft(String versionId, JMinecraftVersionList.Version version) throws Throwable {
String assetVersion;
- if (version.inheritsFrom != null) { // We are almost definitely modded if this runs
- File vanillaJsonFile = new File(Tools.DIR_HOME_VERSION + "/" + version.inheritsFrom + "/" + version.inheritsFrom + ".json");
- JMinecraftVersionList.Version vanillaJson;
- try { // Get the vanilla json from modded instance
- vanillaJson = Tools.GLOBAL_GSON.fromJson(Tools.read(vanillaJsonFile.getAbsolutePath()), JMinecraftVersionList.Version.class);
- } catch (IOException ignored) { // Should never happen, we check for this in MinecraftDownloader().start()
- throw new RuntimeException(getString(R.string.error_vanilla_json_corrupt));
+ try {
+ if (version.inheritsFrom != null) { // We are almost definitely modded if this runs
+ File vanillaJsonFile = new File(Tools.DIR_HOME_VERSION + "/" + version.inheritsFrom + "/" + version.inheritsFrom + ".json");
+ JMinecraftVersionList.Version vanillaJson;
+ try { // Get the vanilla json from modded instance
+ vanillaJson = Tools.GLOBAL_GSON.fromJson(Tools.read(vanillaJsonFile.getAbsolutePath()), JMinecraftVersionList.Version.class);
+ } catch (IOException ignored) { // Should never happen, we check for this in MinecraftDownloader().start()
+ throw new RuntimeException(getString(R.string.error_vanilla_json_corrupt));
+ }
+ // Something went wrong if this is somehow not the case anymore
+ if (!Objects.equals(vanillaJson.assets, vanillaJson.assetIndex.id))
+ Tools.showErrorRemote(new RuntimeException(getString(R.string.error_vanilla_json_corrupt)));
+ assetVersion = vanillaJson.assets;
+ } else {
+ // Else assume we are vanilla
+ if (!Objects.equals(version.assets, version.assetIndex.id))
+ Tools.showErrorRemote(new RuntimeException(getString(R.string.error_vanilla_json_corrupt)));
+ assetVersion = version.assets;
}
- // Something went wrong if this is somehow not the case anymore
- if (!Objects.equals(vanillaJson.assets, vanillaJson.assetIndex.id))
- Tools.showErrorRemote(new RuntimeException(getString(R.string.error_vanilla_json_corrupt)));
- assetVersion = vanillaJson.assets;
- } else {
- // Else assume we are vanilla
- if (!Objects.equals(version.assets, version.assetIndex.id))
- Tools.showErrorRemote(new RuntimeException(getString(R.string.error_vanilla_json_corrupt)));
- assetVersion = version.assets;
- }
+ } catch (RuntimeException ignored){
+ runOnUiThread(() -> Toast.makeText(this, R.string.autorendererselectfailed, Toast.LENGTH_LONG).show());
+ assetVersion = "legacy";
+ } // If this fails.. oh well.
// Autoselect renderer
if (Tools.LOCAL_RENDERER == null) {
// 25w09a is when HolyGL4ES starts showing a black screen upon world load.
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
index 288bbe733..2a4446b07 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
@@ -374,6 +374,12 @@ public final class Tools {
// Legacy Fabric needs this to be first or else it uses the wrong lwjgl
} else javaArgList.add(getLWJGL3ClassPath() + ":" + launchClassPath);
+ // Forge 1.6.4 crash mitigation
+ // https://github.com/MinecraftForge/FML/blob/f1b3381e61fac1a0ae90f521223c6bc613eb4888/common/cpw/mods/fml/common/asm/FMLSanityChecker.java#L192-L208
+ // It for some reason fails certification and crashes because it thinks Minecraft is corrupted.
+ // This also has no loading screen as a result.
+ javaArgList.add("-Dfml.ignoreInvalidMinecraftCertificates=true");
+
javaArgList.add(versionInfo.mainClass);
javaArgList.addAll(Arrays.asList(launchArgs));
// ctx.appendlnToLog("full args: "+javaArgList.toString());
diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml
index 31233fd65..9415f7874 100644
--- a/app_pojavlauncher/src/main/res/values/strings.xml
+++ b/app_pojavlauncher/src/main/res/values/strings.xml
@@ -482,4 +482,5 @@
You are using a version of Legacy4J without the android fixes! You will need to manually enable SDL in the controller settings to get the best experience!
Warning!
Controllable currently has a random chance of crashing on launch. Either keep trying again and hope it launches or use another mod like Controlify.
+ Auto-renderer select failed, defaulting to HolyGL4ES