| cmd | ||
| internal | ||
| tools | ||
| world/region | ||
| .gitignore | ||
| chat.md | ||
| go.mod | ||
| Makefile | ||
| README.md | ||
RegionIO
A Minecraft Java Edition server core written in Go, targeting version
26.1.2 (protocol 775). RegionIO implements the connection lifecycle
(status → login → configuration → play), multiplayer chunk streaming, shared
block editing, persistent worlds, and an overworld generator built on the real
noise_router final_density tree.
Status
- Network: full handshake/status/login (offline mode)/configuration/play state machine with zlib compression, keep-alive, and chunk streaming.
- Registries: 28 synchronized registries + tags, captured verbatim from the 26.1.2 vanilla server and sent during configuration.
- World: revisioned, concurrency-safe chunk snapshots; memoized
level_chunk_with_lightframes; bounded LRU cache; Anvil.mcapersistence with autosave and seed metadata. - Generation: vanilla-derived overworld terrain from the embedded datapack
(
ImprovedNoise/PerlinNoise/BlendedNoise/NormalNoise+ the density function interpreter), 3D multi-noise biomes, surface-rule interpretation, deterministic decoration, and basic template structures. - Gameplay: four-player session registry; player join/leave and movement synchronization; chunk-scoped visibility for players and mobs; shared creative block place/break; broadcast chat; and hotbar item→block mapping.
- Lighting: stored vanilla nibble arrays for sky and block light; horizontal
and cross-chunk propagation; incremental updates after edits; persisted
SkyLight/BlockLight; and chunk-scopedlight_updatebroadcasts. - Safety: duplicate chunk generation is coalesced; corrupt stored chunks are not silently regenerated or overwritten; a world cannot reopen with another seed.
Build & run
go build ./...
go run ./cmd/regionio -seed 12345
The world seed defaults to 0; override it with the -seed flag or the
REGIONIO_SEED environment variable. The server listens on 0.0.0.0:25565.
Changing the seed for an existing world directory is rejected.
Testing
go test ./...
go test -race ./internal/network ./internal/server ./internal/world \
-run 'Test(Integration|BoundaryEdit|PlayerInfo|PlayerRegistry|Concurrent|Incremental|EncodeLight|Cache|Store|Eviction|Region)'
# or run both gates:
make verify
The integration suite exercises four clients across two visibility regions:
join, movement, leaving, mob visibility, and local block/light updates. A
two-client scenario separately covers shared block edits and chat. Concurrency
tests cover simultaneous frame encoding, editing, autosave, cache misses, and
session movement/broadcasts. Lighting tests compare the initial flat chunk and a
31x31x31 glowstone propagation volume against fixtures captured from the
official vanilla 26.1.2 server. Optional terrain parity diagnostics compare
surface heights against /tmp/vanilla_ground.json when that capture is present.
v0.3 scope
RegionIO v0.3 is a small creative multiplayer server core, not a complete vanilla gameplay implementation. Player and mob visibility is chunk-scoped, but there is no interest prioritization or delta-movement compression yet. Lighting matches vanilla's block-state dampening, emission, and face-occlusion properties and propagates across loaded chunk boundaries. Chunks outside the live cache are recalculated exactly when loaded rather than retained as active light-engine state. Structures, placed features, mob AI, authentication, inventory, and survival mechanics remain intentionally partial. The density router is vanilla-derived, while biome/surface/decoration layers still contain approximations and require stricter parity fixtures.
Project layout
cmd/regionio/ entry point (config, listener, graceful shutdown)
internal/
protocol/ wire primitives: VarInt, framing, compression, packet IDs
nbt/ NBT encoder/decoder (with modified UTF-8)
registry/ embedded synchronized registries + tags
world/ chunk model, level_chunk encoder, cache, generators, biomes
worldgen/ noise core + density-function interpreter + climate finder
network/ per-connection state machine (handler/conn/play/login/...)
server/ shared core: config, status response, profiles
Notes
The vanilla server.jar and its unpacked libraries//versions/ are not
included (obtain them from Mojang). The embedded data under internal/
(registries, biome parameters, the overworld datapack) is derived from vanilla
reports and is all that is required to build and run.