3 个版本
0.1.2 | 2024 年 6 月 24 日 |
---|---|
0.1.1 | 2024 年 6 月 11 日 |
0.1.0 | 2024 年 6 月 2 日 |
在 网络编程 中排名 846
每月下载量 35
150KB
3.5K SLoC
sandstone
sandstone 是一个 Minecraft: Java Edition 网络库。它不是一个服务器实现,而是一个库,可以用来创建自己的服务器端软件。最终目标是使用这个库在 Rust 中实现 Minecraft: Java Edition 服务器。
此项目将是一个持续进行的项目,可能会有几个月没有活动。
此库作为结构化基线和开源软件解决方案提供,供任何希望创建专门的 Minecraft: Java Edition 服务器的人使用。它是基于方便的优化和抽象构建的。
库目前拥有一个完全定制的数据包序列化和反序列化器,以及客户端连接处理器。
以下是当前处理服务器列表状态的示例。
#[tokio::main]
async fn main() {
SimpleLogger::new().init().unwrap();
debug!("Starting server");
let server = TcpListener::bind("127.0.0.1:25565").await.unwrap();
loop {
let (socket, _) = server.accept().await.unwrap();
let mut client = CraftClient::from_connection(socket).unwrap();
let mut response = StatusResponseSpec::new(ProtocolVerison::V1_20, "&a&lThis is a test description &b§kttt");
response.set_player_info(1, 0, vec![PlayerSample::new_random("&6&lTest")]);
let image = image::open("src/server-icon.png").unwrap();
response.set_favicon_image(image);
DefaultHandshakeHandler::handle_handshake(&mut client).await.unwrap();
DefaultStatusHandler::handle_status(&mut client, StatusResponseBody::new(response), DefaultPingHandler).await.unwrap();
}
}
更多示例可以在 examples/ 文件夹中找到。
待办事项
实际的待办事项列表非常庞大,但以下是当前项目的优先级。
- 弄清楚对数据包的处理方式,并开始实现完整版本
- 反序列化给定的标准信息测试
- 如何处理可选字段 ... 查看 Packet::LoginPluginResponse
- 实现 Java 的 bitset 用于位字段
- 也许实现一个 Identifier 结构体? - 查看 minecraft api 类型
- 工具
- 为新连接创建线程池
- 自动生成所有数据包的序列化和反序列化测试?
- 宏
- 默认字段特质?派生?
- 开始基本登录流程处理程序?
- 压缩支持
- 加密支持
- 开始服务器结构
- 文档
- 为每个文件提供解释行
- 记录所有公共函数
- 更好的数据包读取示例和文档
- 版权声明
免责声明
请注意,此项目正在积极开发中,功能可能尚未得到充分优化。
请注意,加密尚未经过严格的测试以确保安全性,因此请谨慎使用在线功能。
参考文献
- wiki.vg = 库实现新功能的主要资源。这个维基百科包含关于Minecraft协议(包括基岩版和Java版)的所有相关内容的广泛文档。它还包含大量关于加密、Mojang协议以及游戏其他隐藏细节的文章。
参考了一些其他项目来获取Minecraft协议的通用设计和处理方法。
以下项目对于理解Minecraft协议的一些怪癖非常有用。它还指导我早期版本的McSerializer和McDeserializer(而不是使用serde)。
依赖项
~14-27MB
~421K SLoC