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 81a6f147a..a87316069 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -104,13 +104,14 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (LauncherPreferences.PREF_ENABLE_TOUCHCONTROLLER) {
+ minecraftProfile = LauncherProfiles.getCurrentProfile();
+
+ String gameDirPath = Tools.getGameDirPath(minecraftProfile).getAbsolutePath();
+ MCOptionUtils.load(gameDirPath);
+ if (Tools.hasTouchController(new File(gameDirPath)) || LauncherPreferences.PREF_FORCE_ENABLE_TOUCHCONTROLLER) {
TouchControllerUtils.initialize(this);
}
- minecraftProfile = LauncherProfiles.getCurrentProfile();
- MCOptionUtils.load(Tools.getGameDirPath(minecraftProfile).getAbsolutePath());
-
Intent gameServiceIntent = new Intent(this, GameService.class);
// Start the service a bit early
ContextCompat.startForegroundService(this, gameServiceIntent);
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 a5f876aff..82d101fc9 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java
@@ -227,6 +227,27 @@ public final class Tools {
return false;
}
+ /**
+ * Search for TouchController mod to automatically enable TouchController mod support.
+ *
+ * @param gameDir current game directory
+ * @return whether TouchController is found
+ */
+ public static boolean hasTouchController(File gameDir) {
+ File modsDir = new File(gameDir, "mods");
+ File[] mods = modsDir.listFiles(file -> file.isFile() && file.getName().endsWith(".jar"));
+ if (mods == null) {
+ return false;
+ }
+ for (File file : mods) {
+ String name = file.getName().toLowerCase(Locale.ROOT);
+ if (name.contains("touchcontroller")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Initialize OpenGL and do checks to see if the GPU of the device is affected by the render
* distance issue.
diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java
index e6379f865..d6dfc112b 100644
--- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java
+++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java
@@ -70,7 +70,7 @@ public class LauncherPreferences {
public static String PREF_DOWNLOAD_SOURCE = "default";
public static boolean PREF_SKIP_NOTIFICATION_PERMISSION_CHECK = false;
public static boolean PREF_VSYNC_IN_ZINK = true;
- public static boolean PREF_ENABLE_TOUCHCONTROLLER = false;
+ public static boolean PREF_FORCE_ENABLE_TOUCHCONTROLLER = false;
public static int PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = 100;
@@ -114,7 +114,7 @@ public class LauncherPreferences {
PREF_VERIFY_MANIFEST = DEFAULT_PREF.getBoolean("verifyManifest", true);
PREF_SKIP_NOTIFICATION_PERMISSION_CHECK = DEFAULT_PREF.getBoolean(PREF_KEY_SKIP_NOTIFICATION_CHECK, false);
PREF_VSYNC_IN_ZINK = DEFAULT_PREF.getBoolean("vsync_in_zink", true);
- PREF_ENABLE_TOUCHCONTROLLER = DEFAULT_PREF.getBoolean("enableTouchController", false);
+ PREF_FORCE_ENABLE_TOUCHCONTROLLER = DEFAULT_PREF.getBoolean("forceEnableTouchController", false);
PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = DEFAULT_PREF.getInt("touchControllerVibrateLength", 100);
String argLwjglLibname = "-Dorg.lwjgl.opengl.libname=";
diff --git a/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml b/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml
index a61926cc6..c422d6ccb 100644
--- a/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml
+++ b/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml
@@ -401,8 +401,8 @@
OpenGL 报错设置
TouchController 设置
- 启用 TouchController
- 启用 TouchController 集成。
+ 强制启用 TouchController
+ 启用 TouchController 集成,即使没有找到模组文件。
TouchController 震动长度
设置使用 TouchController 时的震动长度。
diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml
index bbe48eb6f..874252e46 100644
--- a/app_pojavlauncher/src/main/res/values/strings.xml
+++ b/app_pojavlauncher/src/main/res/values/strings.xml
@@ -458,8 +458,8 @@
Sorry, but this version of NeoForge does not have an installer, which is not yet supported.
TouchController Settings
- Enable TouchController
- Enable TouchController integration.
+ Force enable TouchController
+ Force enable TouchController integration, even if mod file is not found.
TouchController vibrate length
Set the length of the vibration when using TouchController.
diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml
index bf7b0b4da..77c02f91c 100644
--- a/app_pojavlauncher/src/main/res/xml/pref_control.xml
+++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml
@@ -167,9 +167,9 @@
+ android:key="forceEnableTouchController"
+ android:title="@string/preference_force_enable_touchcontroller_title"
+ android:summary="@string/preference_force_enable_touchcontroller_description"/>