The MCCB benchmark: what was tested, and what came out of it
Last updated:
MCCB (Minecraft Conversion Benchmark) is a public benchmark for world converters between Minecraft Java and Minecraft Bedrock. Every converter gets the same worlds, and then each item is checked, one by one, on the other side. This page explains what those worlds contain and what the measurements found. The MCCB repository remains the reference for the data and for redoing everything.
The result, plainly
WorldSwitch leads every tested world class
Among the four historical builds measured by MCCB, WorldSwitch 2.8.0 has the lowest FAIL count on every tested world, in both direct conversion and round trip. Only one comparison is tied; in every other comparison, WorldSwitch has strictly fewer FAILs than the other three builds.
6 lab worldsgenerated to cover many cases (class LAB)
B02, built by handin the Bedrock game (class MANUAL_NATIVE)
2 FAIL-count comparisons: 2 wins, 0 losses.
WorldDirectRound trip
B02win0 vs 22win5 vs 13
R01, real-world survivalplayed for at least four years (class REAL_WORLD_SURVIVAL)
2 FAIL-count comparisons: 2 wins, 0 losses.
WorldDirectRound trip
R01win8 vs 20,790win901 vs 23,849
MCCB never combines classes of worlds in one statistic: hence one tally per class, and no total. Each cell: WorldSwitch 2.8.0 FAILs, versus the lowest FAIL count among the three other builds. Win = strictly fewer FAILs than each of them; tie = as many as the best of them. Tie here: B03 in direct, with the older WorldSwitch build (2.7.80).
What was tested
Seven public test worlds: four Java worlds (J01 to J04) and three Bedrock worlds (B01 to B03). Six are lab worlds (class LAB), generated by a datapack or a behaviour pack to cover many cases at once; B02 was built by hand in the Bedrock game (class MANUAL_NATIVE), to get data written by the game itself. A converter is only judged on what the world really contains: a case announced by a generator but missing from the world does not count.
Blocks and block states
J01 · B01
Not just "which block", but also its state: facing, top or bottom half, water, lit or unlit. J01 enumerates every Java block state in a dedicated dimension of 144 tiles; B01 does the same on the Bedrock side, on what the world really contains.
B01: beehives, campfires, lecterns, cauldrons, a structure block, a crafter
Inventories and chests
J01 · J02 · B02
The content of every slot: which item, how many, with which enchantments, name and durability. Double chests are read chest by chest, to check that each half keeps its own content.
J01: 1,536 different items and 460 component variants, stored in barrels
Every mob must arrive at the right place, with its name, variant, age, equipment, its owner if tamed, and its trades if it is a villager.
J02: 134 entity types, including boats and rafts, 171 armor stands, 21 villagers, an allay, a camel, a breeze, nautiluses
B02: 32 villagers with their trades, 3 wolves, 2 cats, a parrot, a horse, 2 donkeys, 4 pillagers
B02: a wandering trader and its llama, a happy ghast, a thrown trident
Redstone, world data, dimensions
J03 · B03
Everything that is not a block or a mob: seed, time, weather, difficulty, game rules, scores, scheduled actions, chunk boundaries, the Nether and the End.
J03: hoppers, comparators, a dispenser, a dropper, daylight detectors, sculk sensors, 23 command blocks
J03: a Nether portal built at y = 200 in the Nether
B03: seed 26062026, the ender dragon and end crystals, piglins, hoglins, 31 trial spawners, 39 vaults, ticking areas
Commands
J04
400 stations and 3,989 command blocks. Each station carries, in a book and on a sign, what is expected of it: DIRECT (126, the command exists as is in Bedrock), ADAPTABLE (185, it must be rewritten), NO_EQUIVALENT (71 in the frozen v1.3 declarations, Bedrock would have nothing like it; 2 of them are now known to be wrong, see the known limitations) and ROUND_TRIP_ONLY (18, it can only come back intact). These declarations were written by the benchmark's author; they are public and can be challenged.
data modify storage mccb_j04:cmd-j-267 value set value 10
Native Bedrock worlds
B01 · B02 · B03
The three Bedrock worlds were created in Bedrock 26.45, without going through Java. B02 was built entirely by hand in the game: its data is exactly what the game writes. B01 and B03 come from behaviour packs.
B01 holds only part of what its generator announced (6 functions out of 18): only what is present is judged
B03: its Nether content lab holds only lava or air; this is documented, not hidden
The seven public test worlds
World
Edition
Theme
Checks
J01@1.1
Java 26.3
Blocks, states, items
111,135
J02@1.0
Java 26.2
Mobs and entities
2,542
J03@1.0
Java 26.2
World systems
1,320
J04@1.0
Java 26.3
Commands
35,172
B01@1.0
Bedrock 26.45
Blocks, states, items
743
B02@1.0
Bedrock 26.45
Mobs, built by hand
920
B03@1.0
Bedrock 26.45
World systems
2,167
A "check" (an assertion in MCCB) is one precise point: a block's identity, its state, the content of one chest slot, a mob's position, a command's text… One missing block therefore fails several checks at once.
Direct conversion and round trip
Direct conversion
Java to Bedrock, or Bedrock to Java, once. The output world is read the way the target game reads it (for Java, after the game's own world upgrade). This is what a player switching editions gets.
Round trip
The converted world is converted back to its original edition, with the same converter, then compared with the starting world. This measures what gets lost on the way, and lets MCCB check things that cannot be compared across two different editions.
The two levels are never merged. A converter may set aside data the other edition cannot read and restore it on the way back: it can then be PARTIAL in direct and PASS in round trip. Both results are true; they answer different questions.
PASS, ADAPTED, PARTIAL, FAIL: what they mean
PASS preserved
What had to arrive did arrive, according to the check's rule.
ADAPTED adapted
Represented differently, with equivalent behaviour. Only three cases qualify: Java forced chunks and Bedrock ticking areas; block properties recomputed from their neighbours after a round trip; identical sign text broken into lines differently.
PARTIAL partial
A good part survived, but a real loss remains.
FAIL fail
Lost or wrong, while keeping it was reasonably possible.
NOT_APPLICABLE not applicable
The target edition has no counterpart. Decided in advance, from public references, never after looking at results.
NOT_EVALUATED not evaluated
This is not a verdict: MCCB cannot decide neutrally (no reference shared by both editions, or the game would have to run). Counted apart, with its reason, and never counted as PASS.
Which versions were measured
The four builds compared in MCCB v1.3
Converter
Exact build
Note
WorldSwitch 2.8.0 (fd9b735)
fd9b73568456efc0b772d958ebffbc5599aa8fac
Historical build of 2026-09-29, clean working tree. This is not the current version of the website.
WorldSwitch 2.7.80 (0308840)
030884039c78fd1c076fa42ba0975dd92c420b7e
Older build, measured before the 2.8.0 fixes. Kept to show the change.
Chunker 1.20.0
chunker-cli-1.20.0.jar
Official release, the latest on 2026-09-29. Only option: the target format (-f JAVA_26_3 or -f BEDROCK_R26_40).
je2be (core 8dfc4de)
8dfc4de1ba5c7f72e804abea8663380c0dbd5680
The engine of je2be-desktop 5.6.1, its latest release, through its official command-line tools compiled unmodified. Converted and graded after the freeze, with nothing changed.
Results on the 7 public worlds
Each cell gives the number of FAILs, then the details. The bar shows the share of each status among all the checks of the world. The total number of checks is the same for the four builds; only the number of evaluated checks can vary slightly, when a rule needs the game to decide.
preserved
adapted
partial
fail
not applicable
not evaluated
Direct conversion
MCCB v1.3, direct conversion, 7 public worlds (6 LAB and B02)
World
WorldSwitch 2.8.0 (fd9b735)
WorldSwitch 2.7.80 (0308840)
Chunker 1.20.0
je2be (core 8dfc4de)
J01111,135 checks
0 FAIL
PASS 56,366 · ADAPTED 0 · PARTIAL 0 not applicable 15,618 · not evaluated 39,151
2 FAIL
PASS 56,364 · ADAPTED 0 · PARTIAL 0 not applicable 15,618 · not evaluated 39,151
634 FAIL
PASS 55,732 · ADAPTED 0 · PARTIAL 0 not applicable 15,618 · not evaluated 39,151
56,332 FAIL
PASS 34 · ADAPTED 0 · PARTIAL 0 not applicable 15,618 · not evaluated 39,151
J022,542 checks
2 FAIL
PASS 1,643 · ADAPTED 3 · PARTIAL 0 not applicable 68 · not evaluated 826
5 FAIL
PASS 1,640 · ADAPTED 3 · PARTIAL 0 not applicable 68 · not evaluated 826
1,391 FAIL
PASS 258 · ADAPTED 0 · PARTIAL 0 not applicable 68 · not evaluated 825
1,618 FAIL
PASS 32 · ADAPTED 0 · PARTIAL 0 not applicable 68 · not evaluated 824
J031,320 checks
0 FAIL
PASS 713 · ADAPTED 1 · PARTIAL 0 not applicable 90 · not evaluated 516
7 FAIL
PASS 706 · ADAPTED 1 · PARTIAL 0 not applicable 90 · not evaluated 516
318 FAIL
PASS 397 · ADAPTED 0 · PARTIAL 0 not applicable 90 · not evaluated 515
712 FAIL
PASS 26 · ADAPTED 0 · PARTIAL 0 not applicable 90 · not evaluated 492
J0435,172 checks
29 FAIL
PASS 18,483 · ADAPTED 3 · PARTIAL 0 not applicable 124 · not evaluated 16,533
35 FAIL
PASS 18,477 · ADAPTED 3 · PARTIAL 0 not applicable 124 · not evaluated 16,533
2,038 FAIL
PASS 17,109 · ADAPTED 0 · PARTIAL 0 not applicable 124 · not evaluated 15,901
23,013 FAIL
PASS 33 · ADAPTED 0 · PARTIAL 0 not applicable 124 · not evaluated 12,002
B01743 checks
0 FAIL
PASS 484 · ADAPTED 0 · PARTIAL 0 not applicable 13 · not evaluated 246
4 FAIL
PASS 480 · ADAPTED 0 · PARTIAL 0 not applicable 13 · not evaluated 246
39 FAIL
PASS 444 · ADAPTED 1 · PARTIAL 0 not applicable 13 · not evaluated 246
8 FAIL
PASS 476 · ADAPTED 0 · PARTIAL 0 not applicable 13 · not evaluated 246
B02920 checks
0 FAIL
PASS 622 · ADAPTED 0 · PARTIAL 0 not applicable 51 · not evaluated 247
34 FAIL
PASS 587 · ADAPTED 0 · PARTIAL 1 not applicable 51 · not evaluated 247
273 FAIL
PASS 350 · ADAPTED 0 · PARTIAL 0 not applicable 51 · not evaluated 246
22 FAIL
PASS 601 · ADAPTED 0 · PARTIAL 0 not applicable 51 · not evaluated 246
B032,167 checks
0 FAIL
PASS 547 · ADAPTED 2 · PARTIAL 1 not applicable 42 · not evaluated 1,575
0 FAIL
PASS 547 · ADAPTED 2 · PARTIAL 1 not applicable 42 · not evaluated 1,575
202 FAIL
PASS 347 · ADAPTED 1 · PARTIAL 0 not applicable 42 · not evaluated 1,575
34 FAIL
PASS 516 · ADAPTED 0 · PARTIAL 0 not applicable 42 · not evaluated 1,575
Round trip
MCCB v1.3, round trip, 7 public worlds (6 LAB and B02)
World
WorldSwitch 2.8.0 (fd9b735)
WorldSwitch 2.7.80 (0308840)
Chunker 1.20.0
je2be (core 8dfc4de)
J01111,135 checks
1,645 FAIL
PASS 99,083 · ADAPTED 10,246 · PARTIAL 160 not applicable 0 · not evaluated 1
1,650 FAIL
PASS 99,078 · ADAPTED 10,246 · PARTIAL 160 not applicable 0 · not evaluated 1
7,751 FAIL
PASS 92,325 · ADAPTED 10,349 · PARTIAL 709 not applicable 0 · not evaluated 1
111,070 FAIL
PASS 64 · ADAPTED 0 · PARTIAL 0 not applicable 0 · not evaluated 1
J022,542 checks
37 FAIL
PASS 2,315 · ADAPTED 0 · PARTIAL 181 not applicable 0 · not evaluated 9
89 FAIL
PASS 2,263 · ADAPTED 0 · PARTIAL 181 not applicable 0 · not evaluated 9
2,145 FAIL
PASS 373 · ADAPTED 0 · PARTIAL 16 not applicable 0 · not evaluated 8
2,474 FAIL
PASS 61 · ADAPTED 0 · PARTIAL 0 not applicable 0 · not evaluated 7
J031,320 checks
55 FAIL
PASS 1,227 · ADAPTED 1 · PARTIAL 17 not applicable 0 · not evaluated 20
58 FAIL
PASS 1,224 · ADAPTED 1 · PARTIAL 17 not applicable 0 · not evaluated 20
559 FAIL
PASS 720 · ADAPTED 2 · PARTIAL 19 not applicable 0 · not evaluated 20
1,246 FAIL
PASS 54 · ADAPTED 0 · PARTIAL 0 not applicable 0 · not evaluated 20
J0435,172 checks
0 FAIL
PASS 34,589 · ADAPTED 0 · PARTIAL 451 not applicable 0 · not evaluated 132
4 FAIL
PASS 34,585 · ADAPTED 0 · PARTIAL 451 not applicable 0 · not evaluated 132
3,357 FAIL
PASS 31,278 · ADAPTED 0 · PARTIAL 405 not applicable 0 · not evaluated 132
34,977 FAIL
PASS 63 · ADAPTED 0 · PARTIAL 0 not applicable 0 · not evaluated 132
B01743 checks
3 FAIL
PASS 713 · ADAPTED 0 · PARTIAL 26 not applicable 0 · not evaluated 1
13 FAIL
PASS 703 · ADAPTED 0 · PARTIAL 26 not applicable 0 · not evaluated 1
75 FAIL
PASS 621 · ADAPTED 0 · PARTIAL 46 not applicable 0 · not evaluated 1
21 FAIL
PASS 696 · ADAPTED 0 · PARTIAL 25 not applicable 0 · not evaluated 1
B02920 checks
5 FAIL
PASS 803 · ADAPTED 0 · PARTIAL 104 not applicable 0 · not evaluated 8
13 FAIL
PASS 796 · ADAPTED 0 · PARTIAL 103 not applicable 0 · not evaluated 8
376 FAIL
PASS 528 · ADAPTED 0 · PARTIAL 9 not applicable 0 · not evaluated 7
31 FAIL
PASS 811 · ADAPTED 0 · PARTIAL 71 not applicable 0 · not evaluated 7
B032,167 checks
4 FAIL
PASS 763 · ADAPTED 0 · PARTIAL 97 not applicable 0 · not evaluated 1,303
43 FAIL
PASS 721 · ADAPTED 0 · PARTIAL 100 not applicable 0 · not evaluated 1,303
280 FAIL
PASS 498 · ADAPTED 0 · PARTIAL 86 not applicable 0 · not evaluated 1,303
37 FAIL
PASS 739 · ADAPTED 0 · PARTIAL 88 not applicable 0 · not evaluated 1,303
What can be said
On each of the 7 public worlds, taken one by one (the 6 lab worlds and B02, built by hand), in direct conversion and in round trip alike, WorldSwitch 2.8.0 (fd9b735) has the lowest number of FAILs of the four builds measured (tied with the older WorldSwitch build (2.7.80) on B03 in direct). This is a statement about that precise scope, not a score.
je2be (engine 8dfc4de): for the four Java worlds, this je2be version does not read the region location used by Java 26 (folders dimensions/minecraft/…/region) and writes a world with no terrain. Its very large FAIL counts on J01 to J04 come from that: MCCB classifies it as an input format this version does not support, not as a conversion error. On the Bedrock worlds (B01 to B03), this problem does not arise.
Chunker 1.20.0 declares entities unsupported. Its largest FAIL groups on these worlds: structure data not written (fortresses…), armor stands, score values, written book content and the "up" state of walls (J01).
What is still FAIL for WorldSwitch 2.8.0
Every FAIL of this build was classified by cause in the MCCB repository, at the first grading. The corrected closing grading adds two, shown on the last line. The main groups, 7 public worlds:
Remaining FAILs of WorldSwitch 2.8.0 (fd9b735), by behaviour
Checks
World
What happens
Nature
1,142
J01
Door halves stored without their other half (672) and sculk sensors stored mid-activation (470) come back recomputed
States normal play does not keep
≈ 460
J01
Other J01 matrix states recomputed on the way back (button facing, mushrooms, big dripleaf tilt, pistons…)
Mostly Bedrock recomputing or not storing the state
52
J03
The Nether portal built at y = 200 is lost on the round trip
Above Bedrock's Nether height; a round trip could carry it, WorldSwitch does not
37
J02
Java-only entities (displays, interaction, giant, illusioner, mannequin, spawner minecart) do not come back
No counterpart in direct; the round trip could keep them, WorldSwitch does not
29
J04
Command blocks emptied although the world declares a Bedrock equivalent
Reviewed one by one: 26 have no Bedrock equivalent (wrong declaration in the source world), 3 only approximate. Kept as FAIL, as frozen
12
J01
Pistons in motion (moving_piston)
Transient state
1
J02
A wither stored with 300 health comes out with 450 (direct)
Cannot be decided without the game
2
J02, B02
One entity's equipment (one in direct on J02, one in round trip on B02)
Added by the corrected grading, which judges every item in its own slot
R01: real-world survival
Lab worlds cover many cases, but nobody really played in them. R01 is a real multiplayer survival world that has existed and been played for at least four years. It is measured with the same rules and the same four builds, from Bedrock to Java and back, and it is shown apart: its numbers are never added to the lab worlds'.
4+ years of existence and play, in multiplayer survival
3,529,881 checks per level, for every build
111,256 entities and actors stored in the world
preserved
adapted
partial
fail
not applicable
not evaluated
R01: real-world survival, direct conversion (Bedrock to Java)
World
WorldSwitch 2.8.0 (fd9b735)
WorldSwitch 2.7.80 (0308840)
Chunker 1.20.0
je2be (core 8dfc4de)
R013,529,881 checks
8 FAIL
PASS 1,913,373 · ADAPTED 54 · PARTIAL 18 not applicable 7,776 · not evaluated 1,608,652
21,370 FAIL
PASS 1,892,010 · ADAPTED 54 · PARTIAL 19 not applicable 7,776 · not evaluated 1,608,652
240,247 FAIL
PASS 1,673,243 · ADAPTED 68 · PARTIAL 0 not applicable 7,776 · not evaluated 1,608,547
20,790 FAIL
PASS 1,892,714 · ADAPTED 0 · PARTIAL 18 not applicable 7,776 · not evaluated 1,608,583
PASS 2,929,789 · ADAPTED 6 · PARTIAL 115,395 not applicable 0 · not evaluated 483,790
55,207 FAIL
PASS 2,874,935 · ADAPTED 6 · PARTIAL 115,997 not applicable 0 · not evaluated 483,736
349,538 FAIL
PASS 2,670,824 · ADAPTED 6 · PARTIAL 25,845 not applicable 0 · not evaluated 483,668
23,849 FAIL
PASS 2,898,064 · ADAPTED 6 · PARTIAL 124,276 not applicable 0 · not evaluated 483,686
1,608,652 direct checks are not evaluated, for every build: mostly block states with no neutral cross-edition reference and old Bedrock palette entries. They count neither as PASS nor as FAIL.
On R01, WorldSwitch 2.8.0 (fd9b735) has the lowest number of FAILs of the four builds, in direct and in round trip. Its 901 round-trip FAILs split into 337 blocks, 251 items, 203 entities, 61 block entities, 46 on the player and 3 on the world. The classification made at the first grading traced them mostly to kelp and vine age, potion data, mob equipment and sign texts.
Chunker writes neither entities (the world holds 111,256 actors) nor structure data; je2be notably loses Bedrock sub-chunks made of a single block (4,096 checks per level in the sample).
Reproducibility limit. The historical file used for grading is a sanitised copy of the world: player identity records and third-party packs removed, player texts reviewed. It still held a few Xbox account identifiers (XUIDs), in sign and book fields; it stays private. The public R01 file is a separate, pseudonymised derivative (those identifiers are replaced with pseudonyms in it), prepared for publication with the players' permission; it will be made available when access to the GitHub repository is restored. It will allow anyone to convert R01 again and grade it with the frozen tools, but not to redo the historical grading identically, which relies on the private file; and the equivalence of the two files has not been re-measured with the corrected grading.
Intrinsic differences between Java and Bedrock
Java and Bedrock are not the same game under the hood. Some things exist on one side only: when they have no counterpart, MCCB declares them "not applicable" in advance and does not count them as failures. Other losses are unavoidable but still counted, because the data really disappears; they then hit every converter, and a FAIL of that kind does not mean a converter is buggy.
No counterpart: not applicable, not counted
Bedrock has no datapack dimensions, no world border, no /data, /bossbar, /team, /attribute or /advancement, no scheduled functions and no command storage.
Java has no ticking areas (forced chunks are the closest equivalent, hence ADAPTED) and no Education Edition blocks.
Java-only entities: displays, interaction, marker, giant, illusioner, mannequin, furnace and spawner minecarts, spectral arrow. Java-only blocks: test blocks, Java 26.x concrete slabs and stairs.
Unavoidable losses, counted for everyone
Bedrock's Nether ends at y = 127: anything built higher in a Java Nether cannot be carried.
Cauldrons have 3 levels in Java and 6 in Bedrock; Java cannot store a potion or dyed water in a cauldron.
Java doors cannot hold water; Bedrock floor buttons have no facing; Bedrock decorated pots have no cracked state.
Some mobs have a different maximum health: 300 for the wither in Java, 600 in Bedrock.
Known limitations of the benchmark
J04: two /recipe stations wrongly declared "no equivalent"
Stations CMD-J-332 (recipe give @p minecraft:crafting_table) and CMD-J-333 (recipe take @p minecraft:stick) were frozen as NO_EQUIVALENT. A recent product analysis shows that Bedrock does have both recipes (minecraft:WorkBench_recipeId for the crafting table, minecraft:stick for the stick). In direct conversion, these two checks are therefore not applicable for all four builds: the declaration created no FAIL, for any converter. It did, however, spare WorldSwitch two, since both measured WorldSwitch builds emptied these commands. v1.3 stays frozen as is; the declaration will be fixed in a future version of the benchmark.
What MCCB v1.3 does not test
Behaviour in game: no command is run, no redstone runs, no mob is observed. The only automatic check: does the Java 26.3 game accept to open the Java world?
Very old worlds (pre-1.18 formats), very large worlds, speed and memory.
Maps and their pixels, biomes, light, resource and behaviour packs, add-ons and experimental features.
Multiplayer identity mapping (which Bedrock player is which Java account).
Evidence, data and reproducibility
This page presents the results; the evidence lives in the public MCCB repository: source worlds and their fingerprints, the rule of every check, the reading and grading tools, and line-by-line results, with the observed value behind each verdict.
The numbers on this page come from the corrected closing grading of MCCB v1.3 (results commit eaabb07, grading from commit 2027179). It takes exactly the 64 converter outputs of the first grading, without running any conversion again, with stricter rules applied to everyone: 302 verdicts change on the 7 public worlds and 137,804 on R01, all in the stricter direction, none to PASS. The first grading is kept unchanged as a record.
The GitHub account hosting this repository is currently suspended, so the link above does not respond for now. The v1.0 source worlds had been published there on 2026-09-15. The latest v1.3 closing artifacts and the reproducibility evidence will be published there as soon as access to the GitHub account is restored. No date can be given.