[新人贴/练手作品]用Go语言实现的Minecraft服务端管理协议(MSMP)简易客户端

  • 技术
poyuan

poyuan

发布时间2025年10月29日
阅读数208浏览

我本人是一名软工大三的学生,了解到Minecraft在1.21.9版本中引入了新的服务端管理协议(MSMP),它基于JSON-RPC 2.0规范并通过WebSocket进行通信,这使得服务端主动向外推送信息成为可能。我在课余时间开发了这款MSMP协议客户端的简易实现。练手作品,仍有许多不足,望批评指正。

项目地址:https://github.com/CycleZero/mc-msmp-go

项目介绍

这个项目是一个Go语言编写的Minecraft服务端管理协议(MSMP)客户端实现,可以通过WebSocket与Minecraft Java版服务端进行通信和管理。

主要特性

  • 基于WebSocket的通信

  • 实现了Minecraft服务端管理协议的大部分主要功能

  • 支持自动重连

  • 线程安全的设计

  • 易于使用的API接口

核心代码示例

以下是一个简单的使用示例:

// 创建客户端实例
url := "ws://localhost:25585"
secret := "your-secret-token"
cli := mcmsmpgo.NewMsmpClient(url, secret, nil)

// 连接到服务端
err := cli.Connect()
if err != nil {
   log.Fatal(err)
}
defer cli.Disconnect()

// 获取服务器状态
cli.ServerStatus()

// 添加白名单玩家
cli.AllowlistAdd("player-uuid", "player-name")

消息处理机制

为了处理异步的请求-响应模式,我实现了一个消息容器系统:

type MessageContainer interface {
   AddRequest(request *dto.MsmpRequest) error
   AddRequestWithCallback(request *dto.MsmpRequest, callback func(*dto.MsmpRequest, dto.MsmpResponse)) error
   AddResponse(response dto.MsmpResponse) error
   GetResponse(id int) (dto.MsmpResponse, error)
   // ... 其他方法
}

这个接口允许我们跟踪发送的请求并正确匹配返回的响应。

未来计划

虽然目前项目已经基本可用,但我还有一些改进计划:

  1. 完善错误处理和日志记录

  2. 提供更详细的使用文档和示例

  3. 考虑增加一些高级功能,如批量操作等

  4. 仍在考虑改进消息容器,目前的默认实现可能在高并发场景下出现性能瓶颈

总结

如果你对这个项目感兴趣,欢迎访问我的GitHub仓库查看源码,也欢迎提出宝贵的意见和建议。作为一个学习者,我非常期待能得到更多经验丰富的开发者的指导。

希望我的分享能给同样在学习编程的同学们一些启发,也希望能为Minecraft社区贡献一份小小的力量。

回复数2
点赞数1
点踩数0
最热|最新
Shalling
Shalling

点了进去看了下, 有些可以写的更稳妥些; 比如这个: https://github.com/CycleZero/mc-msmp-go/blob/41789751c8fbc50e15415b83ffc5fb5d2c41e49c/container/map_message_container.go#L28; 在访问 map 前就加锁和添加 defer 清理; 或者不需要显示锁, 写个 for 去循环 select channel 模拟 readEvent 这种操作也可以(虽然非性能考虑); 还有 ide 的项目配置(.idea)可以不用上传

2025-10-31 00:08
点赞数0
点踩数0
回复
poyuan

感谢大佬指点OK(ゝω・´★)

2025-11-02 20:41
点赞数0
点踩数0
回复