{"id":25244186,"url":"https://github.com/TouchController/TouchController","last_synced_at":"2025-10-26T20:31:05.376Z","repository":{"id":268500204,"uuid":"898894440","full_name":"fifth-light/TouchController","owner":"fifth-light","description":"Touchscreen control mod for Minecraft Java version / Minecraft Java 版触屏控制 mod","archived":false,"fork":false,"pushed_at":"2025-02-10T12:04:16.000Z","size":1471,"stargazers_count":80,"open_issues_count":41,"forks_count":4,"subscribers_count":3,"default_branch":"0.1","last_synced_at":"2025-02-10T13:22:35.614Z","etag":null,"topics":["minecraft","minecraft-fabric","minecraft-fabric-mod","minecraft-forge","minecraft-forge-mod","minecraft-mod","touchscreen"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fifth-light.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-05T08:36:32.000Z","updated_at":"2025-02-10T12:04:19.000Z","dependencies_parsed_at":"2025-01-23T06:22:59.754Z","dependency_job_id":"b8d3f67a-b3ca-497b-8d32-6df9acaa8601","html_url":"https://github.com/fifth-light/TouchController","commit_stats":null,"previous_names":["fifth-light/touchcontroller"],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fifth-light%2FTouchController","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fifth-light%2FTouchController/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fifth-light%2FTouchController/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fifth-light%2FTouchController/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fifth-light","download_url":"https://codeload.github.com/fifth-light/TouchController/tar.gz/refs/heads/0.1","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238394398,"owners_count":19464588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minecraft","minecraft-fabric","minecraft-fabric-mod","minecraft-forge","minecraft-forge-mod","minecraft-mod","touchscreen"],"created_at":"2025-02-12T01:18:00.848Z","updated_at":"2025-10-26T20:30:59.941Z","avatar_url":"https://github.com/fifth-light.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TouchController\n\n一个为 Minecraft Java 版添加触控支持的 Mod。目前处于早期开发中，如果遇到 Bug 或者其他问题，欢迎积极报告！\n\n## 下载与安装\n\n你可以在 [Modrinth](https://modrinth.com/mod/touchcontroller#download)、[Github Releases](https://github.com/fifth-light/TouchController/releases) 、[Gitee 发行版](https://gitee.com/fifth_light/TouchController/releases)\n和 [MC 百科](https://www.mcmod.cn/download/17432.html) 上下载 TouchController 的最新发布版。\n\n根据不同的 mod 加载器，TouchController 需要如下的前置 mod：\n\n- Fabric：[Fabric API](https://github.com/FabricMC/fabric)\n- Forge：无前置\n\n## 支持的游戏版本和平台\n\n目前 TouchController 支持的 Minecraft 版本和 mod 加载器有：\n\n- 1.12.2 (Forge)\n- 1.16.5 (Forge、Fabric)\n- 1.20.1 (Forge、Fabric)\n- 1.21.1 (Fabric)\n- 1.21.3 (Fabric)\n- 1.21.4 (Fabric)\n\n更多游戏版本、mod 加载器的支持正在开发中。\n\n目前支持的平台有：\n\n- Windows（版本最低为 Windows 10，支持 x86、x86_64 和 ARM64 架构）\n- [官方版 Fold Craft Launcher](https://github.com/FCL-Team/FoldCraftLauncher)\n- [官方版 Zalith Launcher](https://github.com/ZalithLauncher/ZalithLauncher)\n- [官方版 Pojav Glow·Worm](https://github.com/Vera-Firefly/Pojav-Glow-Worm)\n- [我修改后的 PojavLauncher](https://github.com/fifth-light/PojavLauncher)\n\n在未来可能会添加 Linux 上 X11 和 Wayland 触屏的支持。iOS 和 macOS 由于没有相应环境和设备，不会提供支持，但是接受 iOS 和 macOS 支持的 Pull\nRequest。\n\n## 目前支持的功能\n\n- Minecraft 基岩版风格的触屏输入\n- 可自定义的控制器布局\n- 能够根据游泳、飞行等状态切换不同按键的显示\n- 破坏方块时进行震动反馈（目前只支持 Android 平台）\n\n## 编译\n\n首先你需要 Rust 编译器，可以使用 [rustup](https://rustup.rs/) 安装。\n\n接下来你需要安装以下几个目标的 Rust 工具链：\n\n- armv7-linux-androideabi\n- aarch64-linux-android\n- i686-linux-android\n- x86_64-linux-android\n- i686-pc-windows-gnullvm\n- x86_64-pc-windows-gnullvm\n- aarch64-pc-windows-gnullvm\n\n这些工具链可以用 `rustup target add \u003c工具链目标\u003e` 添加。\n\n你还需要一份 Android SDK，可以在 Android Studio 内安装，然后在项目根目录创建 `local.properties`，其中内容如下：\n\n```\nsdk.dir=\u003cAndroid SDK 目录\u003e\n```\n\n默认 Android Studio 会帮你做这件事情，如果你用 Android Studio 打开过这个项目，则不需要配置这个选项。\n\n接下来你还需要安装一份 Android NDK，同样也可以在 Android Studio 内安装，安装完后使用 `cargo install cargo-ndk` 安装\n`cargo-ndk` 工具。\n\n然后你还需要 LLVM MinGW 工具链，在 [mstorsjo/llvm-mingw](https://github.com/mstorsjo/llvm-mingw/releases) 获取工具链，并将其中的\nbin 目录加入 PATH 环境变量即可。\n\n最后运行 `./gradlew build` 就可以编译了，编译好的 mod 文件在 `mod/build/libs` 下。\n\n## 添加新的启动器支持\n\n欢迎添加其他启动器的支持！为其他启动器添加支持的步骤有：\n\n1. 添加 TouchController 的 proxy-client 库到启动器内\n\n    - Groovy\n    ```groovy\n    implementation 'top.fifthlight.touchcontroller:proxy-client-android:0.0.2'\n    ```\n    \n    - Kotlin\n    ```kotlin\n    implementation(\"top.fifthlight.touchcontroller:proxy-client-android:0.0.2\")\n    ```\n    \n    - Gradle version catalogs\n    ```toml\n    touchcontroller-proxy-client-android = { group = \"top.fifthlight.touchcontroller\", name = \"proxy-client-android\", version = \"0.0.2\" }\n    ```\n\n2. 创建 MessageTransport\n\n    目前版本的 TouchController 使用 Unix 套接字进行游戏和启动器之间的 IPC，因此需要先创建一个 UnixSocketTransport：\n    \n    ```java\n    private static final String socketName = \"YourLauncher\";\n    \n    /* ... */\n    \n    MessageTransport transport = UnixSocketTransportKt.UnixSocketTransport(socketName);\n    ```\n\n   你还需要在游戏启动时将 Unix Socket 的名称通过 `TOUCH_CONTROLLER_PROXY_SOCKET` 环境变量传递给 mod。\n\n    ```java\n    Os.setenv(\"TOUCH_CONTROLLER_PROXY_SOCKET\", socketName, true);\n    ```\n\n3. 创建一个 LauncherProxyClient\n\n    有了 MessageTransport 后你就可以创建一个 LauncherProxyClient 了，这是实现启动器和游戏之间交互协议的类：\n    \n    ```java\n    LauncherProxyClient client = new LauncherProxyClient(transport);\n    ```\n\n4. 创建一个 VibrationHandler（可选）\n\n    TouchController 从 v0.0.12 版本开始支持震动反馈。首先你需要实现 VibrationHandler：\n    \n    ```kotlin\n    interface VibrationHandler {\n        fun vibrate(kind: VibrateMessage.Kind)\n    }\n    ```\n    \n    在 proxy-client-android 库中的 SimpleVibrationHandler 类实现了一个基本的 VibrationHandler，可以作为参考，但是不建议直接使用这个类，因为这个类缺失震动强度、震动效果的调节：\n    \n    ```kotlin\n    private val TAG = \"SimpleVibrationHandler\"\n    \n    class SimpleVibrationHandler(private val service: Vibrator) : LauncherProxyClient.VibrationHandler {\n        override fun viberate(kind: VibrateMessage.Kind) {\n            try {\n                @Suppress(\"DEPRECATION\")\n                service.vibrate(100)\n            } catch (ex: Exception) {\n                Log.w(TAG, \"Failed to trigger vibration\", ex)\n            }\n        }\n    }\n    ```\n    \n    然后设置 VibrationHandler 到 LauncherProxyClient 中：\n    \n    ```java\n    SimpleVibrationHandler handler = new SimpleVibrationHandler(vibrator);\n    client.setVibrationHandler(handler);\n    ```\n\n5. 启动 LauncherProxyClient，并发送消息：\n\n    调用 LauncherProxyClient 的 run() 方法，否则 LauncherProxyClient 不会发送任何消息到游戏：\n    \n    ```java\n    client.run();\n    ```\n    \n    然后调用 LauncherProxyClient 的以下方法更新触点：\n    \n    - addPointer：添加或者更新一个触点\n    - removePointer：删除一个触点\n    - clearPointer：清除所有的触点\n    \n    如果不想手动做消息处理，库内也提供了一个基于 FrameLayout 的 TouchControllerLayout 类，只要将游戏相关的 View 包含在内，然后将 LauncherProxyClient 设置到 TouchControllerLayout 中即可发送处理触摸消息并发送。\n    \n    要注意的是消息中的 index 必须是单调递增的（与 Android 中可以复用 ID 的行为相反），并且所有坐标的范围是相对于游戏显示区域的 [0.0, 1.0]，而不是屏幕坐标。\n\n## Star 历史\n\n\u003ca href=\"https://star-history.com/#fifth-light/TouchController\u0026Date\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=fifth-light/TouchController\u0026type=Date\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=fifth-light/TouchController\u0026type=Date\" /\u003e\n   \u003cimg alt=\"Star 历史图表\" src=\"https://api.star-history.com/svg?repos=fifth-light/TouchController\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTouchController%2FTouchController","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTouchController%2FTouchController","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTouchController%2FTouchController/lists"}