Minecraft server (26.2, protocol 776) reimplementation in rust (because why not?)
- Rust 99.8%
- PowerShell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
At view distance 32 (4225 resident chunks) one player held ~2 GiB. Three
fixes, all output- and speed-neutral (golden/parity suites pass; profile_gen
steady-state unchanged at ~97/~105 ms per chunk generate/full-wire):
- Palette-compress GenChunk's baseline grid per 16-block section
(Uniform / nibble-packed <=16 states / byte palette / dense fallback)
instead of a dense 98,304 x u32 Vec: 384 -> 25 KiB per chunk. Reads stay
O(1) behind the unchanged base_state API; the dense grid now exists only
transiently during generation.
- Share one static full-bright sky DataLayer: ChunkLight sections become
LightLayer::{Empty, Bright, Data} so the ~15 identical all-0xFF layers
per chunk cost nothing. Wire bytes identical: 34 -> 6 KiB per chunk.
- Stop double-storing the section blob: the framed level_chunk packet is
built eagerly with the wire cache (moved into world::encoding; frame()
only prepends) and ChunkColumns.blob is a zero-copy Bytes slice into it.
Also moves frame serialization off the send path onto prefetch workers.
Adds examples/profile_memory.rs + world::store_memory_stats() for per-chunk
byte accounting and the VD32 extrapolation (2058 -> 367 MiB per player).
|
||
| assets/fonts | ||
| benches | ||
| data/minecraft/worldgen | ||
| docs | ||
| examples | ||
| src | ||
| tests | ||
| tools/mca_diff | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
Vela
A clean-room Minecraft Java Edition server reimplementation in Rust. Target: protocol 776 (MC 26.2).
Run
cargo run # binds 0.0.0.0:25565
cargo run -- 127.0.0.1:25599 # custom bind
Roadmap
Roadmap of features that need to be implemented for feature parity is available within docs/ROADMAP.md