The tachyne world engine: a versionless, from-scratch Minecraft server core in pure Go — domain events, live sharding, real-Earth terrain https://tachyne.com
  • Go 96%
  • Python 3.7%
  • Java 0.2%
Find a file
Wesley Channon 5ef536c665 block_change names its dimension
The bus event carried no dimension, and the web map applied every
world's block changes to its overworld view: a block placed in the
Nether, the End or the shipyard appeared on the overworld map at the
same coordinates. Both publishers (onBlock, setBlockLive) now send dim.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JhRruHDTswJ2XVRSq6f3RE
2026-11-02 10:56:27 +02:00
.github/workflows CI: race job in four shards; command tests ignore the HUD action bar; pose test without spawning 2026-09-25 11:57:06 +02:00
busplugin plugins announce to the operators 2026-07-12 18:12:35 +02:00
cmd world: the dimensions as a table 2026-09-27 11:16:09 +02:00
daemons/webmap Retire BlueMap: no more Java anywhere 2026-07-25 09:18:01 +02:00
deploy deploy examples: full classic world by default; real registry refs 2026-07-10 15:31:45 +02:00
docs block_change names its dimension 2026-11-02 10:56:27 +02:00
internal block_change names its dimension 2026-11-02 10:56:27 +02:00
plugin Dialogs: /dialog show|clear and custom click actions (UNTESTED) 2026-09-30 09:38:55 +02:00
plugins/example plugin system milestone 3: module rename + tachyne-build 2026-07-12 14:25:14 +02:00
reference/1.21.5 tachyne-world: initial public release 2026-07-10 14:55:45 +02:00
scripts Merge branch 'parity/vplace9' into parity/batch9 2026-10-03 10:47:44 +02:00
servercmd Vanilla generator mode: -generator and -preset, worldgen.json, the dimensions 2026-10-03 09:38:55 +02:00
worldread world: the dimensions as a table 2026-09-27 11:16:09 +02:00
.dockerignore tachyne-world: initial public release 2026-07-10 14:55:45 +02:00
.gitignore Registry and block-state generators read vanilla's own reports 2026-09-22 22:17:33 +02:00
CHANGELOG.md block_change names its dimension 2026-11-02 10:56:27 +02:00
CONTRIBUTING.md tachyne-world: initial public release 2026-07-10 14:55:45 +02:00
Dockerfile CI runs the race detector; the image build stops re-running tests; docs 2026-09-05 13:53:33 +02:00
go.mod Pin common 178e96f 2026-10-03 08:19:26 +02:00
go.sum Pin common 178e96f 2026-10-03 08:19:26 +02:00
LICENSE tachyne-world: initial public release 2026-07-10 14:55:45 +02:00
NOTICE tachyne-world: initial public release 2026-07-10 14:55:45 +02:00
README.md Shipyard: an empty void dimension to build in 2026-10-03 12:57:52 +02:00
tachyne-daemon in-game plugin surface: /daemon info + rate, /plugins 2026-07-12 16:06:52 +02:00
webmap plugin browser: always show the registry catalog 2026-07-12 17:50:57 +02:00

tachyne

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.

A Minecraft server written from scratch in pure Go, serving both Java and Bedrock clients. No Paper, no JVM, no protocol libraries — world generation, lighting, and the whole game simulation are original code; the only third-party runtime dependency is the NATS client behind the optional plugin bus.

Project status

Work in progress, actively developed. Status reviewed 2026-09-22.

A full survival game runs today and is actively played, but tachyne is chasing one-for-one vanilla parity and is not there yet. Expect rough edges, missing vanilla features, and breaking changes between updates.

Where parity actually stands. Vanilla's server-side surface is enumerated mechanically — registries, data files, and the behaviour hooks each class overrides — and graded unit by unit, rather than estimated:

Graded units OK PARTIAL MISSING N-A
2,413 1,316 (57%) 749 260 88

So 57% of vanilla's surface matches in normal play and 89% is at least present (re-graded against 26.3 on 2026-09-23; it was 51% and 84% on 2026-09-19). What the grades mean and how each area scores is in docs/PARITY.md; CHANGELOG.md is the whole-system timeline of what changes, release by release.

Who can connect. Java 26.2–26.3 and Bedrock (latest) share one world, no client mods needed. Older Java clients are told at login which versions are served — see What to expect.

Bug reports are genuinely useful — please open a GitHub Issue with your client version/edition and what you saw. Contributions are welcome too: see CONTRIBUTING.md.

Just want to run a server? The quickstart repo brings up the whole stack in one command — Docker Compose or Kubernetes, classic infinite survival by default, real-Cape-Town earth mode as a variant.

What to expect (vanilla parity at a glance)

tachyne's goal is full vanilla feature parity, and it is not there yet. This table is the honest summary for anyone deciding whether to run it; the detailed inventory follows in What works today. ✅ solid · 🟡 works with gaps · ❌ not yet.

