-
Notifications
You must be signed in to change notification settings - Fork 8
Contributing
- Discuss first. Open an issue or discussion before large features or architecture changes.
-
Keep the core edition-neutral. Code in
core/must never importjava/orbedrock/. -
No edition-specific IDs in the core. Never store Java state IDs or Bedrock runtime IDs in
core/types — resolve them only at the adapter boundary. -
Verify before submitting:
go fmt ./... go test ./... go build ./... - Keep pull requests focused and document any protocol version assumptions.
The build enforces the core/adapter boundary at compile time via core/world/arch_test.go. If core/ imports an adapter, tests fail. This is intentional — it is the single most important invariant in the codebase. See Architecture.
GoCraft favours cross-edition parity tests: the same canonical interaction is driven through both Java and Bedrock inputs, and the resulting world/player/inventory/entity/sound state is compared. When adding a feature that touches both editions, add a differential test rather than trusting one adapter.
Block states, item IDs, entity types, biomes, and packet IDs live in versioned JSON under internal/gamedata/ and internal/protocoldata/ and are embedded with go:embed. Prefer updating data files over hardcoding maps.
- Keep commits focused and reasonably small.
- Write clear messages describing the behaviour change, not just the files touched.
Contributions are made under the GNU General Public License v3.0 (GPL-3.0). Any modified or derived version must also be released under GPL-3.0.
GoCraft — native-Go Minecraft server · Java 1.21.4 + Bedrock 1.26.45 cross-play · GPL-3.0 · © 2026 Oreo Studios · Discord
Playing on GoCraft
Server & cross-play
Internals