No description
  • Go 98.6%
  • Dockerfile 1.4%
Find a file
Wesley Channon 679643a542
All checks were successful
build / image (push) Successful in 26s
gofmt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:04:58 +02:00
.forgejo/workflows tachyne-gw-bedrock: Bedrock edition gateway (latest — 1.26.30 / proto 1001) 2026-07-08 20:52:01 +02:00
cmd gateway: shard-handover backend-swap (MsgRehome -> resume) 2026-07-09 16:14:29 +02:00
deploy deploy: TACHYNE_WORLD_PATTERN for shard-handover resume 2026-07-09 16:15:13 +02:00
internal/gw gofmt 2026-07-10 15:04:58 +02:00
.gitignore tachyne-gw-bedrock: Bedrock edition gateway (latest — 1.26.30 / proto 1001) 2026-07-08 20:52:01 +02:00
CLAUDE.md deploy+docs: bedrock gateway internal-only (behind tachyne-ingress) 2026-07-09 09:57:51 +02:00
Dockerfile fix(docker): ship root CAs — XBL auth OIDC discovery needs TLS from scratch image 2026-07-08 21:01:00 +02:00
go.mod Use shared attach client machinery (DialSession + Backend) — dedup Tier 2 2026-07-10 09:47:45 +02:00
go.sum Use shared attach client machinery (DialSession + Backend) — dedup Tier 2 2026-07-10 09:47:45 +02:00
LICENSE License under Apache-2.0 2026-07-10 14:10:10 +02:00
NOTICE NOTICE: name the copyright owner 2026-07-10 14:40:55 +02:00
README.md README: AI-assisted development disclosure 2026-07-10 14:32:46 +02:00

tachyne-gw-bedrock

tachyne is an unofficial fan project, not affiliated with Mojang, Microsoft, or Minecraft's developer/publisher in any way. See the Disclaimer at the bottom.

The tachyne gateway for Minecraft Bedrock edition (latest — currently 1.26.30 / protocol 1001 via gophertunnel): terminates Bedrock clients (RakNet + encryption + XBL login handled by gophertunnel), authorizes them via tachyne-access, and renders a tachyne-world — consumed over the domain attach protocol — into Bedrock wire format.

Unlike the Java fleet (per-protocol pods gw-java-770/gw-java-776), Bedrock runs ONE versionless gateway tracking the latest release: Bedrock clients auto-update, so the fleet doesn't fragment. Keeping current = bump the gophertunnel dep and rebuild; the engine never changes.

This gateway is internal-only — clients reach it through tachyne-ingress, which owns the public <server-ip>:19132/udp and forwards RakNet datagrams to this ClusterIP service (per-client UDP session). One hardened entrypoint; the gateway pods aren't publicly exposed.

How it renders

  • Blocks: canonical Java 1.21.11 state IDs → hashed Bedrock network IDs (StartGame UseBlockNetworkIDHashes=true; fnv1a-32 of the {name,states} LE NBT, dragonfly's network_block_hash.go algorithm) via the generated bedrockBlockRIDs table — no dependency on Bedrock palette order across versions. Chunks re-encode through dragonfly's world/chunk package (sub-chunk v9, classic full-payload LevelChunk, cache off).
  • Items: full Bedrock item registry (runtime_item_states) in StartGame; Java item ID → Bedrock identifier+aux via javaItemBedrock.
  • Entities: canonical entity type → Bedrock actor identifier (bedrockEntityIDs, Geyser's mapping incl. the boat/villager_v2/etc exceptions); entity_identifiers.dat sent verbatim as AvailableActorIdentifiers. Types with no Bedrock form (item frames, displays, mannequin) are skipped.
  • Biomes: Java biome name → Bedrock numeric ID (bedrockBiomeIDs).

All tables are generated by scripts/gen_bedrock.py in tachyne-world from GeyserMC/mappings (pinned at the last Java-1.21.11 commit), Geyser core's bedrock/ resources (1.26.30) and mcmeta — MIT-licensed data consumed as facts, algorithms reimplemented.

Run

TACHYNE_XBL_AUTH=off TACHYNE_ATTACH_TOKEN=dev \
TACHYNE_BACKEND=127.0.0.1:25500 TACHYNE_LISTEN=:19132 go run ./cmd/gw

Env: TACHYNE_LISTEN (udp :19132), TACHYNE_BACKEND (world attach addr), TACHYNE_ATTACH_TOKEN, TACHYNE_ACCESS_URL/TACHYNE_ACCESS_TOKEN (door policy; unset = OPEN, dev only), TACHYNE_XBL_AUTH=off (disable XBL authentication — offline probes; NEVER in production), TACHYNE_MOTD.

Headless smoke

cmd/bedrockprobe is an offline Bedrock client: joins, spawns, decodes every LevelChunk with dragonfly's NetworkDecode (what a real client does), asserts terrain is present, prints a packet histogram.

go run ./cmd/bedrockprobe -addr 127.0.0.1:19132 -name probe1 -t 10s

Status / debt

  • WORKING: login (XBL or off), StartGame, chunk streaming (terrain verified by probe), block updates, entity add/move/remove incl. other players (placeholder skin), player list, chat + commands + HUD text, movement (PlayerAuthInput → engine, absolute renders back), time, teleport, and the interaction bridge (melee/dig/place/use-item/hotbar/sneak via InventoryTransaction + PlayerAuthInput BlockActions).
  • NOT YET: hurt/death animations, inventory/windows rendering, equipment/metadata rendering, health/hunger/XP (UpdateAttributes), sounds/particles, death/respawn flow, nether/end (ChangeDimension + per-dimension chunk ranges — engine chunks are 24 sections everywhere; Bedrock nether is 8), item entities (AddItemActor), boat wood variants, real Java skin → Bedrock skin conversion, on_ground derivation (currently always true → no Bedrock fall damage).

Deployment

Dockerfile builds a static Go binary into a minimal image. deploy/ holds working Kubernetes manifests (the ones this project actually runs) — treat them as examples: substitute your own image registry, hostnames, namespaces and secrets before applying them to your cluster.

Credits

  • gophertunnel (© Sandertv) — RakNet transport, encryption, and Bedrock login/packet handling (MIT).
  • dragonfly — Bedrock chunk encoding and biome definitions (MIT).
  • GeyserMC — Java↔Bedrock block/item/ entity/biome mapping data and protocol resources (MIT); the generated tables in this repo are built from their published mappings.
  • go-gl/mathgl (BSD-3) and google/uuid (BSD-3).
  • Protocol rendering facts come via the shared tachyne-common library — see its credits.

Development transparency

tachyne is built by its maintainer working with an AI coding agent (Anthropic's Claude): substantial portions of the implementation were written by the model under human direction, and every change is reviewed, tested and deployed by the maintainer. The project's engineering discipline is designed for exactly this workflow — byte-oracle tests pin the wire format, full test suites gate every image build, and real-client verification signs off gameplay. Disclosed here for transparency; judge the code on its behavior.

License

Licensed under the Apache License, Version 2.0 — see LICENSE and NOTICE. Note §6: the license grants no rights to the tachyne name or any trademarks.

Disclaimer

tachyne is an unofficial, independent project. It is not affiliated with, endorsed, sponsored, or approved by Mojang Studios, Mojang Synergies AB, Microsoft Corporation, or any of their subsidiaries — the developer and publisher of Minecraft have no involvement with this project. "Minecraft" is a trademark of Mojang Synergies AB. This project contains no Minecraft game code; all game behavior is independently reimplemented, and data tables are built from openly licensed community datasets (see Credits).