{"id":50793934,"url":"https://github.com/yuhangle/bedrock-protocol-rs","last_synced_at":"2026-06-12T13:01:00.339Z","repository":{"id":360636855,"uuid":"1247979219","full_name":"yuhangle/bedrock-protocol-rs","owner":"yuhangle","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-27T09:16:23.000Z","size":188,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T09:16:25.656Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yuhangle.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-24T03:05:45.000Z","updated_at":"2026-05-27T09:14:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yuhangle/bedrock-protocol-rs","commit_stats":null,"previous_names":["yuhangle/bedrock-protocol-rs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/yuhangle/bedrock-protocol-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuhangle%2Fbedrock-protocol-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuhangle%2Fbedrock-protocol-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuhangle%2Fbedrock-protocol-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuhangle%2Fbedrock-protocol-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yuhangle","download_url":"https://codeload.github.com/yuhangle/bedrock-protocol-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuhangle%2Fbedrock-protocol-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34245218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2026-06-12T13:00:56.169Z","updated_at":"2026-06-12T13:01:00.303Z","avatar_url":"https://github.com/yuhangle.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bedrock-protocol-rs\n\n**Bedrock Protocol Toolchain** — Rust 工具链，用于 **Minecraft Bedrock Edition** 网络协议的序列化、反序列化与代码生成。\n使用 Rust 实现，并导出 C FFI 供跨语言调用（Python、C++ 等）。\n\n---\n\n## 架构\n\n```\n                    ┌──────────────────────────┐\n                    │  docs/protocol-docs/     │\n                    │  (JSON: 190 packets,     │\n                    │   108 enums, 196 types)  │\n                    └────────┬─────────────────┘\n                             │ cargo run --bin generate-data\n                             ↓\n                    ┌──────────────────────────┐\n                    │  bedrock-protocol-data    │\n                    │  data/v897.json (嵌入)     │\n                    │  data/v924.json (嵌入)     │\n                    │  data/v944.json (嵌入)     │\n                    │  data/v975.json (嵌入)     │\n                    │  data/v1001.json (嵌入)    │\n                    └────────┬─────────────────┘\n                             │ include_str!() at compile time\n                             ↓\n┌──────────────────────────────────────────────────────────────┐\n│  bedrock-protocol-schema                                     │\n│  Schema / FieldType / ProtocolRegistry / EmbeddedVersion     │\n│  协议定义的运行时查询接口                                       │\n└──────────────────────────────────────────────────────────────┘\n         │                           │\n         ↓                           ↓\n┌──────────────────┐    ┌───────────────────────────┐\n│  bedrock-codegen  │    │  bedrock-protocol          │\n│  (build.rs 调用)   │    │  Packet trait, 手写类型,    │\n│  enums/types      │    │  NBT, FFI                 │\n│  /packets/factory │    │                           │\n└──────────────────┘    └────────┬──────────────────┘\n                                 │\n                    ┌────────────┼────────────┐\n                    ↓            ↓            ↓\n           ┌────────────┐ ┌───────────┐ ┌──────────┐\n           │ bedrock-   │ │ bedrock-  │ │ bedrock- │\n           │ common     │ │ binary-   │ │ nbt      │\n           │ (traits,   │ │ stream    │ │ (NBT     │\n           │  errors,   │ │ (read/    │ │  encode/ │\n           │  varint)   │ │  write)   │ │  decode) │\n           └────────────┘ └───────────┘ └──────────┘\n                    │\n                    ↓\n           ┌──────────────┐\n           │ bedrock-ffi   │\n           │ 46 extern \"C\" │\n           └──────────────┘\n```\n\n## Crate 依赖关系\n\n```\nbedrock_common                  (zero deps)\n    ↑\nbedrock-binary-stream           bedrock-nbt\n(depends on bedrock_common)     (pure Rust, no deps)\n    ↑                               ↑\nbedrock-protocol-schema         bedrock-protocol-data\n(field types, Schema,           (version blobs, bridge\n ProtocolRegistry,               between schema and\n EmbeddedVersion)                binary data)\n    ↑                               ↑\nbedrock-codegen ──────────→  bedrock-protocol\n(generated codegen,           (Packet trait, types,\n build.rs integration)         NBT, FFI bridge)\n                                    ↑\n                              bedrock-ffi\n                              (46 C API functions)\n```\n\n---\n\n## 协议数据生成\n\n### 原理\n\n通过EndstoneMC提供的`protocol-docs` 仓库，得到以 JSON 格式储存的Minecraft Bedrock 协议定义。\n每个协议版本对应一个 Git 分支（如 `r26_u2` 对应协议 975），包含：\n\n```\nprotocol-docs/\n├── packets/   ← 190 个 JSON 文件，每个文件定义一个数据包的结构\n├── enums/     ← 108 个 JSON 文件，枚举定义\n└── types/     ← 196 个 JSON 文件，复合类型定义\n```\n\n**工作流**：\n\n```\nprotocol-docs Git 分支\n    │ git checkout r26_u2\n    ↓\ngenerate-data 工具\n    │ 解析 JSON → 打包为 EmbeddedVersion\n    │ 输出为单个 data/v{N}.json 文件\n    ↓\nbedrock-protocol-data/src/lib.rs\n    │ include_str!(\"../data/v{897,924,944,975,1001}.json\")\n    │ 编译时嵌入二进制\n    ↓\nProtocolRegistry::from_embedded()\n    │ 反序列化 → Schema 对象\n    ↓\n运行时查询：get_packet_by_id() / get_enum_by_name() / is_type()\n```\n\n### 添加新协议版本\n\n```bash\n# Step 1: 检出目标分支\ngit clone https://github.com/EndstoneMC/protocol-docs.git /tmp/protocol-docs\ncd /tmp/protocol-docs \u0026\u0026 git checkout r26_u3\n\n# Step 2: 生成数据文件\ncd /path/to/protocol\ncargo run -p bedrock-protocol-data --bin generate-data -- \\\n  --docs /tmp/protocol-docs \\\n  --output ./crates/bedrock-protocol-data/data/v1001.json\n\n# Step 3: 注册到 lib.rs\n# 编辑 crates/bedrock-protocol-data/src/lib.rs，在 blobs 数组中添加：\n#   include_str!(\"../data/v1001.json\"),\n\n# Step 4: 验证\npython3 -c \"\nimport json\nd = json.load(open('crates/bedrock-protocol-data/data/v1001.json'))\nprint(f'v{d[\\\"network_version\\\"]}, {len(d[\\\"packets\\\"])} packets')\n\"\ncargo test -p bedrock-codegen -- e2e_tests\n```\n\n---\n\n## 快速开始\n\n```bash\n# 构建全部 crate（默认启用代码生成）\ncargo build\n\n# 运行全部测试\ncargo test --workspace\n\n# 构建 C 共享库\ncargo build -p bedrock-ffi --release\n# → target/release/libbedrock_ffi.so / .dylib / .dll\n```\n\n---\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuhangle%2Fbedrock-protocol-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuhangle%2Fbedrock-protocol-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuhangle%2Fbedrock-protocol-rs/lists"}