目前已发布到 rowinglink - GitHub
书接上回 花了半个下午看看有没有办法从我的划船机导出实时运动数据 鸽了快一年后。眼瞅着 Kayak VR Mirage 的划船机议程实在是没有什么进展,我决定借助 Claude Opus 4.6 + GLM 5.1 + Godot 做点什么东西出来,不过在消耗了可观的 token 后发现自己欠缺的好像是审美。
就在这时候,Arnis 给了我灵感 —— 这个项目能用 OpenStreetMap 的数据生成 Minecraft 地图。与其从零开始搭一个过得去的 3D 世界,Minecraft 显然是个更好上手、更好折腾的框架。
上回玩 Minecraft 好像还是 1.17 版本。研究了一阵子 Fabric Mod 框架后,我捣鼓出了这个叫 RowingLink 的 Fabric 模组。
原理很简单:通过 UDP 协议接收划船机的数据,把功率和桨频转化成游戏里小船的推进。我还加了个自动转向功能,默认是开着的,这样你就不用担心撞到岸上,只要埋头划桨就行了。当然,如果你觉得方向不对,随时可以手动拨回来。
首先,你得有一台划船机,而且你得有办法把它的运动数据弄出来。如果你的机器支持 FTMS 协议,那事情就简单多了。我家里这台 Mok Fitness K10 是个私有协议,所以我逆向分析了它的蓝牙数据包,写了一个解析逻辑,用的就是上一篇文章的方法,不过多划了一会以找出进位的方法。如果你用的是别的牌子,可能得自己动手。如果你的划船机没有数字化的交互手段,那我推荐 Open Rowing Monitor(布豪,This repository was archived by the owner on Apr 5, 2026. It is now read-only)。
我得承认自己不是什么 Minecraft 模组专家,因此只在下面这个环境里跑通过:
- JDK 21
- Minecraft 1.21.11
- Fabric API [0.141.3+1.21.11]
- 单人游戏模式
为了让划船的感觉更真实,我还装了一堆非常棒的视觉增强模组:
- Iris [1.10.7+mc1.21.11]
- Lithostitched [1.6.1]
- Sodium [0.8.7+mc1.21.11]
- Tectonic [3.0.19]
- Voxy [0.2.13-alpha]
- Voxy World Gen V2 [2.2.4]
顺便提一下,Prism Launcher 真的很好用,管理版本和模组省了我不少事
- 先把 Fabric API 装上
- 运行
./gradlew build来构建项目,生成的 jar 文件就在build/libs/下面 - 把这个 jar 文件扔进你的
${MINECRAFT_DIR}/mods/文件夹 - 启动你的数据桥接工具,让它往 UDP 端口发数据
- 进游戏,坐上船,输入
/rowing connect - 开始划吧
- 如果你想练个二十分钟,就用
/rowing train 20 - 如果你想要一点魔鬼训练,就开生存模式
- 如果你想练个二十分钟,就用
老实说,它们在我的 Ryzen 9700X 上运行似乎有些吃力(最后发现是不知道什么主板配置导致超线程没开启),暂时也不清楚如何优化 Mod 的配置,不过换成 Apple Silicon M5 就顺畅了,这下成了「我有个叔叔用 x86 Windows 11 打游戏.jpg」了。
我还在 modrinth 上找到了一些自行车模组,所以动感单车什么的也不是不行。
什么,你说有 EXR 这样的服务?那可要花老多钱了。