From 9114ddacf65ac3cf995273be9554f500dd64e1b6 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Sun, 30 Jan 2022 16:44:49 +0700 Subject: [PATCH] Changes - Java architecture check is now performed in the Runtime Manager dialog. - Required Java version is now stated when launching 1.17+ without it installed. - [Mod installer] Java version is now checked before displaying the file picker. Java 8 is now automatically selected. - [Mod installer] Brought back "Launch with custom arguments", can be accessed by long-pressing the "Install .jar" button. --- .../kdt/pojavlaunch/BaseLauncherActivity.java | 9 ++++++++ .../net/kdt/pojavlaunch/BaseMainActivity.java | 2 +- .../pojavlaunch/JavaGUILauncherActivity.java | 17 +++++++-------- .../kdt/pojavlaunch/multirt/MultiRTUtils.java | 9 ++++++++ .../multirt/RTRecyclerViewAdapter.java | 9 ++++++-- .../tasks/MinecraftDownloaderTask.java | 2 +- .../net/kdt/pojavlaunch/utils/JREUtils.java | 21 +++++++------------ .../src/main/res/values/strings.xml | 5 +++-- 8 files changed, 45 insertions(+), 29 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseLauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseLauncherActivity.java index 668050da2..b891d7227 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseLauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseLauncherActivity.java @@ -65,6 +65,10 @@ public abstract class BaseLauncherActivity extends BaseActivity { public static final int RUN_MOD_INSTALLER = 2050; private void installMod(boolean customJavaArgs) { + if (MultiRTUtils.getExactJREName(8) == null) { + Toast.makeText(this, R.string.multirt_nojava8rt, Toast.LENGTH_LONG).show(); + return; + } if (customJavaArgs) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.alerttitle_installmod); @@ -149,6 +153,11 @@ public abstract class BaseLauncherActivity extends BaseActivity { mRuntimeConfigDialog = new MultiRTConfigDialog(); mRuntimeConfigDialog.prepare(this); + ((Button)findViewById(R.id.installJarButton)).setOnLongClickListener(view -> { + installMod(true); + return true; + }); + //TODO ADD CRASH CHECK AND FOCUS System.out.println("call to onResumeFragments; E"); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index 030089eb1..ea46a30bb 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -183,7 +183,7 @@ public class BaseMainActivity extends BaseActivity { checkLWJGL3Installed(); JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(); - JREUtils.checkJavaArchitecture(this, JREUtils.jreReleaseList.get("OS_ARCH")); + Logger.getInstance().appendToLog("Architecture: " + Architecture.archAsString(Tools.DEVICE_ARCHITECTURE)); checkJavaArgsIsLaunchable(JREUtils.jreReleaseList.get("JAVA_VERSION")); // appendlnToLog("Info: Custom Java arguments: \"" + LauncherPreferences.PREF_CUSTOM_JAVA_ARGS + "\""); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java index fdeefa882..ca77a0e0f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JavaGUILauncherActivity.java @@ -67,8 +67,15 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc Logger.getInstance().reset(); try { + JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(LauncherPreferences.PREF_DEFAULT_RUNTIME); + if (JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")) { + MultiRTUtils.setRuntimeNamed(this,LauncherPreferences.PREF_DEFAULT_RUNTIME); + } else { + MultiRTUtils.setRuntimeNamed(this,MultiRTUtils.getExactJREName(8)); + JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(); + } + loggerView = findViewById(R.id.launcherLoggerView); - MultiRTUtils.setRuntimeNamed(this,LauncherPreferences.PREF_DEFAULT_RUNTIME); gestureDetector = new GestureDetector(this, new SingleTapConfirm()); findViewById(R.id.installmod_mouse_pri).setOnTouchListener(this); @@ -278,14 +285,6 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc public int launchJavaRuntime(File modFile, String javaArgs) { JREUtils.redirectAndPrintJRELog(this); try { - JREUtils.jreReleaseList = JREUtils.readJREReleaseProperties(); - - // Fail immediately when Java 8 is not selected - // TODO: auto override Java 8 if installed - if (!JREUtils.jreReleaseList.get("JAVA_VERSION").equals("1.8.0")) { - throw new RuntimeException("Cannot use the mod installer. In order to use the mod installer, you need to install Java 8 and specify it in the Preferences menu."); - } - List javaArgList = new ArrayList(); // Enable Caciocavallo diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/MultiRTUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/MultiRTUtils.java index a5f717ca5..3cf4ab32c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/MultiRTUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/MultiRTUtils.java @@ -63,6 +63,15 @@ public class MultiRTUtils { return ret; } + public static String getExactJREName(int majorVersion) { + List runtimes = getRuntimes(); + for(Runtime r : runtimes) { + if(r.javaVersion == majorVersion) { + return r.name; + } + } + return null; + } public static String getNearestJREName(int majorVersion) { List runtimes = getRuntimes(); int diff_factor = Integer.MAX_VALUE; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/RTRecyclerViewAdapter.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/RTRecyclerViewAdapter.java index e268f773a..db65ee55c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/RTRecyclerViewAdapter.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/multirt/RTRecyclerViewAdapter.java @@ -14,6 +14,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.RecyclerView; +import net.kdt.pojavlaunch.Architecture; import net.kdt.pojavlaunch.R; import net.kdt.pojavlaunch.Tools; import net.kdt.pojavlaunch.prefs.LauncherPreferences; @@ -71,7 +72,7 @@ public class RTRecyclerViewAdapter extends RecyclerView.Adapter{ AlertDialog.Builder bldr = new AlertDialog.Builder(mActivity); bldr.setTitle(R.string.global_error); - bldr.setMessage(R.string.multirt_nocompartiblert); + bldr.setMessage(mActivity.getString(R.string.multirt_nocompartiblert, verInfo.javaVersion.majorVersion)); bldr.setPositiveButton(android.R.string.ok,(dialog, which)->{ dialog.dismiss(); }); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 1e1dfcf7c..285d76c5d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -35,19 +35,6 @@ public class JREUtils { private static String nativeLibDir; public static Map jreReleaseList; - /** - * Checks if the java architecture is correct for the device architecture. - * @param activity Some context to load resources from - * @param jreArch The java architecture to compare as a String. - */ - public static void checkJavaArchitecture(Activity activity, String jreArch) { - Logger.getInstance().appendToLog("Architecture: " + archAsString(Tools.DEVICE_ARCHITECTURE)); - if(Tools.DEVICE_ARCHITECTURE == Architecture.archAsInt(jreArch)) return; - - Logger.getInstance().appendToLog("Architecture " + archAsString(Tools.DEVICE_ARCHITECTURE) + " is incompatible with Java Runtime " + jreArch); - Tools.dialogOnUiThread(activity, "", activity.getString(R.string.mcn_check_fail_incompatiblearch, archAsString(Tools.DEVICE_ARCHITECTURE), jreArch)); - } - public static String findInLdLibPath(String libName) { if(Os.getenv("LD_LIBRARY_PATH")==null) { try { @@ -104,8 +91,14 @@ public class JREUtils { } public static Map readJREReleaseProperties() throws IOException { + return readJREReleaseProperties(Tools.DIR_HOME_JRE); + } + public static Map readJREReleaseProperties(String name) throws IOException { Map jreReleaseMap = new ArrayMap<>(); - BufferedReader jreReleaseReader = new BufferedReader(new FileReader(Tools.DIR_HOME_JRE + "/release")); + if (!name.contains("/")) { + name = Tools.MULTIRT_HOME + "/" + name; + } + BufferedReader jreReleaseReader = new BufferedReader(new FileReader(name + "/release")); String currLine; while ((currLine = jreReleaseReader.readLine()) != null) { if (!currLine.isEmpty() || currLine.contains("=")) { diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 79949acaa..7d548bb95 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -131,7 +131,6 @@ Exit Are you sure want to force close? LWJGL3 was not installed! - Architecture %1$s is incompatible with Java Runtime %2$s. Vulkan Zink renderer is not supported on this device! @@ -238,6 +237,7 @@ Controls how much memory is given to Minecraft %s (Java %d) Corrupted Java Runtime + Incompatible architecture: %s Java VMs Add new Import new Java VM @@ -247,7 +247,8 @@ Set default Default You must have at least one Java Runtime installed - Can\'t find any compartible Java Runtime + Can\'t find any compartible Java Runtime. This version requires Java %d or newer. + Can\'t find Java 8. In order to use this option, you need to install Java 8. Minecraft 21w10a+ requires the OpenGL 3.2 core profile. Sadly, GL4ES wrapper doesn\'t fully support it at the moment, but there are some additional resources you can install to run these versions. Press OK to confirm installation, and press Cancel to abort launch. Play anyway