From 9c9440dfbff010aa8bb812e68f26683011b2fb3c Mon Sep 17 00:00:00 2001
From: alexytomi <60690056+alexytomi@users.noreply.github.com>
Date: Wed, 30 Jul 2025 23:55:44 +0800
Subject: [PATCH] fix(Renderer/Default): Check asset ID instead of mcver
This is now based on the assetIndex.id that mojangs jsons have. I am
assuming inheritedFrom to always be present, if it isn't it'll treat it
like vanilla but it should still work due to the insertSafety setting
that field
This fixes the code breaking on versions with letters in them
Please finally don't break
---
.../net/kdt/pojavlaunch/MainActivity.java | 51 +++++++++++++++++--
.../src/main/res/values/strings.xml | 1 +
2 files changed, 47 insertions(+), 5 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 5b63a8173..757c7579b 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -73,6 +73,8 @@ import org.lwjgl.glfw.CallbackBridge;
import java.io.File;
import java.io.IOException;
+import java.util.Objects;
+
public class MainActivity extends BaseActivity implements ControlButtonMenuListener, EditorExitable, ServiceConnection {
public static volatile ClipboardManager GLOBAL_CLIPBOARD;
public static final String INTENT_MINECRAFT_VERSION = "intent_version";
@@ -356,11 +358,50 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
}
private void runCraft(String versionId, JMinecraftVersionList.Version version) throws Throwable {
- if(Tools.LOCAL_RENDERER == null) {
- Integer iSelectedMcVer = Tools.mcVersiontoInt(Tools.getSelectedVanillaMcVer());
- if (iSelectedMcVer >= 1021005) {
- Tools.LOCAL_RENDERER = "opengles_mobileglues";
- } else Tools.LOCAL_RENDERER = "opengles2";
+ // Autoselect renderer
+ if (Tools.LOCAL_RENDERER == null) {
+ 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));
+ }
+ // 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;
+ }
+ // 25w09a is when HolyGL4ES starts showing a black screen upon world load.
+ // There is no way to consistently check for that without breaking mod loaders
+ // for old versions like legacy fabric so we start from 25w07a instead
+
+ // 25w07a assets and assetIndex.id is set to 23, 25w08a and 25w09a is 24.
+
+ // 1.19.3 snapshots and all future versions restarted assets and assetsIndex.id
+ // to 1 and started counting up from there
+
+ // Previous versions had "1.19" and "1.18" and such, with April Fools versions
+ // being even more inconsistent like "3D Shareware v1.34" for the 2019 April Fools
+ // or 1.RV-Pre1 for 2016, thankfully now they don't seem to do that anymore and just
+ // use the incrementing system they now have
+
+ // I could probably read the manifest itself then check which position the `id` field is
+ // and count from there since its ordered latest to oldest but that uses way more code
+ // for basically 3 peoples benefit
+ try {
+ int assetID = Integer.parseInt(assetVersion);
+ // Check if below 25w08a
+ Tools.LOCAL_RENDERER = (assetID <= 23) ? "opengles2" : "opengles_mobileglues";
+ // Then assume 1.19.2 and below
+ } catch (NumberFormatException e) { Tools.LOCAL_RENDERER = "opengles2"; }
}
if(!Tools.checkRendererCompatible(this, Tools.LOCAL_RENDERER)) {
Tools.RenderersList renderersList = Tools.getCompatibleRenderers(this);
diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml
index 5b830b622..04a41f500 100644
--- a/app_pojavlauncher/src/main/res/values/strings.xml
+++ b/app_pojavlauncher/src/main/res/values/strings.xml
@@ -469,4 +469,5 @@
Force enable TouchController integration, even if mod file is not found.
TouchController vibrate length
Set the length of the vibration when using TouchController.
+ Vanilla json seems to be corrupt. Please send a bug report on github or discord.