GoatCraft 二周目最近上线了,随之而来的还有新的 GoatCraft Connect (GCC) 插件。
其实是基于旧版的 MinecraftConnect 插件依靠 Solar Network 3.9 版本的全新开发者能力也得到了一次巨大升级。
你可以在 Solsynth Forge 上获取到源代码作为参考开发你自己的 Solar Network 第三方 App:https://src.solsynth.dev/Highland/GoatConnect (MIT Licensed,基本上你想怎么用都可以)
Anyway,下面是一些功能和相关的技术细节介绍。
登陆
Solar Network 在 3.9.0 中支持了 OAuth 的设备流程登陆。这个流程是专门设计出来给一些 headless 设备使用的,比如说 CLI、电视机、游戏机等不方便直接打开浏览器的设备使用 OAuth 登陆三方帐号使用的(虽然 Minecraft 第三方启动器可以利用标准授权码流程登陆 Microsoft 帐号,但是大家似乎都是利用 Device Code 的流程登陆的)。
而 Minecraft 服务器中也是类似的 headless 场景,适合使用这种方式登陆;在用户进入服务器后,插件会检测用户的授权状态,然后推送告诉用户利用 /gcp link start 指令开始链接。然后获取到对应的 OAuth 令牌对(访问、刷新令牌)后存储到插件管理的 SQLite3 数据库存储。用的时候检查一下有效期,刷新一下然后返回就好了。
参考文档:https://src.solsynth.dev/SoSYS/DysonNetwork/src/branch/master/docs/OAUTH_DEVICE_FLOW.md
QR Code 的生成是参考这个开源插件的源代码:https://github.com/gomania6/QRMap/tree/main
消息双向同步
这个本来就是旧版的 MinecraftConnect 插件就有的功能,依赖一个机器人帐号和 Solar Network Messager 的 API。但是得益于我们的新的 OAuth 登陆系统。我们现在可以代理用户来发消息了(通过申请 chat.messages.create scope)。
因此在转发消息的时候,我们会先去数据查询一下用户的授权状态,如果是活跃的(有有效的访问令牌)就使用用户的访问令牌而不是机器人的访问令牌来发出这则消息。
对于来自 Solar Network 的消息,我们直接利用机器人的访问令牌连接到 Solar Network 的 Realtime Gateway(WebSocket 网关)就可以监听到对应的 messages.new WebSocket Packet 了。然后解码出来给服务器的所有玩家广播即可,非常简单。
参考文档:https://kb.solsynth.dev/zh/solar-network/developers/routing/#websocket
用户主页小组件
主页小组件是 Solar Network 3.9.0 全新推出的功能,也提供了对应的开发者 API 来创建开发者自己的小组件来展示一些数据。GoatCraft 的小组件是基于 Grid Layout 构建的,具体效果如上图。(需要申请 accounts.profile.board scope)
在插件侧,我们维护一个 SQLite 数据库来存储用户的统计信息,比如游玩时长之类的。这些数据会先存储在内存中,每隔 60s 统一存储到数据库中。然后每隔一个小时,或者用户离开 GoatCraft 服务器的时候尝试先用户的主页推送 Widget 数据。
参考文档:https://src.solsynth.dev/SoSYS/DysonNetwork/src/branch/master/docs/ACCOUNT_BOARD.md
每日签到
每日签到是 Solar Network 的一个传统项目,自 v1 起就有了。当然这么传统文化不能在 GoatCraft 这里被抛弃呀。所以 GoatCraft 中有一个指令 /gcp checkin 会读取你的当天运势,然后根据运势发对应的游戏币。
效果如上图。没什么特别的,就是 API Call 而已。甚至这个 API 还是不要求授权的,所以都不用处理登陆的事项。
源点交换所
从 GoatCraft 一周目就有的传统功能。你可以用源点来购买 GoatCraft 的游戏币,你也可以用游戏币兑换成源点。汇率是 100:1 非常童叟无欺(还有手续费就是)。
以前是通过一些管理员 API 达成的。现在全部改成公开可用的共有 API 了!通过新增的 Custom App Order 和商户 Payout API。在转入的时候开 Solarpay 的订单;然后转出的时候用 Merchant 的 Payout API。也没有什么具体好说的,都是 API Call。然后就是 Hook 进 Vault 啦,依然是 API Call,这里就不多赘述了。
开单参考文档:https://src.solsynth.dev/SoSYS/DysonNetwork/src/branch/master/docs/CUSTOM_APP_CUSTOM_ORDERS.md
转出参考文档:https://src.solsynth.dev/SoSYS/DysonNetwork/src/branch/master/docs/CUSTOM_APP_WALLET_PAYOUTS.md
恒星计划权限组同步
在玩家登陆的时候,插件会读取用户的 perk_level 恒星计划等级。然后 Hook 进入 LuckPerm 分配对应的权限组。也没什么好说的,依旧是 API Call。
用户名颜色
Solar Network 有对恒星计划的成员的多彩用户名,在 GoatCraft 里面也同步了这一点。依旧参考开源项目实现的渐变和彩色用户名。
参考仓库:https://github.com/Wiicart/PedestriaNameColor
至此,GoatCraft Connect 目前的大部份功能都已经介绍完毕。如果你真想具体怎么了解利用 Solar Network 开发,我相信阅读 kb.solsynth.dev 和 DysonNetwork/docs 的文档肯定能满足你更多的需求。或者直接参考 GCC 的源码。放心大胆抄,这次是 MIT 协议。
Thanks for you reading. 也欢迎来玩 GC 体验体验这些功能!
