Research notes
Investigations against primary sources for the data-driven vanilla effort. The plan that draws on them is docs/plans/data-driven-vanilla.md. Each note cites the source of every claim and ends with the commands that reproduce it.
The first nine notes, written 2026-10-24, asked how a Bedrock server becomes data-driven. The eight that follow, written the same day, ask the narrower question the plan now turns on: whether Java Edition's data can drive a server that speaks to Bedrock clients.
The dimension notes, written 2026-10-30, ask what it takes to run the Overworld, the Nether and the End as one save with portals between them, and how to describe each dimension and its generator as data.
The Bedrock side
- bedrock-data-extraction.md: obtaining the Bedrock Dedicated Server automatically, what its zip contains, what is and is not data-driven in vanilla Bedrock, Mojang/bedrock-samples, licensing, peer projects, running BDS headless in CI, what this server hardcodes today.
- bedrock-entities-spawning-loot-trading.md: the entity, spawn rule, loot table and trade table grammars with vanilla usage counts and coverage curves for goals and components.
- bedrock-blocks-items-recipes-biomes-features.md: the block, item, recipe, item catalog, biome, feature, feature rule, structure and voxel shape grammars, which block properties come from where, and a first grouping of all blocks and items by behavior.
- bedrock-addons-and-custom-content.md: the two channels a Bedrock client learns custom content through, the pack container and manifest schemas, resource pack delivery and encryption, custom block, item and entity registration end to end, and what a third-party server cannot do.
- molang.md: the Molang specification, the queries vanilla uses server-side, semantics that matter for parity, existing evaluators, and the design of one for this project.
The Java side
- java-datapacks.md: the Java Edition datapack format, Mojang's data generator reports, what Java keeps in code, Java worldgen as data, and the fit of Java data for a Bedrock server.
- java-registries-and-components.md: all 60 datapack element registries with their reload and sync behavior, the item data component system from 1.20.5 to 26.3, loot and predicate composition, enchantments as data, registry sync in the configuration phase, pack format churn, and the boundary a datapack cannot cross.
- java-code-only-behavior.md: what Java holds in code now that 26.1 removed obfuscation, measured per area from the jar's line tables, with a 34-row table rating whether Bedrock data fills each gap.
- commands-functions-and-datapack-execution.md: that vanilla ships no mcfunction files in either edition, the function runtime and its limits, the two editions' command sets compared, and four defects in this repository's Brigadier port and command packet.
The seam between them
- java-to-bedrock-translation.md: whether Java-shaped state can be presented to a Bedrock client, measured against GeyserMC, per domain, with the losses counted and the license position stated.
- hybrid-format-prior-art.md: who has fused two content formats (nobody), Chunker and the other bidirectional mapping projects, the four candidate architectures compared, and the reusable mapping data sets with their licenses.
- edition-behavior-differences.md: 278 classified differences between the editions, each marked for who decides it and what happens if the server implements Java's version, plus a testable wording for the parity claim and the categories it must exclude.
- storage-and-chunk-translation.md: what this repository persists today, the Bedrock LevelDB format against Java's Anvil format, the cost of translating at the chunk boundary measured on this repository's code, and a storage recommendation.
- cross-edition-worldgen-parity.md: whether Java's published world generator produces Bedrock-identical worlds, the random number generator ceiling, structures, a verification method against a real server, and deepslate.
Dimensions and portals
- data-driven-dimensions.md: Java's
dimension_type, level stem, world preset and generator model in its 26.3 shape, Bedrock's integer ids, heights and 2026 custom dimensions, what this repository parses and sends today, six servers compared, and the design for aDimensionTyperegistry,LevelStemper dimension,GeneratorFactoriesand oneLevelper save with the config migration. - dimension-storage-network-config.md: how LevelDB and Anvil address a dimension, the
level.dat, player and entity fields a multi-dimension save needs, what the worker pool carries per pool and per task, the fourteen packets that name a dimension and which the server fills, the blast radius of splittingWorld, and the test order for a save and load round trip. - end-dragon-fight.md: the End dragon fight read from the 26.3 jar (fight state, spikes, crystals, dragon, podium, respawn stages, credits, gateways), the repo audit of what exists today, and the Bedrock wire mapping; executed by docs/plans/end-dragon-fight.md.
- portals-and-dimension-travel.md: nether portal frame, lighting, collapse, timers, cooldown, coordinate scaling, search and creation read from the 26.3 jar, end portal ring, platform and exit, the eight-step Bedrock dimension change sequence three reimplementations agree on, what the repository has, and the block-layer and server-layer design with its test plan.
Method and prior art
- move-actor-delta.md: compressed MoveActorAbsolute and MoveActorDelta measurements over deterministic walking, idle, and farm-mob runtime traces, plus the decision to keep absolute movement packets.
- packet-codec-enforcement.md: existing one-way packet codecs, enforcement options, and a fingerprinted legacy baseline.
- protocol-2225-delta.md: everything that changed on the wire between protocol 2193 and 2225 (Minecraft 1.26.60), verified against Mojang's release schemas and gophertunnel, with what
Codec2225implements and what is still inherited from 2193. - sub-chunk-requests-and-blob-cache.md: what
SubChunkPacketandLevelChunkPacketcarry when a client has its blob cache on, from Mojang's packet documentation, gophertunnel, dragonfly, Cloudburst and PocketMine's protocol library, against what this repository sent when a retail client left with a bad packet error. - protocol-2225-added-packets.md: the field layout of the eight packets protocol 2225 added, read off the pinned v1.26.60 release schemas, with the
Compression-means-varint and optional-field conventions they turn on. - packet-versioning-architectures.md: how to carry more protocol versions without transform chains or class sprawl, a taxonomy of real wire deltas, four candidate architectures compared against prior art, and the recommendation to keep the delta codec with a written pruning policy.
- prior-art-data-driven-servers.md: how seventeen servers, engines and data projects model blocks, items and entities as data plus code, load packs and verify parity, with a pattern recommendation and reusable pieces.
- engine-behavior-inventory.md: the behaviors a server must implement for 1463 blocks, 1623 items, 129 entities and the world, grouped into families with sizing.
- extraction-and-parity-verification.md: what the Script API and Endstone DevTools can dump, the extended packet capture, reference worlds, the parity test suite and caching.
- bedrock-data-pipeline.md: where every committed Bedrock artifact comes from and how to refresh it, as a per-artifact table, with what the capture already automates, the one manual artifact, the unreferenced files and the upstream and legal posture.
- worldgen-pool-and-pipeline-architecture.md: how Moonrise, C2ME, Pumpkin and vanilla schedule, prioritize and isolate chunk generation, why Node cannot lower one worker's priority, a measured dispatch starvation experiment, and a generation host, work board and adaptive governor design.
- scriptc-libdatachannel.md: whether the NetherNet server's WebRTC backend can run on libdatachannel in a scriptc executable, with a measured FFI loopback over a statically linked libdatachannel, the Node island route that runs node-datachannel unchanged, the C API's coverage of what the server needs, a close probe, and a shim design.
- nethernet-raknet-shared-port.md: whether RakNet and NetherNet can share one UDP port number once NetherNet runs on libdatachannel, and RakNet's IPv4 and IPv6 listeners one number, with the first-byte classes of RakNet, query, STUN and DTLS, a loopback relay to libjuice run as a prototype with datagram counts, the kernel and upstream alternatives, the RakNet worker, and a recommended design with tests.
- bds-server-udp-ports.md: what Bedrock Dedicated Server accepts in
server-udp-portsandserver-public-ipacross three versions, with the 1.26.70.24 binary run against about 35 values, its errors, and the UDP sockets it opens for a single port, a range and the default.