-
Create a root Cargo workspace
-
Split into child crates:
-
server-core -
protocol -
slp-parser -
player-management
-
-
Update each crate's
Cargo.tomlwith clear dependencies -
Add an installation/bootstrap script (e.g.,
make init)
- Integrate Clippy into CI (
cargo clippy -- -D warnings) - Configure
rustfmtand enforce a consistent code style - Replace
Box<dyn std::error::Error>withthiserrororanyhow - Move from
logtotracingfor structured logging - Add
///comments to public APIs
-
Write unit tests for each module (
#[cfg(test)]) -
Create integration tests for:
- Handshake and minimal login
- Sending/receiving SLP packets
-
Set up benchmarks with
criterion.rs:- Chunk encoding
- Seed hashing
-
Extend GitHub Actions:
- Tests on Linux, macOS, and Windows
- Linux
- Windows
- macOS
- Builds on Stable, Beta, and Nightly
- Coverage report (using
tarpaulinorgrcov)
- Tests on Linux, macOS, and Windows
-
Automatically publish documentation to
docs.rs
- Implement the Handshake state (packet 0x00)
- Handle Login Start → Encryption → Mojang authentication
- Support packet compression/decompression (Minecraft 1.8+)
- Structure the network codec with
tokio_util::codec::Framed - Add timeouts and handle idle connections
- Implement the state machine (Handshake → Status → Play)
- Ensure big-endian byte order when sending/receiving packets
- Provide a
Dockerfileanddocker-compose.ymlfor a local environment - Add a config watcher (
notify) for hot-reloadingserver.properties - Expose a Prometheus endpoint for metrics (TPS, players, latency)
- Create an automated deployment script (CI/CD)
- Integrate
cargo-fuzzfor fuzz testing parsers - Strictly validate all incoming data (sizes, values)
- Handle network errors and client disconnections gracefully
- Set up stress/load testing if possible
- Complete and prioritize
TODO.mdandROADMAP.md - Create a GitHub project board (issues, milestones, labels)
- Document contribution guidelines (
CONTRIBUTING.md,CODE_OF_CONDUCT.md) - Plan releases (SemVer versioning)
- Parse
server.propertiesto retrieve server info - Global values such as server version
- Implement the SLP interface
- Separate VarInt/VarLong encoding/decoding into a dedicated module
- Add structured logging to the SLP parser
- Allow a player to connect and complete the handshake/login
- Read the map file and send chunks
- Handle keep-alive and client-side timeouts
- Implement a connection state machine (Handshake → Status → Login → Play)
- Support packet compression/decompression (Minecraft 1.8+)
- Ensure big-endian byte order for packets
- Complete missing handlers in
netandnet/packet(TODOs andtodo!()) - Switch to an event-driven model using Tokio
- Use config files (
config) instead of hard-coded values
- Implement the Command Pattern system in
src/commands - Create a queue manager for user commands
- Separate command logic from the CLI
- Implement
generator_settingsandtext_filtering_configinsrc/config - Finalize mapping of
Settings(as a singleton or global struct) - Add validation and dynamic reloading via
notify
- Reimplement
constswith a query API (HashMap) to reflect current state - Handle conditional inclusion of the server icon in the JSON response
- Complete implementation of
chunks_manager(todo!()) - Benchmark chunk encoding via
criterion
- Restore colored output for
INFO,DEBUG,WARN,ERRORin the logger - Migrate to
tracingfor structured logging and spans
-
Decide whether
worldgenshould be a workspace crate or a separate repo- Crate advantage: simpler integration, shared types and dependencies
- Separate repo advantage: independent release cycle, strong decoupling
-
Create a
worldgenmodule/crate in the workspace (or initialize the repo) -
Implement noise functions (Perlin, Simplex)
-
Generate chunks:
- Raw terrain generation (heightmap)
- Biomes and sub-biomes
- Structures (village, cave, fortress)
-
WorldGen configuration (seed, advanced options)
-
Unit and integration tests for terrain consistency
-
Chunk generation benchmarks (via
criterion) -
CLI or API to test/generate maps independently
Date updated: May 19, 2025