Area Status Notes
Terrain, biomes, caves, lighting ✅ A new world can be started with -generator vanilla (and `-preset normal
Mining, crafting, smelting, containers ✅ Bundles in all seventeen colours (one stack's worth of anything by vanilla's per-item weight, contents in the tooltip, scroll to pick what comes out, and they nest at vanilla's surcharge). Vanilla's 1,058 crafting recipes, read from the game's own recipe data — a slot that takes any planks or any cobblestone-like stone accepts a mix of them, as in vanilla — with vanilla recipe-book progression (each recipe unlocks through its own vanilla recipe advancement, with the toast), the dynamic recipes no table can list (two damaged tools or armour pieces combine into one, a lingering potion ringed by arrows tips them, a shulker box or bundle and a dye recolour it with its contents, a patterned banner and a blank one make a copy, paper and gunpowder make rockets — the gunpowder setting how long they fly — and gunpowder with dyes makes firework stars (shape, fade, trail and twinkle) that up to seven at a time go into one rocket, a written book and book-and-quills make copies a generation up, a shield and a banner make the decorated shield, and armour dyeing, suspicious stew and the map recipes), furnaces, blast furnaces (ores at double speed), smokers (food), campfire cooking (four slots, food pops off the fire), chests (which refuse to open under a solid block or a sitting cat, as does a shulker box with no room for its lid), ender chests (per-player storage, shared between every ender chest and across dimensions), shulker boxes (contents survive being broken, travel with the item and show in its tooltip), decorated pots (crafted from four sherds or bricks and wearing them on its four sides, on the item and on the placed block; one item a click up to a stack, contents kept until the pot is broken and across restarts, fillable and emptiable by hopper), powder snow poured from its bucket and scooped back up, conduits (prismarine frame → Conduit Power, and a full frame attacks), hoppers/droppers/dispensers; stonecutter with the full vanilla recipe list. Every vanilla recipe is here — all crafting, smelting, blasting, smoking, campfire and stonecutter results — and the special ones work too: tool and armour repair, tipped arrows, shulker box and bundle dyeing, banner copies, firework rockets and stars, and book copies. Recipes hand back what they should: the three buckets and two bottles that leave their container behind come out of the grid empty rather than being eaten, and a patterned banner that is broken drops with its pattern. Dropped items have vanilla's physics: a block's drops pop out with vanilla's offset and hop and merge where they land, tosses arc from the eyes, items slide, fall off ledges, float up through water and drop when their floor is mined. Menus enforce vanilla's slot rules on the server (fuel, lapis, payment, armour, saddle, banner/dye/pattern, template slots; per-item stack caps) and shift-click quick-moves results into the inventory, repeating until the grid runs out or you have no room. Chest, ender chest and shulker lids animate for every player nearby, with their open and close sounds. Items taken from the creative inventory keep their components (potions, enchanted books, fireworks, banners, stews, names and dyes, bundles, shulker boxes, armour stand poses), creative ctrl+pick copies a container's, spawner's, banner's or shulker box's contents into the item, player heads keep and show their owner wherever they go, and tooltips show unbreakable, can_break and can_place_on.
Combat ✅ 1.9 cooldown model, crits, anvils that wear out with use, sweep, knockback, shields (an axe blow disables one for five seconds, the sweep drawn on the client as vanilla draws it — every server-side item cooldown, the goat horn and chorus fruit included, is shown the same way), bows, crossbows (quick_charge/multishot/piercing), tridents (loyalty/riptide, and impaling against the aquatic mobs vanilla marks sensitive to it rather than anything wet), the mace (smash attack + density/breach/wind_burst), spears (the jab that strikes everything on its line, and the lowered-spear charge whose damage is your closing speed; zombies and zombified piglins carry and charge with them), a swing at a ghast's fireball or a wind charge that sends it back along your look as your own shot (a ghast killed by its returned fireball is your kill, drops its Tears disc and earns Return to Sender), TNT (lit TNT hops, falls and is thrown by other blasts, so TNT cannons fire; every blast hurts by vanilla's exposure model: what the blast can see of you through the blocks scales the damage and the shove). Fireballs, wither skulls and the dragon's fireball are self-propelled as vanilla's are (no gravity, a push along the flight each tick, slower in water; a wind charge coasts). Every hit carries its vanilla damage type — including each projectile's own, so a fireball is not absorbed like an arrow — and the type decides what happens to it: whether armour absorbs the blow and wears from it, whether a shield, Resistance or an enchantment gets a say, and what it costs in hunger. So armour protects against lava, fire and a cactus but not a fall, the Warden's sonic boom shrugs off protection, A raised shield catches anything vanilla lets it catch — an explosion, a fireball, a wither skull, a bee sting — from its front arc, wearing by what it stopped, and a blow caught on it delivers nothing it was carrying. Enchantments are all but complete — the full protection family (fire/blast/projectile/feather falling, each keyed to its own damage type), Smite and Bane of Arthropods, Fire Aspect, Thorns, the utility and boots enchantments, and both curses, Channeling included. Fifteen of the implemented enchantments (the crossbow and trident sets, knockback, sweeping edge, the mace trio, soul speed and both curses) have no drop or table source yet, so they are reachable only by command. Damage carries vanilla's invulnerability window: for ten ticks after a blow, a smaller one does nothing and a bigger one lands only its excess. A shield works in either hand, the offhand included, and the F key swaps the two.
Trial chambers 🟡 Generated chambers with working trial spawners (waves scaled to how many players walk in, reward ejection, half-hour cooldown) and vaults that pay each player one reward for a trial key. Vault claims and spawner cooldowns persist, so a restart neither re-arms a spent spawner nor hands out a second reward. The omen chain is in: a slain raid captain drops an ominous bottle (levels I–V, as vanilla's 1.21 loot rolls it), drinking it gives Bad Omen, and a trial spawner that sees a player with Bad Omen turns it into Trial Omen (fifteen minutes a level) and goes ominous — its round restarts, breezes come in fours, each ejection pays from the ominous tables (keys three in ten), its zombies and archers come armed from the trial-chamber equipment tables, ominous item spawners drop lingering potions, tipped arrows and charges on the players from above, and the omen wears off with the cooldown. Ominous vaults take ominous keys. Their dispensers are armed and their corridor pots stocked from the chambers' own loot tables, so the arrow and fire-charge traps fire and a pot can hold a trial key.
Mobs 🟡 Behaviour is the furthest-behind area in the 2026-09-24 re-grade (docs/PARITY.md): most mobs' goal lists still differ from vanilla somewhere, and the work goes on daily. The complete vanilla living roster with vanilla attributes on a real modifier pipeline (base values plus stacking modifiers, as vanilla computes them) and the full status-effect system — mobs can be poisoned, slowed, strengthened or healed like any living thing, with the undead's inversions intact — and they take damage down the same tag-driven path a player does, so a mob's own armour protects it against lava and a cactus but not a fall — breeding on the full vanilla food list per species — a pig on carrots, potatoes or beetroot, a wolf on any meat or fish, a horse on golden carrots and golden apples, an axolotl on a bucket of tropical fish (the water stays behind) — with a fed baby growing a tenth faster each meal, hurt pets healing on their food (a tamed wolf gains vanilla's forty health), and the horse family's own meal table (wheat, sugar, apples and hay heal and grow, hay a llama's love) — and animals are tempted the way vanilla tempts them: hold a species' food (or the carrot or warped fungus on a stick that steers it) and every cow, pig, sheep, chicken, rabbit, horse, llama, camel, goat, frog, bee, turtle, panda, armadillo, sniffer, strider or axolotl within ten blocks trots after you at its own vanilla pace, stops short beside you, and loses interest for a few seconds once the food is put away — and a wild cat or ocelot creeps up on held fish only while you hold perfectly still (with the young trailing a parent as vanilla's do)/taming (pets wear a collar the owner can dye; a tamed wolf wears, cracks, breaks and repairs armadillo-scute armour as vanilla's does; pets follow at vanilla's distances — a wolf at your heel, a cat five blocks back, a parrot onto your shoulder — and blink to your side when they fall more than twelve blocks behind)/riding, leading them about on a lead — tie one to you, walk it, tie it to a fence and collect it again later, with vanilla's six-block elastic pull, its twelve-block snap, and hostiles and most water life refusing a lead as they do in vanilla — and vanilla natural spawning: per-category caps scaled by loaded chunks, spawns at any height (caves populate day and night), vanilla light rules (torch light blocks spawns, storms darken the sky enough for daytime monsters), per-biome weighted pools and pack sizes with every roster species in its vanilla place — mooshrooms on mycelium, turtles on beach sand, armadillos on savanna and badlands ground, camels in deserts, frogs in swamps and mangroves (cold, warm or temperate by the biome they spawn in), axolotls in lush-cave water over clay in their five colours (the rare blue one in 1200, and bred ones taking a parent's colour) — and distance-based despawning. Hostiles spawn dressed by the regional difficulty as vanilla dresses them — armour of a rolled tier, sometimes enchanted, as the world's days pile up; zombies with the odd iron sword or shovel, skeletons with bows, wither skeletons with stone swords, drowned with a rare trident or fishing rod, the weapon itself enchanted one time in four at the same regional odds (a Sharpness sword bites harder, a Fire Aspect one sets you alight, a Power or Flame bow shoots harder, burning arrows) — anything on an undead's head keeps the sun off it, wearing away under it until it breaks — on the 31st of October a quarter of them come up wearing a carved pumpkin or the odd jack o'lantern, which never drops — and what they spawned wearing seldom drops, though it keeps its enchantments when it does; one baby zombie in twenty rides a chicken and one spider in a hundred carries a skeleton, a strider now and then carries a zombified piglin with a fungus on a stick (or a calf), hard-mode spiders may spawn with a lasting effect, and a skeleton horse left by lightning springs vanilla's four helmeted horsemen on whoever comes near, as in vanilla. Mobs look the way vanilla's do: wolves wear the coat of the biome they spawn in (a pack shares one), cats come in all eleven coats (all-black under a full moon), horses roll a colour per herd and markings per horse (a foal blends its parents' odds) and have to be tamed the proper way — ridden bareback until they stop throwing you, sooner if you bring apples, llamas their four coats and a strength, parrots their five colours, rabbits, foxes and mooshrooms their biome types, pandas their two genes (a cub inheriting one from each parent, weak ones with ten health and cubs that sneeze twelve times as often, aggressive ones biting back, lazy ones lying on their backs, worried ones sitting out thunderstorms and keeping eight blocks from you, playful ones — and every cub — tumbling along, off a ledge for certain), and pigs, cows and chickens their warm, cold and temperate looks (a lamb wears the dye its parents' dyes would craft together — red and yellow an orange lamb — else a parent's colour) — rolled at spawn, inherited by vanilla's rules, kept across restarts, and rendered on every client, Bedrock included. Cod, salmon and tropical fish shoal — one leads, the rest follow and a straggler breaks off — and every fish darts away from a player within eight blocks. Animals panic at each species' own pace — a cow or rabbit sprints, a sheep trots, a llama barely hurries, a wandering trader slows — and at the things vanilla panics them over: fire, lava, a cactus, freezing, lightning, with a burning animal making for water within five blocks. Wolves and adult polar bears keep their nerve under a blow and run only from the environment, while zombie horses do not panic at all and an armadillo runs only from the environment (a blow rolls it up). Mobs slow to vanilla's four tenths on soul sand and honey. The land mobs vanilla floats — animals, villagers, creepers, spiders, the illagers — bob at the surface of deep water and swim across it; the undead, piglins, hoglins and golems sink and walk the bottom, as vanilla's do. Dropped items float: one that lands under water rises to the surface and bobs there, an upward bubble column throws it clear of the water and it drops back in to be lifted again (the item elevator), and a whirlpool pins it to the bottom. Mobs take up room: vanilla shoves overlapping ones apart every tick and now so does tachyne, so a herd spreads out instead of collapsing to a point and a bee cannot rest inside another bee — every species carries its real vanilla hitbox (babies at half, slimes scaled by size), the mobs vanilla exempts are exempt, and packing a pen past the cramming limit crushes what is in it. Mobs persist across restarts (mobs.json) — herds, farm animals with their gear and age, tamed pets, and villagers (profession, merchant tier and their exact trade stock included) survive a reboot; bosses are not saved. Signature hostile AI is in: the Warden (Darkness aura, armour-piercing sonic boom with vanilla's hard push along the beam, and vanilla's anger tally — a disturbance it hears adds thirty-five, an arrow ten, a blow a hundred, it hunts whoever it is angriest at, and the score ebbs a point a second until it digs away) and guardians/elder guardians (the lock-on beam that charges then fires, drawn on the client from the synced target, the thorn spikes that bite back at whoever melees one holding station, + the elder's Mining Fatigue curse). Cows, mooshrooms and goats can be milked, mooshrooms fill a bowl with stew (a brown one fed a flower gives suspicious stew with that flower's hidden effect, as does crafting one), shears turn a mooshroom into a cow and five mushrooms, take a snow golem's pumpkin off and a bogged's two mushrooms, an iron ingot mends a hurt iron golem (which now and then holds out a poppy to a villager beside it, and swings its arms when it punches), a charged creeper's blast leaves the head of whatever it killed (creeper, skeleton, wither skeleton, zombie or piglin — the only way to one in survival), flint and steel or a fire charge lights a creeper's fuse, a cookie kills a parrot, and a provoked llama spits rather than bites. Llamas form caravans: lead one on a lead and the free llamas within nine blocks fall in behind it, one after another, two blocks apart, and a wandering trader's llamas spit at whoever hits the trader. Horses vary the way vanilla varies them — health, speed and jump are each rolled per animal and a foal lands between its parents, so breeding for a good one means something — and the rolls reach the rider: every living thing's attributes are synced to the clients that see it the way vanilla syncs them (on first sight and on change), so a fast horse is fast under you, a high jumper clears the fence, and a player's own max health, reach and speed are whatever the server says they are. Sniffer eggs hatch, cracking twice before opening, and moss underneath halves the wait; the grown sniffer sniffs out diggable ground and digs up torchflower seeds and pitcher pods on vanilla's cadence. Witches brew for themselves and against you as vanilla's do — drinking water breathing under water, fire resistance when burning, healing when hurt and swiftness when you are far, slower for the thirty-two ticks a bottle takes — and throw slowness at a distant target, poison at a healthy one, weakness now and then up close and harming otherwise, the splash landing on everyone within four blocks, weaker with distance. Evokers cast all three of their spells — fangs erupting from the ground, summoned vexes, and wololo on a blue sheep within sixteen blocks when there is nobody to fight, with the casting arms every client animates — illusioners vanish behind their mirror images for a minute at a time and, on hard, blind you for twenty seconds between bow shots, a wither's two side heads pick their own victims — any living thing within twenty blocks that is not undead — fire at them on their own clock and, with nobody to shoot, lob skulls into the scenery, while a blow arms the block-smashing that follows twenty ticks later (bedrock and the wither-immune blocks stand); the dragon's body and head deal ten on contact while its wings deal five and throw you clear (a perched one deals nothing), and the ender dragon runs its full phase machine: circling, strafing runs with the fireball, landing on the exit portal, and the breath attack from its perch — and comes back with vanilla's ceremony when four end crystals are set around the exit portal: the portal closes, the beams point at the sky, the dragon growls, the beams sweep the pillars one by one as each goes up in a blast, and the crystals detonate to bring it back with a crystal on every pillar. The wandering trader turns up as vanilla's does — every twenty minutes the world rolls for one, a quarter chance rising by a quarter each miss, and one time in ten it appears within forty-eight blocks of someone with two leashed trader llamas, nine trades from vanilla's pools, forty minutes to live, invisibility at night and milk at dawn. Piglins, brutes and hoglins brought out of the Nether shudder and turn — a zombified piglin or a zoglin, nauseous for ten seconds — after fifteen seconds, as in vanilla. Hoglins fight their own way: a bite of half their damage plus a roll that throws you up and away, forty ticks between bites, warped fungus, a nether portal or a respawn anchor within eight blocks pacifies them and they walk off, adults keep clear of adult piglins and retreat when outnumbered, and a hurt piglet runs. Pillagers draw their crossbows for twenty-five ticks (the charging animation on every client), hold the bolt a second or two, fire and draw again — advancing at half pace while the bolt is on the string, as vanilla's goal does. An evoker stands still to cast, a vindicator keeps away from a creaking like the rest of them, and a vindicator you name Johnny attacks every living thing in reach. Villages are peopled as vanilla's are — the creatures the jigsaw's pieces carry: villagers (most unemployed, one in twelve a nitwit — green robe, no trades, never a job — one in twelve a child), the town centre's iron golem, the cats and the pen animals, each placed once as its part of the village comes into view. Villagers claim their own beds and workstations. A villager being traded with stands where it is and faces its customer rather than walking off mid-deal, and one with no bed claims a free bed within sixteen blocks — so a house you add to a village houses somebody — giving it up if the bed is broken. Villagers are born unemployed and take the nearest free workstation (one villager each, losing it when the block goes, and an unemployed villager yields a workstation to a neighbour whose trade it already is), breed on food when a bed is free and share food and wanted goods when they chat; they pocket the seeds, crops and bread they find, and a farmer at work harvests ripe crops, sows seed on bare farmland and bone-meals what is growing, as vanilla's does. Villagers run from the hostiles they fear at vanilla's ranges (zombies at eight, vindicators at ten, evokers and ravagers at twelve, pillagers at fifteen) and from whatever hurt them, at one and a half times their pace. Hostiles hunt by sight, as vanilla's do — a monster that cannot see you does not come for you, and one that loses sight of you gives up after three seconds (fifteen if you hurt it). Every ranged mob needs a line of sight to its target — a skeleton, pillager, witch, drowned, llama, snow golem, wither, ghast or blaze holds fire while a block is between, and a guardian's beam breaks off behind a wall. Ghasts never give chase — one drifts to a random spot within sixteen blocks, faces what it is shooting at and lobs from there, and it only targets someone within four blocks of its own height — charging for twenty ticks before a fireball (the warning cry, the red eyes) and resting forty, blazes flare up, wait a moment and fire three fireballs six ticks apart on a spread that widens with distance, then rest five seconds. Zoglins go for anything living that is not a zoglin or a creeper, endermen go for endermites, wild cats hunt rabbits and turtle hatchlings on land and ocelots hunt chickens, wild wolves hunt sheep, rabbits, foxes and turtle hatchlings on land, every wolf goes for skeletons, and a tamed wolf goes for whatever hurt its owner or whatever its owner hits (never a creeper, a ghast or a fellow pet). Phantoms fly vanilla's attack — circling five to fifteen blocks around a point ten to thirty above you for eight to twelve seconds, then diving to your level with the swoop cry and climbing back — and call one off when a cat is within sixteen blocks (the cats hiss). Frogs breed the way vanilla's do — no baby frog appears; one of the pair carries a clutch, lays frogspawn on the water from the bank, and it hatches two to five tadpoles three to ten minutes later. Tadpoles grow into frogs of the biome's kind after twenty minutes (a slime ball hurries them), a summoned vex past its time wastes away rather than vanishing and shows its charge, and bats settle under a solid block and hang there upside down until it goes or a player comes within four blocks, and parrots mimic the monsters within twenty blocks now and then. Sheep graze as vanilla's do — a sheep on grass lowers its head now and then and eats it (the block to dirt, or the short grass gone), which is the only way its wool grows back and helps a lamb grow — and striders off lava shiver, go purple, walk a third slower and head back to the nearest lava within eight blocks — as a stranded dolphin or axolotl heads for water within twelve. Shulkers keep their shell shut (twenty points of armour, arrows glancing off), peek out now and then, open wide and fire a bullet every one to five seconds at anyone within twenty blocks, teleport up to eight blocks when hurt below half health, and, struck by one of their own bullets, teleport away and may leave a new shulker behind, as vanilla's do. A hurt squid squirts a cloud of ink and jets away from its attacker (a glow squid goes dark for five seconds too), one ender pearl in twenty lands an endermite that lives two minutes, and a polar bear with a cub within eight blocks turns on anyone within ten, a hit bear rouses every adult bear around it (a hit cub only rouses the others), and a bear about to bite rears up with a warning growl. A silverfish you hurt calls its friends out of the infested blocks around it, and one left alone burrows into stone, cobblestone, stone bricks or deepslate, leaving the block infested. A ravager's bite stops it for ten ticks; a bite caught on your shield either stuns it for forty (half the time, after which it roars, hurting and hurling everything within four blocks) or hurls you instead; and a ravager stopped by leaves tramples them. The breeze fights the way vanilla's does: it never walks at you but slides to a spot behind you, draws breath and long-jumps there on a high arc, lands, and in the moments after a landing inhales and fires a wind charge (or shoots from where it stands when it cannot jump). The creaking haunts the pale garden: a heart inside a pale oak sends one out after dark, it freezes while you look at it, your blows land on the heart instead of on it, and breaking that heart is the only thing that stops it. Spiders, wolves, cats, ocelots and foxes spring at a target two to four blocks off (the leap that lands on you, as vanilla's does). After dark a zombie, husk, drowned or zombie villager standing in a village walks through it rather than milling about, and raises its arms while it is really chasing something. A drowned keeps to vanilla's rules: by daylight it only hunts someone in the water with it, heads back to the water when the sun catches it ashore, comes out onto the beach at night, and a trident one closes to ten blocks and throws from there instead of circling like a skeleton. Spiders hunt by the light where they stand, not by the clock — neutral from light twelve up, so one in a dark cave comes for you at noon — and lose interest now and then once they are in the light. Endermen play vanilla's staring contest: held in your crosshair one stops and stares back, blinks away if you come within four blocks, blinks towards you when you look away past sixteen, and vanishes if the sun catches it in the open. The warning level that summons a Warden lives on the player as vanilla's does — shared with whoever is near, raised once every ten seconds at most, fading after ten quiet minutes — and every shrieker response drops Darkness and, before the fourth, the growl from below. Spiders climb the wall they walk into and drowned swim rather than trudging along the seabed; endermen carry blocks about; allays collect matching drops for the player who handed them an item (or for a note block they heard), dance to jukeboxes and duplicate with an amethyst shard; frogs eat small slimes and magma cubes (froglights by variant), panda cubs sneeze, every wolf is born with one of vanilla's seven voices (and growls, pants or whines rather than saying the one thing), salmon come small, medium and large, cats bring morning gifts, piglins admire and barter for gold ingots (and spare anyone in gold armour), back away from soul fire and the soul lights within eight blocks and keep six blocks from a zombified piglin, armadillos roll up at a threat and shed scutes, foxes sleep by day, stalk chickens, rabbits and fish, trust the players who bred them (a cub trusts whoever fed its parents, never runs from them, and goes for whatever hurt them), and carry off (and eat) what they find, axolotls hunt fish, squid and tadpoles within eight blocks (resting two minutes after a hunt), always fight drowned and guardians, play dead and regenerate when hurt under water, and reward whoever finishes their foe within twenty blocks with regeneration and an end to mining fatigue, a dolphin has four minutes of air and surfaces to breathe when it runs low (and, like every fish, squid and axolotl, dries out on land on vanilla's clock), a dolphin tosses any item it finds floating within eight blocks about (and chases it again), a dolphin that sees you swimming within ten blocks races over, keeps you company and gives you Dolphin's Grace while you swim, a dolphin fed a fish leads you to the nearest shipwreck or ocean ruin, pufferfish puff up in two stages at anything that comes within two blocks and sting whatever touches them (poison for three seconds a stage), goats ram — lining up four to seven blocks out, lowering their heads, then charging whatever is in the way for a shove and a bite, or snapping a horn off against a log, stone or ore, and every thirty to sixty seconds an idle goat picks a ledge or gap within five blocks it cannot walk to, crouches, and long-jumps it on a steep arc (one goat in fifty screams, one in ten is born with a horn already gone — and the model shows exactly the horns it still has), rabbits raid gardens for grown carrots when hungry (a stage a bite, the whole plant off a seedling), snow golems leave a trail of snow, pelt any hostile within ten blocks with snowballs (which only a blaze feels) and melt in deserts, savannas, badlands and the Nether, zombies, husks and drowned seek out turtle eggs within twenty-four blocks and stamp a clutch to nothing in sixty ticks, a turtle caught on land heads for water within twenty-four blocks (a hatchling at twice the pace) and a grown one more than sixty-four blocks from its beach swims home now and then, a hatchling that grows up leaves a scute (the only source of them), turtles breed an egg rather than a hatchling — the mother carries it back to her beach and lays a clutch on the sand that cracks twice and hatches in the hour before dawn, the hatchlings calling that nest home (the egg shows on the mother, and she digs while she lays), copper golems carry items from copper chests to plain and trapped ones — sixteen at a time, opening each lid as they work, waiting their turn at a chest someone else has open, and resting a while when there is nothing left to carry, an idle camel folds its legs and sits now and then and gets up later (a rider pushing forward, a hit or water stands it up, with the fold and rise animated on every client), and a tamed, saddled nautilus is ridden under water and dashes the same way, keeping its rider breathing on Breath of the Nautilus, and a saddled camel dashes when its rider lets go of the jump key (the camel's sound, animation and cooldown are the server's; the lunge itself is the riding client's, as in vanilla). Mobs keep clear of what vanilla's do — rabbits, foxes, wild cats and ocelots and evokers of players at vanilla's ranges and paces (a tamed cat, or one after your fish, is not shy) — and a skeleton backs off from a wolf, a creeper from a cat or ocelot, a spider from an armadillo that has not rolled up, a rabbit from a wolf or any monster, a fox from a wild wolf or a polar bear, a dolphin from a guardian, the illagers from a creaking, and a wild wolf from a llama it judges too strong — walking to a spot on the far side and sprinting while the threat is close. A grown panda that spots bamboo or a cake lying within eight blocks fetches it, sits down with it and chews it up over a few seconds (a bored or hurt one drops it), as vanilla's does. When you go to bed your cat pads to the foot of it, watches you for a moment and curls up lying there until you wake (one cat to a bed), and a tamed cat left to itself will lie on any bed it finds. A tamed cat left to itself finds a chest nobody has open, a lit furnace or the foot of a bed within eight blocks, walks onto it and sits there for a minute or three, as vanilla's do. A wolf that sees you holding a bone or any of its food within eight blocks tilts its head and watches you for a few seconds. Skeletons fight at the bow goal's own distances: they close while you are outside fifteen blocks, circle you inside it, drift out under seven and a half and back in past thirteen — and one holding a sword rather than a bow walks in and swings instead. A skeleton (stray, bogged) caught burning in the open with nobody to shoot at and no helmet on heads for the nearest roofed, dim spot it can find, as vanilla's do. A skeleton left standing in powder snow freezes into a stray, taking vanilla's two clocks to do it and losing both the moment it steps out of the drift; the conversion carries its gear, its name tag and its refusal to despawn across. On hard difficulty one zombie in ten (more as the days pile up) can break doors: stopped by a closed wooden door on its way to you it beats on it, thudding and cracking the door in ten stages for twelve seconds, then knocks it off its hinges — iron and copper doors hold, and mob griefing off stops it. The 26.3 sulfur cube hops about harmlessly and swallows blocks: handed one (or finding one on the ground) it becomes a ball that bounces, slides, floats and takes knocks by that block's archetype instead of damage, a swallowed TNT lights and blows up like the block, a magma block burns whatever touches it, shears pop the block back out and an empty bucket scoops the cube, block and all — it spawns in the sulfur caves, and comes from eggs, /summon and buckets too. One naturally spawned husk in ten, given room, rides out on a 26.3 camel husk: the husk drives it with an iron spear and charges at four times the pace, while a parched shoots from the back seat and takes the reins if the husk falls. A camel husk sits, dashes and carries a saddled player like a camel, heals on rabbit's feet but never breeds, and despawns like a monster unless a player has interacted with it. A few behaviours are still simplified (no spider wall-climb for cave spiders on ceilings, and a drowned's dry-land pathing does not seek water), mobs tick every game tick as vanilla's do (goals on vanilla's every-other-tick cadence) and walk by vanilla's physics — friction, gravity, true block shapes, step-up and knockback arcs. Knockback launches a mob about three blocks (off a ledge, if there is one), a killed mob's loot pops out, and creaking hearts root only between logs and die with their creaking. Every species has its hurt, death and ambient voice (drowned switch to their underwater one, small slimes squeak), eyes at vanilla's per-type height, vanilla's footsteps (each block's sound type, or the species' own footfall) and idle chatter at vanilla's cadence, and baby monsters drop and pay as vanilla's do. Mobs watch you and glance about while they idle, call their neighbours in when struck, amble at each species' own stroll speed, and hunt vanilla's full target list — villagers, iron golems, endermites, squid, chickens, baby turtles — not just players; monsters keep to the dark. Entities are tracked per viewer as vanilla tracks them: what comes into view is spawned for you in full, what leaves it is dropped.
Survival loop ✅ Hunger/saturation, XP with the vanilla curve, death/respawn with vanilla's own death messages (sent as translatable messages, so each player reads them in their own language, and chosen by what killed you, including the "using " and "while trying to escape X" forms), beds (anchored to the head half like vanilla, with the occupied blanket and a proper stand-up beside the bed on waking; sleeping shows vanilla's players-sleeping status) and respawn anchors (a bed only works in the overworld and an anchor only in the Nether — anywhere else, using one detonates, exactly as vanilla intends), and the full status-effect registry — every effect vanilla has, applied as vanilla applies it (most are attribute modifiers), the trial-chamber omen included. Vanilla's small rules hold too: peaceful difficulty heals and feeds you, exhaustion caps at 40, swimming costs food, golden apples and chorus fruit go down at full hunger, foods carry their vanilla consume effects (raw chicken and rotten flesh may bring hunger, spider eyes and poisonous potatoes poison, a pufferfish poisons, starves and sickens, honey lifts poison, and a chorus fruit blinks you to nearby ground), powder snow freezes anyone not wearing leather, hay, honey, beds and slime blocks soften or swallow a fall, turtle eggs crack underfoot, redstone ore glows when you step on it, a big dripleaf tips under your weight on vanilla's clock (and drops you once it has folded, unless a redstone signal pins it flat; an arrow tips it at once), source water over soul sand rises as a bubble column and over magma whirls down (the column climbs the water above it, collapses to water when the block under it goes, spreads like the water source it is, carries a swimming mob up or drags it down, and you can breathe in it), a burning player or mob in a water cauldron is put out at the cost of a level and a lava cauldron sets whoever stands in it alight, ravagers trample crops, sand and gravel sink through water rather than resting on it, and the hand tools do what vanilla's do on a block — shears cap a kelp or vine head so it stops growing, a water bottle turns dirt to mud, a spawn egg retargets a monster spawner, a firework rocket lit against a block launches from it, and an end crystal set on obsidian or bedrock in the End stands as a crystal, four of them round the exit portal bringing the dragon back; a filled map used on a banner pins a marker of its colour that goes when the banner does — lightning sets whatever it strikes alight for eight seconds on top of its damage, a mined spawner or sculk block pays its experience and an infested stone lets its silverfish out — and a totem of undying in either hand cheats death exactly as vanilla's does.
Advancements ✅ The full vanilla advancement tree with vanilla reveal rules, toasts, chat announces and XP rewards. Nearly every criterion fires from live play now — items used on blocks (vault keys, anchor charging, jukeboxes, glowing signs, smoked hives), interactions with mobs, crafting and smithing recipes, crafters, archaeology loot, projectile hits and kills (including a crossbow's multi-kills), mace smashes, shield deflections, lightning, levitation, falls, Nether fast travel, end gateways, target blocks, sculk catalysts, spyglass sightings, effect sets, structure visits (stronghold, trial chambers) and what you stand on. A few criteria wait on mechanics not built yet (dragon respawn, Nether and End structures).
Enchanting / anvil / brewing 🟡 The vanilla enchantment engine: the table's three rows come from vanilla's own cost roll and weighted selection over every enchantment's real level windows, item sets and exclusive sets (a gold sword rolls higher than diamond, an axe never offers Smite, treasure enchantments never come from a table), loot chests and the fishing treasure book use the same roll (ancient cities hand out Swift Sneak, bastions Soul Speed, ominous vaults Wind Burst), and the anvil applies only what the item supports and what its current enchantments allow, at vanilla's per-enchantment prices. all 42 of vanilla's enchantments have server-side effects (Channeling calls lightning down on a trident's target, or a lightning rod it hits, in a thunderstorm); librarians sell an enchanted book at every tier from one to four (vanilla's random tradeable enchantment and price, emeralds plus a book), and an item carries up to eight enchantments. The anvil is vanilla's own bench: it mends gear with the item's own material (a quarter of the bar per ingot, gem or plank, a level each and only as many as it needs from the stack), merges two enchanted books into one, combines two of the same item, renames — a rename on its own capped at 39 levels and free of the prior-work ladder — and charges vanilla's prior-work penalty on everything else. The grindstone strips an item back to its curses, merges two of the same item's durability with vanilla's five-per-cent bonus (the curses of both coming across), and hands back what the enchantments it removed were worth. At the table a bookshelf only counts when the cell halfway to it is clear, and the three offers come from a seed the player keeps across closing the window and logging out, spent only when something is enchanted. Brewing is vanilla's full recipe table: every potion (night vision, invisibility, leaping, fire resistance, swiftness, slowness, the turtle master, water breathing, healing, harming, poison, regeneration, strength, weakness, slow falling, and the 1.21 four), redstone for the long and glowstone for the strong forms, the fermented spider eye corruptions, mundane and thick, gunpowder for splash and dragon's breath for lingering — brewed per bottle, as the stand does (dragon's breath is collected in a bottle from a cloud the dragon left, which is what opens the lingering half at all). A potion (and a tipped arrow) carries its effects to the client, so the liquid is tinted by what is in it — Swiftness cyan, Harming red — and the tooltip lists each effect with its duration; a thrown potion bursts in that colour. Splash and lingering potions throw and work (proximity-scaled splash, real shrinking effect clouds, dispenser- and witch-thrown); a tipped arrow passes on an eighth of its bottle's duration and a lingering cloud a quarter, as vanilla's duration scales say. Netherite armour carries knockback resistance — a tenth a piece — so a full set barely moves when it is hit. Ender pearls and wind charges throw from the hand on their vanilla cooldowns (a second and half a second, the sweep shown on the client); a thrown wind charge hurts what it hits a point and bursts, the burst throwing everyone near it as vanilla's explosion does (burst one at your feet for the wind charge jump; the breeze's reaches three blocks).
Villages & trading 🟡 Generated villages in all five biome styles (plains/desert/savanna/snowy/taiga, chosen by the biome they sit in), villager schedules/pathfinding (villagers glance about, follow what caught their eye, and keep vanilla's rules for the bell, going to work and taking a profession), iron golem (the village's own — five villagers who have slept within the day and are standing together agree on one, vanilla's quorum, so a village with no beds grows none — or one a player builds from iron blocks and a carved pumpkin — snow golems build the same way; a golem comes after whoever strikes it, as vanilla's does), merchant screen trading; 13 professions with vanilla tier leveling (novice→master, trades unlock as the villager earns XP) and daily restocks, including the endgame offers that make levelling one worth it: a master armorer, weaponsmith or toolsmith sells enchanted diamond gear, a fletcher an enchanted bow and crossbow, a fisherman an enchanted rod — each enchanted when the tier unlocks and priced by the roll — and a cartographer sells explorer maps to a real ocean monument, woodland mansion or trial chamber near it, plus maps to the villages, swamp huts and jungle temples of the biomes it did not grow up in — a leatherworker dyes the leather it sells, a farmer sells a suspicious stew hiding one of six effects, a fletcher tips arrows with a tradeable potion, a fisherman buys its home biome's boat, and the offers that ask for an item beside the emeralds (cod for cooked cod, gravel for flint) trade as they should. Every offer comes straight from 26.3's trade data — its villager trades, the trade set each level draws from and how many offers it draws (a master librarian now sells candles, and the name tag has moved to the wandering trader) — read out of the vanilla jar rather than transcribed. Each offer carries vanilla's own price multiplier, so armour, bells, saddles, explorer maps and enchanted gear react four times harder to demand and to reputation than the rest. The wandering trader's pools are 26.3's too, down to its enchanted pickaxe, its bottle of Invisibility and its name tag. Every completed trade pays the player experience, three to six an exchange and five more when it levels the villager up. Villagers persist with their profession, tier and exact trade stock, and wear them: the biome they were born in dresses them (desert, jungle, plains, savanna, snow, swamp, taiga), their profession shows on their coat and their tier on its badge. Prices react like vanilla's too: a per-player trading-reputation discount, a Hero of the Village discount, and demand markup on heavily-used trades (reputation is per-session for now). Zombies hunt villagers when no player is near, and a killing bite turns the villager on Normal (half the time) or Hard (always) into a zombie villager that keeps its profession, tier and trades; a golden apple fed to a weakened zombie villager starts vanilla's three-to-five-minute cure (iron bars and beds nearby speed it up), and the cured villager comes back with everything, queasy, owing its curer a steep discount. Villagers run from a zombie within eight blocks. Reputation is vanilla's gossip system: each villager keeps the five gossip types at vanilla's weights and caps (a trade, a cure, a blow, a murder in sight), gossip fades a little each day, spreads between villagers that stand together, follows a villager through infection and a restart, sets the trade discount, and turns the village's iron golem on a player who has fallen to −100 with any villager near it.
The Nether / The End 🟡 Both dimensions with portals (mobs and dropped items travel through them too, not just players), nether mobs (spawned by the same vanilla NaturalSpawner as the overworld's: each nether biome's own pools and pack sizes, the soul sand valley's and warped forest's spawn costs keeping their ghasts, skeletons, endermen and striders spread out, striders in lava at chunk generation, the fortress's garrison inside its walls, and the End's endermen), brewing ingredients, the full dragon fight + elytra (with firework rockets to boost it), and the outer End islands with the gateway ring out to them. The Nether is closed by vanilla's bedrock roof at y=127. Bastion remnants stand in the Nether — assembled from the real vanilla jigsaw pools in all four flavours (housing units, hoglin stables, treasure rooms, bridges), with the pools' own rule processors cracking and crumbling the blackstone, chests on the vanilla bastion loot tables, and a garrison of piglins, brutes and hoglins seeded from the templates' mob pieces when a player first arrives (a cleared bastion stays cleared). End cities rise on the outer islands' highlands — a port of vanilla's own piece generator growing towers, fat towers and bridges from the real end_city templates, one ship per city with its elytra in a frame, treasure chests on the end_city_treasure table, and shulker sentries seeded from the templates' markers when a player first arrives. Nether fortresses span the Nether — a port of vanilla's own piece generator (the bridge crossings, straights and end fillers, the stairs rooms, room crossings, monster thrones and the castle's entrance, corridors, turns, balconies and nether-wart stalk rooms, on vanilla's weight tables, reach limit and height band), with the corridor chests on the nether_bridge table, blaze spawners on the thrones, and the fortress's own garrison — blazes, wither skeletons, zombified piglins, skeletons and magma cubes at vanilla's weights — spawning on its floors. A fourth dimension, the shipyard (tachyne:shipyard), is an empty void to build in — vanilla's "The Void" with its start platform, under the overworld's sky — saved apart from the survival world and reached with /execute in tachyne:shipyard run tp @s 8 -60 8.
Block support 🟡 Blocks need what vanilla says they need: a floor, plantable soil, tilled farmland, the wall behind them, a ceiling above, or the face they grew on. Applied at placement (no rails or flowers in mid-air) and on every block change, the engine's own included (mine a wall, wash it out with water or push it with a piston and its torches, ladders and signs come down, cascading). Torches, coral fans, lanterns, vines and cocoa place by the player's look order as vanilla's do — a torch goes on the wall you face or the floor you look down at, a lantern hangs from the ceiling you look up at, a vine takes only a face something holds, a lever or button picks floor, ceiling or wall. Slabs double, candles, sea pickles and turtle eggs count up and snow piles in layers when the same item is placed onto them, and a hopper's spout points into the block it was placed against. Vines, glow lichen, sculk veins and resin clumps attach by the face and hang from a vine above (vines spread along, round, up and down walls on random ticks as vanilla's do), and scaffolding carries vanilla's distance-from-support (the seventh out falls). Sugar cane needs water beside the block it stands on, a cactus refuses a solid or lava neighbour and stands only on sand or cactus. Bamboo roots in sand, dirt, gravel or bamboo, and chorus stems and flowers follow vanilla's own rules (a stem on end stone or a stem, or hanging off a supported one; a flower on a stem or beside exactly one).
PvP ✅ Melee between players runs the full swing — weapon damage, the 1.9 attack cooldown, criticals, the mace's full smash — the fall-distance damage bonus, the shockwave that throws everyone standing near whoever you hit, and wind_burst launching you back up to chain them, Knockback and Fire Aspect — against the same armour, protection, shield and absorption pipeline mobs hit. Kills count on the scoreboard, on both the player and total criteria. Arrows count too, and Thorns bites back at whoever landed the blow, reaching the archer who loosed it as readily as the fist that threw it. All of it gated on the pvp gamerule.
World border ✅ A real border with /worldborder (get/set/add/center, damage amount and buffer, warning distance and time), persisted with the world. Straying past it hurts, scaled by how far out you are and starting only beyond the buffer. A border can be set to move over a number of seconds, and a player joining mid-move picks up the tail of the animation rather than seeing it jump. Nothing spawns naturally outside it — vanilla tests the border in every spawn-placement rule, so shrinking the border stops the world filling in past the wall as well as hurting whoever strays there.
Explosions & sponges ✅ Creepers, TNT, ghast fireballs and the wither's spawn charge cast vanilla's explosion rays (its skulls shatter without one), so craters are ragged and blast resistance genuinely attenuates — obsidian stops a blast and shields what stands behind it, soft ground lets one punch further. Sponges drink up to 64 blocks of water around them (kelp and seagrass included) and turn wet. Every block a blast breaks rolls its real loot table (TNT mines stone into cobblestone and ores into their gems; decaying blasts keep one item in the radius); a flaming arrow primes TNT and lights campfires and candles.
Fluids ✅ Water and lava flow with vanilla slope-seeking spread and recede, and wash out whatever does not block motion on the way — crops, torches, dust, carpets, flower pots — water dropping the block's loot as it goes, while doors, signs, ladders, sugar cane and waterloggable blocks hold; lava meets water as obsidian/cobblestone/stone; infinite water sources form from a 2×2; concrete powder sets to concrete on water contact; blocks placed into water waterlog (and release it when broken). Buckets scoop sources and pour them back (water boils off in the nether), and a water bucket scoops a fish, axolotl or tadpole into a mob bucket that releases it — persistent, never despawning — wherever it is poured; cauldrons hold water, lava and powder snow — bucket and bottle transfer, banner washing, and slow rain/snow fill under open sky. Water waits its vanilla 5 ticks between steps and lava 30 (10 in the Nether), so basalt generators work, and water and lava currents push mobs, items and TNT over their whole body, as vanilla's do.
Growth 🟡 Hoe dirt, grass or a dirt path into farmland and plant it (a shovel flattens the same ground into a dirt path, or puts out a lit campfire; shears carve a pumpkin toward the side you click and pop its seeds out; a ripe sweet berry bush picks back to its first berries and a berried cave vine gives up its glow berry, both by hand, and a copper golem statue cycles through its four poses on a click (an axe scrapes or unwaxes it instead); an axe strips logs, wood, stems and bamboo to their stripped forms, scrapes an oxidation stage off copper or takes wax off it, honeycomb waxes copper against the weather, and a compass held to a lodestone becomes a lodestone compass that points home, a recovery compass points to where you last died, and armour or an elytra used from the hand goes straight on (swapping with what was worn)): wheat, carrots, potatoes, beetroot, melon and pumpkin seeds, torchflower, pitcher pods, and nether wart on soul sand. Plants grow by brightness, so a torch-lit indoor or underground farm works. Crops, sugar cane, cactus, nether wart, grass and mycelium spread, copper weathering and leaf decay all run on the random tick, in whichever dimension you are standing in. Saplings grow their own species — oak, birch, spruce, jungle, acacia and cherry singly; dark oak and pale oak from a 2×2, as in vanilla. Bone meal advances crops, grows saplings, turns an azalea bush into the azalea tree (flowering patches, rooted dirt and all), and scatters grass and flowers; melon and pumpkin stems grow fruit. Ice and snow freeze and melt by block light, so a torch keeps a pond liquid. Budding amethyst grows buds through to full clusters. Kelp and the three vine families climb or hang; bamboo grows to full height; mushrooms spread across dark ground. Chorus flowers climb, branch and die back in the End; mangrove propagules ripen and grow. Composters take vanilla's full list of plant matter at vanilla's chances and pay out bone meal. Pointed dripstone grows — stalactites lengthen and raise stalagmites — drips water or lava into a cauldron under the tip, and impales anything that lands on a stalagmite. Bone meal answers every vanilla target, huge fungi, moss patches and lichen included, and seeds the sea floor.
Redstone 🟡 Power on vanilla's own model — sources power their neighbours weakly, the strong ones (a lever or button into the block it hangs from, a torch into the block above, plates, detector rails, lecterns and sculk sensors into the block beneath, diodes and observers out of their front, dust into the block it points at) drive a solid block that then powers everything it touches, and whether a block conducts is decided per state from the game's collision data with vanilla's exemptions — so a lever behind a wall, dust ending in a block, or a torch under one all work. Dust connects as vanilla connects it (recomputed from its surroundings; a lone connection extends into a line; a lone cross clicks into a dot and back, and stays a dot until something connects to it), and all of it runs in every dimension, not only the overworld and sits wherever vanilla lets it — a full block, a top or double slab, an upside-down stair, a closed top trapdoor, a hopper — and nowhere else. A trapped chest is a source at the strength of its viewer count, driving the block beneath it strongly, and a torch flipped eight times in sixty ticks burns out with vanilla's fizz until its restart delay passes. Dust, torches, repeaters (with locking), comparators (container fullness, subtract mode, and the non-container readings — cake bites, composter level, cauldron and honey levels, respawn-anchor charge, end-portal-frame eye, detector rail, a chiseled bookshelf's last-touched slot, and which disc a jukebox is playing), observers, pistons with quasi-connectivity and vanilla's structure resolver (slime and honey blocks drag what they touch, glazed terracotta is push-only, fragile blocks break, block entities and obsidian stop the push, a sticky piston pulls a slime chain back, and whoever stands in the way is carried along; the move is instant, no animation yet), pressure plates, buttons, levers (a wind charge's gust presses and flips them too, swings wooden doors, trapdoors and gates, rings bells and snuffs candles, as vanilla's trigger blast does), targets, tripwires, note blocks, dispensers with vanilla's whole behaviour table (projectiles, buckets and mob buckets, spawn eggs, armour onto whoever stands in front, boats and carts, TNT, fire, bone meal, shears, honeycomb, chests onto pack animals, carved pumpkins that build golems, shulker boxes, glowstone into anchors, a brush on an armadillo)/droppers/hoppers (feeding furnaces and brewing stands by face, as vanilla's slot rules say), barrels (a real 27-slot container with a lid that opens while viewed), crafters (auto-craft on a redstone edge through the same recipe resolver a crafting table uses — tipped arrows, dyed armour, rockets and transmutes included — with the full menu — a live result preview, per-slot disable toggles, hopper fill that targets the emptiest enabled slot, and a filled-or-disabled comparator read), redstone-fired TNT, copper bulbs (rising-edge toggle + light + comparator), and the sculk family — a game-event vibration system driving sculk sensors (distance-scaled power + frequency comparator), calibrated sensors (frequency-tuned), shriekers (warning levels → Warden), and catalysts (vanilla's charge spread: a death's experience creeps out over ticks as veins and sculk on natural ground, and sprouts sensors and shriekers from older sculk). A deep tier 1+2. A comparator also reads a decorated pot's single slot a creaking heart's distance to its creaking, and a copper golem statue's pose, as vanilla's does. All fourteen buttons and sixteen pressure plates work with vanilla's sounds, press lengths, sensitivities and weights (arrows press wooden buttons and plates; dropped items press wooden and weighted plates). Doors, trapdoors and fence gates sound as vanilla's do; iron doors answer only to redstone. Vanilla timing, tick for tick: a change reaches its neighbours within the same tick, and components that wait do it on vanilla's scheduled ticks (run by priority, then in the order they were scheduled) — so dust and lamps answer at once, torches in 2 ticks, repeaters in 2 per delay step (passing pulses shorter than their delay one delay long), comparators in 2, observers pulse 2 ticks after a change for 2 ticks, dispensers and crafters fire 4 ticks after their edge, pistons move on the tick's block events and their blocks land 2 ticks later, lamps go dark four ticks after power leaves, and plates and detector rails release twenty ticks after the last press. Clocks run at vanilla's period, and a torch clock too fast for its torch burns out as vanilla's does. Lecterns pulse on a page turn and read their page to a comparator; a struck lightning rod powers for eight ticks. A daylight detector reads the sky light that actually reaches it against the sun's eased angle, so a roof, a tree or a thunderstorm brings its output down. Dust carries a signal the whole length of a line within one tick.
Structures 🟡 Villages in all five biome styles (plains/desert/savanna/snowy/taiga, assembled from the real vanilla jigsaw templates — houses/streets/town-centre, set on the land as vanilla sets them: streets following the ground, houses meeting the street at the water's surface over ponds, built-up ground under overhangs; populated from what the pieces carry — villagers, the town centre's iron golem, cats, pen animals, camels, a zombie village's zombie villagers — each placed once as its part comes into view; villagers claim their own beds, workstations and bell, and stroll back toward the village when they wander; per-house loot chests), dungeons (vanilla's monster rooms — rare here, because they need open cave air that this engine's caves seldom leave them), mineshafts (a port of vanilla's mineshaft pieces — domed rooms, corridors with timber supports, cobwebs and rails, crossings, stairs, cave spider nests with their spawners, chest minecarts with the abandoned-mineshaft loot, and the dark oak mesa variant in the badlands), strongholds (a port of vanilla's stronghold pieces — the whole maze of corridors, doors, prison cells, crossings, stairs, libraries and chest rooms with their vanilla loot, around the portal room and its silverfish spawner), ruins, desert temples, ruined portals, pillager outposts (assembled from the real vanilla jigsaw templates), deep-dark ancient cities (assembled from the real vanilla jigsaw templates — deepslate halls, sculk, and ~20 loot chests), ocean monuments (a block-for-block port of vanilla's monument pieces — the full 58×58 prismarine shell with wings, entrance archways, roof and sea-lantern lighting, and the interior: the rooms, the gold-block core, the wings, the penthouse and the sponge rooms, facing any of four ways, patrolled by guardians and elder guardians), shipwrecks (supply/treasure/map chests), ocean ruins, trail ruins, and beach buried treasure. Structure chests fill from the real vanilla loot tables — weighted, with enchanted gear — deterministically per chest. Igloos, shipwrecks (all 20 hull variants, random rotation, template-marked supply/map/treasure chests — and beached wrecks half-buried in the sand of beaches), ocean ruins (all 48 vanilla pieces: sandstone ruins in warm oceans, stone-brick ruins with their cracked and mossy overlays in the rest; a large ruin three times in ten, usually with a cluster of four to eight small ones scattered round it; vanilla's decay, the piece's loot chest, drowned seeded at the template markers when a player arrives, and up to five suspicious sand or gravel blocks per piece that brush from the real warm/cold ocean-ruin archaeology tables), trail ruins (the buried jigsaw tower with its halls, roads, buildings and decor assembled from the real templates fifteen blocks under taiga, old-growth birch and jungle ground, the pool processors weathering the gravel and mud bricks, and the capped archaeology rules seeding each piece's suspicious gravel with the common and rare trail-ruins tables), ruined portals (10 standard + 3 giant variants, rotated, with the vanilla decay pass — in the overworld and, with vanilla's blackstone masonry, on the Nether's cavern floors), pillager outposts, ancient cities, villages (all five biome styles), trial chambers, the Nether's bastion remnants and the End's cities are now generated from the real vanilla structure templates (a pipeline bakes the 1.21.11 NBT templates; outposts, cities, villages and chambers assemble via the vanilla jigsaw system) — and desert temples are a block-for-block port of vanilla's pyramid piece (the stepped shell, corner towers and terracotta motifs, the TNT-trapped treasure well with its four chests, and the sand-filled cellar under the east side with its broken stair, where five to seven suspicious sand blocks and one in the collapsed roof hold the desert-pyramid archaeology table; the piece faces a random way and settles on the lowest ground under it). The surface ruins and buried treasure remain hand-built stand-ins being migrated onto it. The terrain adapts around outposts, ancient cities, trial chambers, trail ruins and strongholds as vanilla's does, igloos face any way, and villages carry their decorations (piles, flowers, cacti, berry bushes). Trial chambers stamp their full vanilla layout (corridors, chambers, spawner/vault rooms, supply chests) and both mechanics run: trial spawners cycle their six states, scaling waves to the number of players and ejecting rewards, and vaults unlock with a key and pay each player once. Desert wells dot the desert, each hiding two caches of suspicious sand for a brush to find — the loot tables behind them are the real vanilla archaeology ones. Woodland mansions are a faithful port of the vanilla grid solver + placer (three floors of real room templates, corridors, staircases and roof, assembled with per-piece rotation/mirror) in dark forests, populated with evokers, vindicators and allays at the vanilla marker positions when a player arrives (a cleared mansion stays cleared across restarts). Jungle temples (traps that fire their arrows, puzzle and chests), swamp huts (witch and cat at home), nether fossils (locatable), and ruined portals by biome (buried, overgrown, mountain, ocean-floor, swamp, underground) aged as vanilla's. 26.3's abandoned camps (a tent and campsite in eighteen biome styles, from the real 26.3 templates, with camp loot and their trees) settle onto slopes the way vanilla's terrain adaptation does. Explorer maps are 26.3's own map items, from cartographers and treasure chests.
Vehicles 🟡 Boats in all ten woods (poplar included) and the bamboo raft, plus their chest variants (sneak-click opens the cargo, which spills when the boat breaks); minecarts on auto-shaping rails with vanilla's classic cart physics rolled by the server — gravity, slopes that speed a cart up and slow it down, powered rails that boost a rolling cart and brake it when unpowered, the station start off a solid block, activator rails that throw the rider off, and a rider whose keys only nudge a resting cart. The special carts are all here: the chest cart (27 slots, spills when broken, rolls more freely the emptier it is), the hopper cart (five slots that suck up items on the track or draw from a container above, switched off by a live activator rail, and read by hopper blocks and comparators like any container), the TNT cart (lit by an activator rail, a blast or a punch while moving, a wall hit or a three-block fall at speed sets it off, and the blast grows with its speed but spares the rails) and the furnace cart (coal pushes it away from whoever fed it, half the usual speed, lit while it burns). A rolling empty cart scoops up the mob in its path and carries it until the cart breaks, the classic mob transport. Parked boats and carts survive restarts, and they exist in every dimension — a boat launched on a Nether lake or a cart on an End rail behaves like an overworld one, and each player only sees the vehicles of the dimension they are in.
Statistics ✅ The vanilla Statistics screen: blocks mined, items crafted/used/broken/picked up/dropped, mobs killed and killed by, and the custom counters — play time and the clocks, every distance by how you moved (walking, sprinting, crouching, jumping, falling, climbing, swimming, flying, gliding, riding), the damage family, every block menu opened, and the one-shot events — persisted per player.
Scoreboard & teams ✅ /scoreboard objectives (incl. auto criteria: deaths, kills, health, and the statistic criteria — minecraft.custom, mined, used, crafted, broken, picked_up, dropped, killed, killed_by, teamkill, killedByTeam) on sidebar/list/below-name, with objectives modify, players get/operation/display and number formats; /team with colors, prefixes, name-tag and collision rules and /team empty, friendly fire enforced as vanilla's (on by default, with seeing invisible teammates); persists with the world.
Shelves ✅ The 1.21.9 wooden shelves: three display slots swapped with the held stack, redstone-linked rows of up to three that swap with the hotbar, comparator output, contents shown to 1.21.11 and 26.2 clients (older clients have no shelf).
Signs ✅ All wood types as standing/wall/hanging/wall-hanging signs with the vanilla edit GUI, both text sides, dyes, glow ink, waxing; text persists with the world and rides chunk loads.
Paintings ✅ All 47 placeable variants with vanilla selection (largest that fits, random among ties), pop on punch or lost support, persist with the world.
Plugins ✅ In-process Go plugin API: Bukkit-style events (priority ladder, cancellable/mutable), weather/time/creature-stat mutations (plus five of the gamerules), custom commands with tab-completion, tick scheduler, per-plugin config + storage — see docs/PLUGINS.md. Out-of-process NATS bus for any-language observers.
Filled maps ✅ Craft an empty map and it draws the world vanilla-style as you explore (terrain colors, depth-shaded water, slope shading), with live player and item-frame markers, and the off-map edge arrow. Cloning (map + empty maps) and zoom-out (map + 8 paper) work in the crafting grid, and the cartography table zooms, clones, and locks maps; maps persist with the world. Banner markers are still to come. A shipwreck's map chest holds a real treasure map: centred on the nearest buried treasure, with the red cross on it.
Item frames ✅ Regular + glow frames on any block face: insert any item (8-step rotation on click), two-stage punch (item pops first, then the frame), support-loss drops, persist with the world. A framed map renders and pins the green frame marker on that map.
Note blocks & jukebox 🟡 Note blocks with the full instrument set (block-below picks the instrument, mob heads above imitate), vanilla pitch/particles, right-click tunes and a punch plays; muffled when covered. Note blocks fire on a redstone rising edge too. Jukeboxes take all music discs, play/stop for everyone nearby, eject on click, drop the disc when broken, and persist.
Books, lectern, bookshelf 🟡 Book and quill: write up to 100 pages, sign to a titled written book, read via the vanilla screen; contents persist and follow the book everywhere. Lecterns hold a book for shared reading (page turns broadcast, take button returns it); chiseled bookshelves store six books addressed by where you click.
Armor stands ✅ Placed from the item (45° yaw snapping), dressed by clicking with armor (swaps preserve enchantments and trims), undressed empty-handed, broken with the vanilla quick double punch — the stand and its gear pop — and by blasts, arrows and fire as vanilla's are. /summon takes the Small, ShowArms, NoBasePlate, Marker and Invisible tags (an armed stand holds an item; an invisible stand or marker takes no damage). Persist with the world. No poses yet.
Mount inventories ✅ Sneak + right-click a horse-family mount for its inventory: saddle and armor slots (llamas take carpets), chest-on-donkey/mule (15 slots) and llamas sized by strength; everything drops on death. Mount inventories share the mobs' current lifetime (persisted across restarts with the mob).
Loom & banners 🟡 The vanilla loom: banner + dye (+ optional pattern item) with the full selectable-pattern list, up to 6 layers; patterned banners render in inventories and keep their patterns when placed. A broken patterned banner currently drops plain. Leather armour dyes in the crafting grid with vanilla's colour blending and washes clean in a cauldron.
Smithing table ✅ Netherite upgrades (diamond gear keeps its enchantments, damage, name and trim) and all 18 armor trims with the 11 materials — identical re-trims refused, different trims replace.
Beacon 🟡 Vanilla pyramid tiers (1–4 layers of iron/gold/diamond/emerald/netherite), the beam needs an open sky column (glass passes), the menu takes a payment item and a power choice (tier-gated: speed/haste → resistance/jump boost → strength → regeneration or level II), and effects pulse to everyone in range every 4 seconds. Powers persist with the world.
Locator bar ✅ 26.2 clients see other players as direction markers on the locator bar (the world's positions ride a new engine frame the gateway renders only for 1.21.6+ clients; the locator_bar gamerule toggles it (turning it off stops new updates; existing markers clear on relog)). /waypoint list names the transmitters in your dimension and /waypoint modify recolours (team colour or hex) or restyles a player's marker, kept in their data.
Commands & gamerules 🟡 ~70 commands including /execute (as, at, positioned, rotated, facing, align, anchored, in, on, summon; if/unless block, blocks, entity, score, biome, dimension, loaded, items, function and stopwatch; if data and if slots with 26.3's slot sources; item predicates with tags, components and predicates; store result/success into a score, boss bar, or block, entity or storage NBT), /data (get, merge, modify, remove on entities, block entities and command storage; players read-only; modify … compute included; an entity's custom data survives restarts), data packs from the world's datapacks/ folder (folders or zips) with functions, macros and function tags (#minecraft:load, #minecraft:tick) run by /function /return /schedule /reload and managed by /datapack and their item, block, entity, fluid and biome tags, crafting and cooking recipes, loot tables, predicates and item modifiers (a pack's advancements, stonecutting and smithing recipes and worldgen are listed but not applied yet; changed tags reach Java clients on /reload), /place (template, jigsaw, structure for every structure the engine generates — mansions, monuments, fortresses, strongholds, End cities and the rest, with their loot, spawners and inhabitants — and feature for trees, huge mushrooms, ores, disks, springs, dungeons, geodes and sculk), /fillbiome, /time (26.3's clocks: set to a time or a time marker, add, pause, resume, rate, of <clock> and the timeline queries) /summon (every entity the engine models, at your position, with the common NBT: NoAI, Silent, Invulnerable, CustomName, Rotation, Motion, a TNT fuse, an item, variants and age; keys it does not model are refused by name) /waypoint /trigger /rotate /xp (points and levels) /locate (structures and biomes) /msg /tell /me /teammsg /kick /clear /spawnpoint /setworldspawn /defaultgamemode /playsound /stopsound /tellraw /particle (every particle, options included, with per-axis spread and force) /enchant (players and mobs) /seed /advancement /attribute /recipe /tag /ride /damage /spreadplayers /forceload /random /swing /bossbar /save-all /save-off /save-on /version /stop /fetchprofile, /give with item components (enchantments, names, lore, damage, unbreakable, potions, dyes, trims, banner patterns, fireworks, books, loaded crossbows, bucket data, and adventure mode's can_break / can_place_on), /item (replace, fill, override and modify with inline item modifiers), /loot, /setblock, /fill and /clone (block states with properties and block entity data, vanilla's fill and clone modes and block predicate filters; a clone carries container contents), plus the world admin set. Targets take vanilla's selectors — @s @p @a @r @e with type=, distance=, limit=, sort= name=, advancements=, nbt= and predicate= (and a negated type=!), reaching every kind of entity, so /kill @e[type=zombie,distance=..16] does what you expect — and coordinates take ~ (relative) and ^ (local, along your look), so /tp ~ ~10 ~, /tp @e[type=cow] ~ ~ ~5 and /summon creeper ^ ^ ^5 work. Arguments may be quoted, and each command checks vanilla's operator level (1–4, set per operator with -ops name:N); a player's command list shows only what their level allows; 37 gamerules are wired to real systems, under vanilla's snake_case names with the legacy camelCase spellings still accepted as aliases (keep_inventory, advance_time, advance_weather, spawn_mobs, spawn_phantoms, spawn_patrols, spawn_wardens, raids, mob_griefing, fire_spread_radius_around_player, allow_entering_nether_using_portals, players_nether_portal_default_delay, projectiles_can_break_blocks, global_sound_events, tnt_explodes, block_drops, mob_drops, natural_health_regeneration, fall/drowning/fire damage, water/lava_source_conversion, player/elytra_movement_check, pvp, show_advancement_messages, show_death_messages, immediate_respawn, random_tick_speed, players_sleeping_percentage, locator_bar, send_command_feedback, log_admin_commands, max_command_sequence_length, max_command_forks).
Fishing ✅ The vanilla bobber (cast physics, bobbing, the wait → wake → nibble sequence with rain/sky modifiers), the fish/junk/treasure loot pools at vanilla weights, Lure and Luck of the Sea, the open-water treasure rule, rod durability, XP per catch — and reeling a hooked mob yanks it toward you.
Raids 🟡 Killing a pillager-patrol captain grants Bad Omen; carrying it into a village converts it to Raid Omen — vanilla's thirty-second fuse — and the raid starts when that runs out. Vanilla's wave tables and per-difficulty wave counts (3/5/7), all five raider types with their mounted riders, and the raid boss bar; winning grants Hero of the Village (40 min), which discounts villager trades. Vanilla's per-difficulty bonus spawns pad the waves, a Raid Omen above level one brings the bonus wave and a stronger Hero of the Village, villagers ring the village bell while the raid is on (lighting the raiders up) and, once it is won, walk up to the heroes and throw them gifts from their profession's tables, a raid in progress survives a restart with its raiders, and when a wave's captain falls, one of its raiders picks up the dropped ominous banner and leads the wave.
Online-mode auth / chat signing ✅ Online mode works: set TACHYNE_ONLINE_MODE=on on the Java gateway. Players sign in with their Mojang account and join as its real UUID, with skins, and player data is keyed by that UUID. Bedrock players get a stable Xbox-based identity. Java chat is signed end to end (secure chat: chat keys, message chains and acknowledgements checked at the gateway), so it is reportable and shows the <name> style; /msg, /say, /me and /teammsg are signed too and arrive with vanilla's chat decorations. Bedrock and offline chat is relayed unsigned.

Multi-version is a headline feature: Java 26.2 and 26.3 clients share one world (older Java clients are told at login which versions are served), and Bedrock (latest release) joins through its own gateway — survival HUD, every container and workstation screen (crafting, furnaces, anvil, enchanting, trading, smithing, loom, stonecutter, beacon…), the creative inventory, portal travel and Bedrock-to-Bedrock skins all bridged, with a short list of remaining Bedrock-specific limits in that gateway's README. Content newer than a client's own version is downgraded rather than sent regardless: blocks it has never heard of arrive as a block of the same shape (26.3's poplar as birch on 26.2), items as air, and newer mobs as their nearest sensible stand-in, so an older client is never handed an id its registry cannot resolve. The engine's content ids are 26.3's, and so are its loot, recipes, fuel and trees, with 26.3's new content: wool and concrete stairs and slabs, the poplar wood set and poplar trees, the dappled forest and abandoned camps, and its advancement tree. Most worldgen data is still 1.21.11's while 26.3's reworked data formats are brought in piece by piece, each with the content it adds.

This repo is the world engine of the tachyne cluster: it speaks no Minecraft wire format at all ("worlds are versionless"). It emits typed domain events over the attach protocol (-attach :25500); per-protocol gateway pods terminate real clients, render events into canonical 1.21.5 (770) wire via the shared tachyne-common/render770 package, and apply a translation chain to the clients served. Deployed today: 26.2 and 26.3 (776–777) via tachyne-gw-java-776, behind the version-routing tachyne-ingress front door. See docs/DOMAIN-EVENTS.md (the architecture and how it got this way) and docs/SHARDING.md (the multi-pod plan).

What works today

World

  • Seeded procedural terrain: continents, erosion, ridged peaks, 3D caves with natural surface entrances, ore veins (coal → diamond)
  • The full biome system (worldgen/biomes.go): a temperature × humidity × elevation climate model places the whole 1.21.5 overworld set — plains, forests (oak/birch/dark-oak/flower/cherry), taigas (spruce + old-growth), jungles (+ bamboo/sparse), savanna, deserts, badlands (banded terracotta), swamps + mangrove, meadows, mushroom islands, snowy plains/taiga/slopes, peak tiers (frozen/jagged/stony), windswept hills, every ocean temperature variant, carved rivers, and vertical cave biomes (dripstone/lush/deep_dark/sulfur); the Nether and End are split into their sub-biomes too. Each biome lays its own surface blocks and decorates with the matching trees + ground flora, which in turn drives the habitat-specific mob spawns.
  • Real two-pass lighting (sky + block), relit block by block on every edit the way vanilla's light engine does; torches light caves, dawn light ramps
  • Block breaking/placement with orientation (stairs, slabs, logs, furnaces), tool-gated drops, falling sand/gravel, flowing water/lava, crop growth
  • Fire (flint & steel, burn-out, a real burning status doused by water/rain) and TNT — primed-entity fuse, chain reactions, blast resistance honored
  • Persistent world: block edits survive restarts (edits-as-diffs); generated chunks cached in Valkey/Redis or a local dir (pure cache — always safe)

Survival

  • Health, hunger, saturation/exhaustion, fall/drown/lava/cactus/void damage, eating with the vanilla chew timer, death drops + bed respawn points
  • Full inventory + 2×2/3×3 crafting, furnaces + blast furnaces + smokers (fuel + per-recipe cook times, persisted), campfire cooking (lit-fire slots render the food, standing on one burns you), chests (27 slots, persisted), beds (sleep skips night with the vanilla fade)
  • Tool durability + functional armor (damage reduction, visible on others)
  • XP: orbs from player kills, coal/diamond mining and smelting (paid when you collect the output), orbs that hop, fall, bounce and home in, the vanilla level curve, 7×level dropped on death; levels persist with the inventory. An award is paid in vanilla's denominations and orbs lying together merge into one that pays out over several touches, so a farm does not carpet the floor with motes
  • Status effects: the complete vanilla registry — all 38, from the familiar regeneration/poison/strength/speed/fire resistance and instant health/harm through levitation, resistance, absorption, slow falling, conduit power, dolphin's grace, darkness and the trial/raid omens to the 1.21 set (wind charged, weaving, oozing, infested — on mobs as well as players, so an ominous trial's dead leave gusts, cobwebs, slimes and silverfish behind) — golden apples work, active effects save with the player so a relog keeps them (and tick in every game mode), witches poison, /effect for ops (players and mobs, infinite durations, hidden particles); splash and lingering potions dose mobs too, and a hostile that picks up gear stops despawning
  • Enchanting: real enchanting table UI — lapis + levels, three rolled offers scaled by surrounding bookshelves (a shelf counts only with a clear cell between it and the table), and the three offers hold on the player's own seed until something is enchanted. All 42 of vanilla's enchantments have real server-side effects — the whole protection family, Sharpness, Smite and Bane of Arthropods, Fire Aspect, Thorns, Fortune, Looting, Silk Touch, Efficiency, Unbreaking, Mending, the bow/crossbow/trident sets, and the boots and utility enchantments, Channeling included. The table, loot and anvil all run vanilla's own selection engine over the real enchantment data (weights, level windows, item sets, exclusive sets, treasure and loot tags); an item carries up to eight. Glinting works on every supported client version; plain books enchant into enchanted books
  • Anvil + grindstone: mend gear with its own material (diamonds for a diamond pickaxe), merge enchantments (book onto book included, equal levels combine upward), repair from a sacrifice, rename items — for enforced level costs, with vanilla's prior-work penalty; the grindstone strips an item back to its curses, merges two of the same item, and refunds what the enchantments were worth
  • Cartography table: zoom a map out with paper (up to the vanilla scale cap), lock it with a glass pane (a frozen copy that stops updating), or duplicate it with an empty map (copies share the same live picture)
  • Beacon: vanilla pyramid detection with all four tiers, sky-column check, the payment menu with tier-gated powers, area effects on the vanilla 80-tick cadence, and the client-rendered beam

Progression

  • Recipe book: vanilla unlock progression — a fresh player's book starts empty and recipes reveal themselves through their own vanilla recipe advancements (most as you first obtain an ingredient), with the "new recipes unlocked" toast and the badge; clicking an entry auto-fills the crafting grid from your inventory; book tabs' open/filter state and your unlocks persist across sessions. All four tabs are live: the furnace, blast-furnace and smoker books list their recipes with the cook time and the experience each one banks, filed under the same tabs vanilla files them under, and clicking one loads the ingredient into the open cooker
  • Advancements: the complete vanilla advancement tree (story, nether, end, adventure, husbandry — 126 advancements, 26.3's) with vanilla semantics end to end: the tree reveals itself as you progress (earned advancements plus a two-step frontier; hidden ones appear only once earned), toasts pop, completions announce in chat with the vanilla task/goal/challenge phrasing, challenge XP rewards pay out, and progress persists per player. Criteria fire from live gameplay — items obtained and used, mobs killed and interacted with, biomes and structures visited, dimensions entered, animals bred/tamed, trades, enchants, brews, sleep, recipes crafted, projectiles landed, falls, lightning, effects — the whole trigger set, including the sulfur cube's Uh Oh and the sulfur caves of Adventuring Time.

Combat

  • 1.9-style attack cooldown (spam-clicks scaled to a fifth), jump crits at ×1.5 with particles, sword sweep, real knockback that sends mobs flying (sprint hits shove harder), full swing/crit/sweep sound set
  • Player bows: charge-held draw (speed, damage and pitch scale with it), arrows consume ammo, hit mobs with knockback + XP credit, and stick in walls where you can walk over and retrieve them; snowballs + eggs throw
  • Crossbows: hold to charge (quick_charge shortens it), stays loaded until you fire, then looses a fixed-power bolt; multishot fires three at once and piercing punches a bolt through several mobs
  • Tridents: charge-held throw that sticks and is retrievable; loyalty flies it back to your hand, riptide launches you through water or rain, and impaling hits wet targets harder — enchantments survive the round trip
  • The mace: a smash attack — hit a mob while falling and the drop adds massive bonus damage (and negates your own fall damage), with a shockwave that flings nearby mobs; density scales the bonus, breach punches through armor, and wind_burst launches you back up to chain smashes

Mobs

  • Farm animals — cows, chickens (eggs, and thrown eggs hatch chicks), pigs, sheep (shear for wool, it regrows) — in herds that wander, graze and rest; feed a pair anything on their vanilla food list (a pig takes carrots, potatoes or beetroot; a wolf any meat or fish), walk together and breed a baby that grows up (a panda wants bamboo in reach as well as the food) — a fed baby grows faster, a hurt pet or horse eats to heal, and they trot after anyone holding their food (a pig after a carrot on a stick, and using it sends the mount sprinting at the cost of the stick)
  • Hostiles: zombies, skeletons (kiting bow AI, real arrows), spiders, creepers (fuse + craters), biome variants (desert husks, snowy strays, shoreline drowned), slimes that split when killed, neutral endermen that teleport and drop pearls (throwable — with the 5 HP landing toll), and potion-lobbing witches
  • The full 1.21.5 creature roster (species.go) — every remaining vanilla species as a data table, attributes matching the vanilla server source: land passives (wolves/foxes/goats/rabbits/horses/pandas/ polar bears…), water life (squid, cod/salmon/tropical fish, dolphins, guardians), flyers (bats, parrots, bees, phantoms), the illager patrol (pillager/vindicator/evoker/illusioner + vexes), nether mobs (piglin, piglin brute, hoglin/zoglin, strider, wither skeleton, ghast), and the wither boss. Each carries its real health/speed/armor/follow-range, melee or projectile attack, loot table, XP value and sounds; mapped onto shared archetypes (swim/fly/walk locomotion, skittish flight, neutral-pack retaliation, ranged kiting). Natural spawning is the vanilla model: every loaded chunk rolls spawn attempts at a random height through the whole column — caves fill with monsters around the clock while the surface only spawns them in darkness (or under a thunderstorm's darkened sky); torch light is absolute protection; the per-category mob caps (monster, creature, ambient, water creature, water ambient, axolotls, the glow squid's own) scale with the chunks players can spawn into, globally and per player as vanilla's local cap does; species, weights and pack sizes come from vanilla's own biome data for every biome (the cave biomes down a column included), with vanilla's per-species cluster limits (fish in eights, horses in sixes, a ghast alone), a five-percent baby after a pack's first animal (every rabbit after the first), and the far-away despawn distances per category. Natural spawning IS vanilla's NaturalSpawner: one attempt per chunk per tick, the three-group pack loop, the full distance gates, and the one-time chunk-generation packs as land loads at each biome's own probability. There is no other spawner and nothing seeds animals at boot. All are /summon-able by name.
  • Mobs collide with each other — vanilla's pushEntities/push: every living entity shoves the pushable ones its box touches apart each tick, with vanilla's own arithmetic quirks (the shove weakens as a pair converges, and vanishes entirely inside a hundredth of a block), its exemptions (bats, the ridden, a watched creaking) and its maxEntityCramming crush. Each species carries the hitbox from its vanilla entity-type registration. Players are not pushed: the client owns its own position here, so there is no server-side velocity to add to
  • Signature behaviors from source: cave-spider/bee poison bites (normal+hard only), wither-skeleton wither, wolf/bee packs that turn on an attacker together, ghast/breeze/shulker/wither projectiles, the guardian charge-beam, phantoms diving from the night sky
  • Riding + taming: saddle and ride horses/donkeys/mules/camels/pigs/striders (client-simulated movement over the vehicle path, sneak to dismount); tame wolves with bones, cats with cod, parrots with seeds — tamed pets follow you, sit on an empty-handed right-click, and teleport to you when left too far behind; a tamed parrot lands on your shoulder (two at once), chatters there, stays through a relog, and hops off when you jump, swim, sleep or get hurt
  • Interest-managed relaying + periodic absolute resync; measured to ~150 concurrent players on one box (measured with the since-deleted cmd/swarm TCP load tester — pre-c15e1e4 in git history)

Feel

  • Weather: the vanilla two-timer cycle (independent rain and thunder spells — a thunderstorm is their rare overlap), levels that fade in/out, state that survives restarts; lightning at vanilla odds prefers lightning rods within 128 blocks, then sky-exposed creatures, starts fires on normal+, and can drop a skeleton trap horse; no rain or bolts over deserts or snowfields; rain shields the undead at dawn, sleeping resets the cycle, /weather <clear|rain|thunder> [duration] + doWeatherCycle for ops
  • Beach waves (-waves, opt-in, deliberately non-vanilla): a thin sheet of water rolls in from the ocean, washes up the beach slope, and recedes back out — pulsed swells (a quick wash-in, a gentler roll-back, then a pause before the next) with a gently scalloped waterline, rendered as flowing water that thins to a soft sloped film at its edges and spills over each step of the beach as falling water. It climbs a beach one block at a time (never scaling a 2-block step) and animates along the whole visible shoreline. It is a pure client overlay — the water is shown to nearby players but never written to the world (no persistence, no fluid simulation, no collision), so it can't touch the vanilla water model or the save. Off by default because it departs from vanilla on purpose
  • Sounds throughout — mob growls/hurt/death, combat, explosions (with the real boom + mushroom cloud), XP dings, level-ups, chests, enchanting — sent inline-by-name so they work identically on every client version
  • Block-break particles + sound for other players (world events), and each block's own place sound when it goes down

Redstone (tier 1 + 2)

  • Power sources (levers, buttons with real press timers, redstone torches that invert, redstone blocks), dust that carries decaying 15-block signal, and consumers: lamps, iron doors, and TNT that primes when powered — simulated as a one-block-per-tick ripple on the server tick loop
  • Strong and weak power, vanilla's way: a source powers its neighbours weakly; a lever or button drives the block it hangs from, a torch the block above it, plates, detector rails, lecterns and sculk sensors the block beneath, diodes and observers the block in front, dust the block it points at — and a solid block so driven powers everything around it. Conductors are decided per block state from the game's own collision shapes, with vanilla's exemptions (glass, ice, glowstone, sea lanterns, beacons, redstone blocks, pistons, TNT, leaves, copper grates and bulbs never conduct; soul sand and mud always do)
  • Repeaters (directional, right-click cycles the 1-4 delay, refresh signal to 15), comparators (compare + subtract modes, and they measure container fullness through their back), observers (watch a block, 2-tick pulse on change), pressure plates (entity occupancy scanned every tick; weighted plates count standers) and daylight detectors (the sky light reaching the block against the sun's real angle — a roof or a storm dims them — invertible)
  • Pistons + sticky pistons: push up to 12 blocks, crush fragile ones, sticky retraction pulls; obsidian/bedrock/containers are immovable; moved blocks and the head slide over two ticks as vanilla's moving_piston cells do
  • Dispensers (shoot arrows, prime TNT, pour buckets), droppers, and hoppers (pull from the container above, vacuum dropped items, push into the container they face — furnaces take input from above, fuel from the side; powering a hopper pauses it) — all with real openable windows, contents persisted like chests

The End (complete)

  • A third dimension: the floating end-stone island with its ring of ten obsidian pillars over the void (shuffled by the seed, caged and capped, the exit podium standing from the start), black-sky End ambience via the dimension registry, the vanilla 5×5 obsidian spawn platform — /end (op) travels there
  • Strongholds: vanilla's buried stone-brick mazes far from spawn, with the portal room holding the twelve-frame end-portal ring over lava; throw eyes of ender to find them (the eye flies toward the nearest stronghold), fill the frames — twelve eyes open the portal, step in to travel; the End's exit portal comes home
  • The dragon fight: the ender dragon circles the pillar ring, swoops at survival players, and heals while any end crystal survives — pop the crystals (they explode), bring it down, and the exit portal opens with the dragon egg, an XP shower, and the elytra as the prize (glide speeds are honored by the movement authority, and the wing wears out a point a second and gives up at its last one)

The Nether (foundation)

  • A real second dimension: nether-mode terrain generator (cavern sponge through netherrack, lava sea, glowstone crusts, soul sand, quartz ore, bedrock floor), its own persisted world file and chunk cache, no sky light, vanilla nether fog/visuals via the dimension registry — /nether (op) toggles dimensions with vanilla 8:1 coordinate scaling
  • Real obsidian portals: build a frame (up to 21×21), light it with flint & steel, stand inside 4 seconds (instant-ish in creative) and travel — the far side builds a linked return portal on arrival
  • Brewing: wild nether wart on soul-sand floors (plantable — farms grow in the overworld), water bottles from any water, and the brewing stand: wart makes Awkward, then blaze powder/sugar/glistering melon/spider eye/magma cream/golden carrot brew Strength/Swiftness/Healing/Poison/Fire Resistance/Night Vision — all drinkable, bottle returned. The stand works the way vanilla's does: a blaze powder is swallowed on sight for twenty brews, the bubbles and fuel gauge move, bottles show on the model, and a brew in progress survives a restart
  • Nether mobs: zombified piglins (neutral until you hit one — then the pack holds a grudge), magma cubes (split on death, drop magma cream), and blazes (fireballs that set you alight; player kills drop blaze rods) — every entity system is now dimension-aware, so mobs, drops, arrows and XP stay in the world they belong to

Villages

  • Generated villages — assembled from the REAL vanilla structure templates and jigsaw pools in all five biome styles (plains, desert, savanna, snowy, taiga), chosen by the biome they sit in — populated with villagers across 13 professions, trading emeralds through the vanilla merchant screen (server-validated, with tier leveling and daily restocks), and an iron golem that spawns on vanilla's five-villager quorum, hunts hostiles and launches them skyward
  • Villagers use doors and pathfind — they roam their village on an A* route (goal-directed, not random wandering), open the wooden door in their way and shut it behind them, and climb the one-block step out of a doorway. Fixes villagers boxed inside their own houses (they used to bounce forever on the random-wander AI until a player dug them out). Iron/copper doors stay shut — only wooden doors are mob-openable, as in vanilla
  • Villagers follow a daily schedule — they stand at their profession workstation through the morning, gather at the village bell around midday, roam in the afternoon, and walk home to their bed at night (lying down to sleep, up again at sunrise). Anchored to each house's deterministic bed + workstation and the village bell; between times they glance about and follow what caught their eye

World structures

  • Surface lakes (water, occasionally lava), vanilla's monster rooms (rare on this engine's caves) — cobblestone spawner rooms with live mob spawners (each showing the mob turning in its cage, as vanilla's do) and loot chests — vanilla's mineshafts (rooms, corridors, crossings, stairs, spider nests, chest minecarts) and crumbling surface ruins; all pure functions of the seed, so chunks agree without shared state
  • Structure chests fill on first open from the real vanilla loot tables (dungeon, desert temple, ruined portal, pillager outpost, and per-profession village-house chests) — weighted entries, enchanted books and gear, scattered across the chest the way vanilla does, and deterministic per chest so a chest always holds the same haul

Vehicles

  • Rails with auto-shaping (corners, slopes; powered/detector/activator variants), minecarts that ride rails, and boats for all nine woods — riding is client-simulated like vanilla with the server validating every vehicle move; detector rails press under carts; punch a vehicle to pop it back into an item

Access control

  • Cluster logins are authorized at the GATEWAY by the tachyne-access policy service (whitelist/bans/roles, fail-closed); sessions arrive at the engine with gateway-stamped identity claims. Skins: the textures blob rides the PlayerInfo domain event, so everyone renders everyone's skin.
  • The engine keeps its own gatekeeper.json layer for /whitelist + /ban//pardon op commands. Online mode (Mojang session auth and the encrypted login) lives in the Java gateway (TACHYNE_ONLINE_MODE=on). The world keys player data by UUID and moves name-keyed data at each player's join, or all at once from a uuidmap.json.

Scoreboard & teams

  • Full op-driven scoreboard: objectives with dummy, automatic or statistic criteria (deaths, kill counts, health as a live hearts gauge, blocks mined, items used or crafted, mobs killed, team kills…), shown on the sidebar, player list or below name tags, with number formats; per-player scores with set/add/remove/reset/get and players operation
  • Teams with display names, colors (name tags recolor for everyone), prefixes/ suffixes, friendly-fire (on by default, as vanilla's) and visibility/collision rules; joining a team moves you out of the old one, and the whole board persists with the world

Signs

  • Every wood type as standing (16-way rotation), wall, ceiling-hanging (attached under chains/non-full blocks) and wall-hanging signs; the edit GUI opens on placement and on right-click, per vanilla's single-editor rule
  • Both text sides independently editable (walk around the sign to edit the back), with dye colors, glow ink / regular ink, and honeycomb waxing to lock the text; §-format codes are stripped server-side like vanilla
  • Text rides the chunk packet's block-entity data on load and live block_entity_data updates on edit, and persists with the world (signs.json)

Multiplayer & authority

  • Central 20-TPS hub goroutine owns all state; connections are I/O-only
  • The server validates everything a client claims: creative-slot conjuring, melee reach, window-click fabrication, movement (speed budget, teleport cap, fly detection, noclip — all rubber-banded), mining speed (fast-break cheats revert), and chunk streaming follows only the validated position; suffocation damage backs it all up
  • Chat + commands: /execute /data /function /datapack /place /scoreboard /team /give /kill /xp /summon /effect /weather /difficulty /gamerule /time /tp /gamemode /list /say /locate — with client-side tab-completion (the brigadier command tree is sent on join); difficulty scales mob damage (peaceful clears hostiles), and 28 gamerules — under vanilla's snake_case names, with the legacy camelCase spellings still accepted — persist in settings.json
  • Optional NATS plugin bus (subscribe to game events / send commands from any language) and LLM-driven NPC villagers (OpenAI-compatible endpoint)

Build & run

go build ./...
go test ./...                                # headless game tests (add -race for hub work)
ATTACH_TOKEN=dev go run ./cmd/server         # attach-only engine on :25500

The engine has no Minecraft port (-addr is a deprecated no-op). A real client connects through a gateway: run tachyne-gw-java-776 against localhost:25500 with the same token, or use the cluster entry (<server-ip>:25565 → ingress → gateways → world pod).

Useful flags: -attach :25500 (gateway listener; ATTACH_TOKEN env is the shared secret, empty = refuse all), -seed, -world world.gob (edit persistence), -gamemode survival (default for new players), -ops Name1,Name2, -valkey localhost:6379 (chunk cache; falls back to -chunkdir chunks), -nats nats://localhost:4222 (plugin bus), -llm http://…/v1 (NPCs), -spawn x,y,z, -hud=false, -waves (opt-in cosmetic beach waves; off by default — see below), -health :8081 (opt-in health/metrics listener: /healthz answers 503 once the tick loop has stalled 5 s — point a liveness probe at it — plus /debug/vars with players, mobs, cache sizes, tick p50/p99 and which chunk cache and bus the pod actually connected to, and /debug/pprof; bind it to the pod, never the public ingress).

Vanilla parity: a real vanilla 1.21.5 server ran beside tachyne as an oracle (RCON via scripts/oracle_rcon.py), with Mojang's datagen dumps checked into reference/1.21.5/. Oracle-verified: join sequence, mob idle cycle, zombie combat (damage/cadence/knockback velocities), tick rate, all block-state ids. Vanilla 1.21.5 behavior (via Mojang's officially published mappings) is a facts-only reference — read formulas, reimplement in Go, never copy. Methodology and scorecard: docs/MECHANICS.md. (The cmd/swarm load tester and cmd/diffprobe oracle probe were 770-TCP clients and died with the wire layer — git history pre-c15e1e4; a load tester returns as an attach-protocol tool when needed.)

Plugins

tachyne has a first-class plugin API. Plugins are ordinary Go packages compiled into the server binary — the model Go servers converged on (Caddy, CoreDNS, Dragonfly): no jar loading, no interpreter, full type safety. If you've written Bukkit/Paper plugins the shape will feel familiar: event listeners with a priority ladder and cancellation, commands, a tick scheduler, and per-plugin config + storage.

A minimal plugin:

package myplugin

import "github.com/tachyne/tachyne-world/plugin"

func init() { plugin.Register(&MyPlugin{}) }

type MyPlugin struct{}

func (p *MyPlugin) Name() string { return "myplugin" }
func (p *MyPlugin) Disable()     {}

func (p *MyPlugin) Enable(ctx plugin.Context) error {
    srv := ctx.Server()

    // Cancel block breaks below y=40 by non-ops (region protection).
    plugin.On(ctx.Events(), plugin.Normal, true, func(e *plugin.BlockBreakEvent) {
        if e.Y < 40 && !srv.IsOp(e.Name) {
            e.SetCancelled(true)
        }
    })

    // Double every zombie's melee damage as it spawns (creature stats).
    plugin.On(ctx.Events(), plugin.Normal, true, func(e *plugin.MobSpawnEvent) {
        if e.TypeName == "zombie" {
            if m, ok := srv.Mob(e.EID); ok {
                m.SetMeleeDamage(m.MeleeDamage() * 2)
            }
        }
    })

    // A command: /storm starts a thunderstorm.
    return ctx.RegisterCommand(plugin.Command{
        Name: "storm", OpOnly: true, Help: "start a thunderstorm",
        Run: func(c plugin.CommandContext) { c.Server().SetWeather("thunder", -1) },
    })
}

Enable it with a blank import in cmd/server/plugins.go and rebuild — or, for plugins living in their own modules, assemble a custom binary with tachyne-build (no fork needed):

go install github.com/tachyne/tachyne-world/cmd/tachyne-build@latest
tachyne-build --with github.com/you/yourplugin -o my-world

Operators configure each plugin under -plugindir (default plugins/, next to settings.json): plugins/<name>/config.json is read by ctx.Config (the reserved key "enabled": false turns a compiled-in plugin off), and plugins/<name>/data.json is the plugin's persistent KV store, flushed with world saves.

What you can hook today: player join/quit/chat/commands/movement, block break/place (veto or swap the placed block), melee damage in both directions (mutate the amount), mob spawns (cancel, or grab the new mob and change its max health / speed / damage), mob deaths (rewrite drops and XP), weather and time changes, gamerules. Plus mutations for all of the above, /help + tab-completion integration for your commands, and NextTick/After/Every scheduling. The one rule: handlers run on the engine's tick goroutine — never block in one; from your own goroutines, Scheduler().NextTick is the way back in.

The shipped plugins/example exercises the whole surface (configurable join greeting + visit counter, depth protection, scheduled announcements, /storm, /sun, /buff) and is the recommended starting template — it's compiled into the default binary but inert until configured. Full API reference, the event table, and the threading contract: docs/PLUGINS.md.

Daemon plugins run beside the server instead of inside it: standalone programs attached to the NATS bus (-nats), which publishes the same event catalog as JSON on mc.event.<name> and accepts commands + request-reply queries on mc.cmd.*. Distribution is the Go model — a daemon's module path is its repository, and tachyne-plugin-manager pulls, builds, boots, and supervises it in one command:

go install github.com/tachyne/tachyne-plugin-manager@latest
tachyne-plugin-manager run github.com/tachyne/tachyne-world/daemons/webmap

daemons/webmap (a live web map of the world) is the shipped example, and the busplugin package is the Go kit. For a full 3D web map, see tachyne-map — a separate pod that renders the world natively in Go (no Java), reads it read-only through the worldread package, and follows block changes over this same bus so the map updates live. cmd/anvil-export remains as a standalone tool if you want your tachyne world as a vanilla Minecraft save. Running under -config, the manager takes live install/uninstall/restart/list commands over the bus — in game that's the op-only /plugin command — bare /plugin opens a chest-style plugin browser (labelled items, click to install/upgrade/rate) — so plugins hot-install, hot-remove, and hot-reload while the server runs. Discovery comes from the plugin registry (/plugin search, install by name, out-of-date flags), and on sharded worlds /plugin spans the whole fleet — including /plugin upgrade <name>, a progressive shard-by-shard rollout that verifies health before each step. Daemons observe and command in any language; only tick-veto hooks (protection, combat tuning) need the compiled-in plugin API above.

Layout

internal/worldgen (terrain math, leaf) → internal/world (mutable world + persistence + light) → internal/server (hub tick loop + all gameplay; no wire) → internal/attach (serves the domain attach protocol to gateways). The Minecraft wire format lives in the separate tachyne-common module (protocol/ + render770/), consumed by the gateway repos. plugin/ is the public plugin API (compiled-in Go plugins; plugins/ holds them — see docs/PLUGINS.md). See docs/DOMAIN-EVENTS.md (the domain-event architecture), docs/SHARDING.md (the multi-pod design), docs/EARTH.md (real-elevation worlds) and docs/MECHANICS.md for the vanilla-vs-ours tuning scorecard; CHANGELOG.md is the whole-system timeline.

Deployment (this repo IS the world pod)

The manifests under deploy/ are the ones this project actually runs, so treat them as examples: substitute your own image registry, hostnames, namespaces and secrets before applying them to a cluster of your own.

Consolidated 2026-07-09: the engine source and its cluster deployment are one repo. Dockerfile builds the local source (go vet + go test + go build ./cmd/server) into a scratch image; deploy/ holds the k8s manifests; .github/workflows/build.yml builds + pushes the world image (latest + short-sha tags) on every push to main (GITHUB_TOKEN); .github/workflows/ci.yml gates gofmt/vet/test on pushes and PRs. Rolling out engine work is one loop:

git push origin main                                     # → CI rebuilds :latest
kubectl rollout restart sts/tachyne-world

Runtime (deploy/statefulset.yaml is a sanitized example of what runs): -attach :25500 (ATTACH_TOKEN from secret tachyne-attach-token) -seed <n> -gamemode survival -ops <op1>,<op2> (from the flag, not players.json) -nats tachyne-nats.tachyne.svc:4222 (dedicated pod; shared nats.nats.svc needs auth) -valkey tachyne-cache.tachyne.svc:6379.

Persistence: PVC data-tachyne-world-0 at /var/world holds {world,nether,end}.gob, players.json, inventories.json, containers.json, mobs.json, spawns.json, advancements.json, stats.json, recipebook.json, scoreboard.json, signs.json, books.json, maps.json, banners.json, campfires.json, hives.json, gatekeeper.json, settings.json, npc-mem-*.txt and plugins/<name>/{config,data}.json — the world migrated from the retired VM monolith, the single precious artifact (chunks regenerate deterministically). Nightly backup CronJob tachyne-world-backup (03:00, keeps 7, excludes chunks/). Gateways (tachyne-gw-*, separate repos) sit behind tachyne-ingress (:25565) and render this pod's event stream.

Credits

Built from scratch in Go, standing on the shoulders of open data and research:

  • PrismarineJS/minecraft-data — packet layouts, block/item/entity id tables (MIT).
  • misode/mcmeta — Mojang-generated registry, tag and data reports, repackaged for easy consumption.
  • Minecraft Wiki — protocol and mechanics documentation (CC BY-NC-SA; used as a factual reference).
  • Vanilla parity research — game formulas and constants were verified against vanilla behavior via Mojang's officially published mappings and live oracle experiments; all code here is an independent reimplementation.
  • ViaVersion — multi-version protocol differences used as a factual reference (no code reused; GPL).
  • Copernicus DEM GLO-30 — earth-mode elevation data: © DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018, provided under COPERNICUS by the European Union and ESA; free for any use with this attribution.
  • GeyserMC/mappings — Java↔Bedrock id mapping data consumed by the Bedrock table generator (MIT).
  • nats.go — the plugin/event bus client (Apache-2.0).

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).