← gallery MineLuanti →
Two Clients, One Server

Two Clients, One Server

MineLuanti · 2026-07-26

Top window is Luanti 5.13.0-dev. Bottom is Minecraft 1.21.4. Both are joined to the same vanilla Minecraft server, looking at each other.

MineLuanti is a fork of the Luanti (Minetest) client that speaks the Minecraft Java Edition protocol — 1.21.4, protocol 769. Luanti's engine below MapBlock never touches a socket: map storage, mesh generation, ClientMap culling and the Irrlicht renderer are handed an IGameDef* and nothing else. So the fork leaves all of that unchanged and replaces only the layer above it — src/mcnet/ for framing, VarInt, NBT and the protocol state machine, src/mcworld/ for chunk transcoding and block state → MapNode, and src/mccontent/ for locally registered nodes and items in place of the nodedef a Luanti server would normally send. Both engines use 16×16×16 chunk sections, Y-up axes and 4-bit light nibbles, which is why chunk data and lighting transcode almost directly.

What the shot shows working: chunks streaming into Luanti MapBlocks carrying Minecraft's own lighting, biome tint on grass and leaves, entities with nametags — the sheep, cows, zombies and creepers labelled around the frame — health and hunger HUD, hotbar, and player skins on both sides. Movement is reconciled against the server using Minecraft's own constants (4.317 m/s walk, 32 m/s² gravity, 0.42 blocks/tick jump) reported at 20 Hz, so there is no rubber-banding and nothing trips anti-cheat.

None of Mojang's assets are redistributed. The 2464 nodes, 27866 block states and 1962 textures are generated from your own 1.21.4 jar, and the build refuses to configure until that has run.