From 8f1aede432c2f22d5f4d017f74d5f9c68d2e5abc Mon Sep 17 00:00:00 2001 From: fifth_light Date: Wed, 16 Jul 2025 23:27:06 +0800 Subject: [PATCH] feat[TouchController]: add TouchController mod detection --- .../net/kdt/pojavlaunch/MainActivity.java | 9 ++++---- .../main/java/net/kdt/pojavlaunch/Tools.java | 21 +++++++++++++++++++ .../prefs/LauncherPreferences.java | 4 ++-- .../src/main/res/values-zh-rCN/strings.xml | 4 ++-- .../src/main/res/values/strings.xml | 4 ++-- .../src/main/res/xml/pref_control.xml | 6 +++--- 6 files changed, 35 insertions(+), 13 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 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"/>