From 0dc94282846600f38022652751e4cdc84f56e58e Mon Sep 17 00:00:00 2001 From: xiej2520 Date: Sun, 19 Jul 2026 16:25:17 -0500 Subject: [PATCH 1/5] fix: typo Stair half "bottm" and Trapdoor open "fasle", egg semicolon --- include/mcfile/je/flatten.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/mcfile/je/flatten.hpp b/include/mcfile/je/flatten.hpp index 08bf6d1..2343665 100644 --- a/include/mcfile/je/flatten.hpp +++ b/include/mcfile/je/flatten.hpp @@ -666,7 +666,7 @@ class Flatten { } } #define ns u8"minecraft:" -#define egg u8"_spawn_egg"; +#define egg u8"_spawn_egg" switch (id) { case 256: return ns u8"iron_shovel"; case 257: return ns u8"iron_pickaxe"; @@ -2996,7 +2996,7 @@ class Flatten { static void Stairs(uint8_t data, std::map &props) { static std::u8string const facing[4] = {u8"east", u8"west", u8"south", u8"north"}; props[u8"facing"] = facing[std::clamp(data & 0x3, 0, 3)]; - static std::u8string const half[2] = {u8"bottm", u8"top"}; + static std::u8string const half[2] = {u8"bottom", u8"top"}; props[u8"half"] = half[std::clamp(data & 0x4, 0, 1)]; } @@ -3139,7 +3139,7 @@ class Flatten { break; } props[u8"half"] = (data & 0x8) == 0x8 ? u8"top" : u8"bottom"; - props[u8"open"] = (data & 0x4) == 0x4 ? u8"true" : u8"fasle"; + props[u8"open"] = (data & 0x4) == 0x4 ? u8"true" : u8"false"; } static void Button(uint8_t data, std::map &props) { From e850080c8d9c0e8cfee6b17ead98a3ed3d875cb7 Mon Sep 17 00:00:00 2001 From: xiej2520 Date: Sun, 19 Jul 2026 16:25:17 -0500 Subject: [PATCH 2/5] fix: flatten petrified oak slab and seamless slab to smooth blocks. "Wooden" stone slabs became petrified oak slabs. Seamless stone, sandstone, quartz, and red sandstone double slabs became the smooth version of the block, not staying as double slabs. --- include/mcfile/je/flatten.hpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/include/mcfile/je/flatten.hpp b/include/mcfile/je/flatten.hpp index 2343665..a96a20b 100644 --- a/include/mcfile/je/flatten.hpp +++ b/include/mcfile/je/flatten.hpp @@ -119,6 +119,7 @@ class Flatten { if (i == u8"stone_slab") { switch (DrainDamage(damage)) { case 1: return ns u8"sandstone_slab"; + case 2: return ns u8"petrified_oak_slab"; case 3: return ns u8"cobblestone_slab"; case 4: return ns u8"brick_slab"; case 5: return ns u8"stone_brick_slab"; @@ -1310,13 +1311,22 @@ class Flatten { return blocks::minecraft::iron_block; }, // 43 - [](uint8_t data, map &props) { - AssertDataLayout(data, 0b1111); + [](uint8_t data, map &props) -> blocks::BlockId { + AssertDataLayout(data, 0b1111); + if ((data & 0x8) == 0x8) { + switch (data & 0x7) { + case 0: return blocks::minecraft::smooth_stone; + case 1: return blocks::minecraft::smooth_sandstone; + case 7: return blocks::minecraft::smooth_quartz; + default: + break; + } + } props[u8"type"] = u8"double"; static blocks::BlockId const sIds[8] = { blocks::minecraft::smooth_stone_slab, blocks::minecraft::sandstone_slab, - blocks::minecraft::oak_slab, + blocks::minecraft::petrified_oak_slab, blocks::minecraft::cobblestone_slab, blocks::minecraft::brick_slab, blocks::minecraft::stone_brick_slab, @@ -1332,7 +1342,7 @@ class Flatten { static blocks::BlockId const sIds[8] = { blocks::minecraft::smooth_stone_slab, blocks::minecraft::sandstone_slab, - blocks::minecraft::oak_slab, + blocks::minecraft::petrified_oak_slab, blocks::minecraft::cobblestone_slab, blocks::minecraft::brick_slab, blocks::minecraft::stone_brick_slab, @@ -2492,12 +2502,12 @@ class Flatten { // 181 [](uint8_t data, map &props) { AssertDataLayout(data, 0b1000); - props[u8"type"] = u8"double"; switch (data) { case 8: - return blocks::minecraft::smooth_red_sandstone_slab; + return blocks::minecraft::smooth_red_sandstone; case 0: default: + props[u8"type"] = u8"double"; return blocks::minecraft::red_sandstone_slab; } }, From 557fe6e71ca518ccdc304fbc7d68c022cf2037c6 Mon Sep 17 00:00:00 2001 From: xiej2520 Date: Sun, 19 Jul 2026 16:25:17 -0500 Subject: [PATCH 3/5] fix: flattened wood (bark) blocks Log blocks with axis="none" became wood blocks with axis="y". --- include/mcfile/je/flatten.hpp | 42 ++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/include/mcfile/je/flatten.hpp b/include/mcfile/je/flatten.hpp index a96a20b..33204fc 100644 --- a/include/mcfile/je/flatten.hpp +++ b/include/mcfile/je/flatten.hpp @@ -1117,13 +1117,24 @@ class Flatten { [](uint8_t data, map &props) { AssertDataLayout(data, 0b1111); Log(data, props); - static blocks::BlockId const sIds[4] = { - blocks::minecraft::oak_log, - blocks::minecraft::spruce_log, - blocks::minecraft::birch_log, - blocks::minecraft::jungle_log, - }; - return Select<4>(data & 0x3, sIds, blocks::minecraft::oak_log); + + if (((data >> 2) & 0x3) == 0x3) { + static blocks::BlockId const sIds[4] = { + blocks::minecraft::oak_wood, + blocks::minecraft::spruce_wood, + blocks::minecraft::birch_wood, + blocks::minecraft::jungle_wood, + }; + return Select<4>(data & 0x3, sIds, blocks::minecraft::oak_wood); + } else { + static blocks::BlockId const sIds[4] = { + blocks::minecraft::oak_log, + blocks::minecraft::spruce_log, + blocks::minecraft::birch_log, + blocks::minecraft::jungle_log, + }; + return Select<4>(data & 0x3, sIds, blocks::minecraft::oak_log); + } }, // 18 [](uint8_t data, map &props) { @@ -2342,6 +2353,16 @@ class Flatten { [](uint8_t data, map &props) { AssertDataLayout(data, 0b1111); Log(data, props); + + if (((data >> 2) & 0x3) == 0x3) { + switch (data & 0x3) { + case 1: return blocks::minecraft::dark_oak_wood; + case 0: + default: + return blocks::minecraft::acacia_wood; + } + } + switch (data & 0x3) { case 1: return blocks::minecraft::dark_oak_log; case 0: @@ -3041,7 +3062,12 @@ class Flatten { } static void Log(uint8_t data, std::map &props) { - props[u8"axis"] = Axis((data >> 2) & 0x3); + if (((data >> 2) & 0x3) == 0x3) { + // log axis="none" -> wood axis="y" + props[u8"axis"] = u8"y"; + } else { + props[u8"axis"] = Axis((data >> 2) & 0x3); + } } static void Leaves(uint8_t data, std::map &props) { From 051dce5e85b392f0362f1135b2f1f1bae5267eb5 Mon Sep 17 00:00:00 2001 From: xiej2520 Date: Sun, 19 Jul 2026 16:25:17 -0500 Subject: [PATCH 4/5] fix: shrubs get flattened into dead bushes --- include/mcfile/je/flatten.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/mcfile/je/flatten.hpp b/include/mcfile/je/flatten.hpp index 33204fc..50bd992 100644 --- a/include/mcfile/je/flatten.hpp +++ b/include/mcfile/je/flatten.hpp @@ -336,6 +336,8 @@ class Flatten { if (i == u8"tallgrass") { switch (DrainDamage(damage)) { case 2: return ns u8"fern"; + // shrub -> dead bush + case 0: return ns u8"dead_bush"; case 1: default: return ns u8"grass"; @@ -1231,8 +1233,9 @@ class Flatten { AssertDataLayout(data, 0b11); switch (data) { case 2: return blocks::minecraft::fern; + // shrub. Legacy console edition only + case 0: return blocks::minecraft::dead_bush; case 1: - case 0: // shrub. Legacy console edition only default: return blocks::minecraft::short_grass; } From a4f0a3d962df8b098c25b81c062bc36854f1da59 Mon Sep 17 00:00:00 2001 From: xiej2520 Date: Sun, 19 Jul 2026 16:25:17 -0500 Subject: [PATCH 5/5] fix: add missing flattening item renames --- include/mcfile/je/flatten.hpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/include/mcfile/je/flatten.hpp b/include/mcfile/je/flatten.hpp index 50bd992..7921c2c 100644 --- a/include/mcfile/je/flatten.hpp +++ b/include/mcfile/je/flatten.hpp @@ -133,12 +133,21 @@ class Flatten { if (i == u8"brick_block") { return ns u8"bricks"; } + if (i == u8"mob_spawner") { + return ns u8"spawner"; + } if (i == u8"stone_stairs") { return ns u8"cobblestone_stairs"; } + if (i == u8"snow_layer") { + return ns u8"snow"; + } if (i == u8"snow") { return ns u8"snow_block"; } + if (i == u8"fence") { + return ns u8"oak_fence"; + } if (i == u8"pumpkin") { return ns u8"carved_pumpkin"; } @@ -180,6 +189,9 @@ class Flatten { if (i == u8"melon_block") { return ns u8"melon"; } + if (i == u8"waterlily") { + return ns u8"lily_pad"; + } if (i == u8"nether_brick") { return ns u8"nether_bricks"; } @@ -195,6 +207,9 @@ class Flatten { return ns u8"oak_slab"; } } + if (i == u8"quartz_ore") { + return ns u8"nether_quartz_ore"; + } if (i == u8"quartz_block") { switch (DrainDamage(damage)) { case 1: return ns u8"chiseled_quartz_block"; @@ -258,6 +273,9 @@ class Flatten { if (i == u8"stone_slab2") { return ns u8"red_sandstone_slab"; } + if (i == u8"end_bricks") { + return ns u8"end_stone_bricks"; + } if (i == u8"magma") { return ns u8"magma_block"; } @@ -576,6 +594,9 @@ class Flatten { return ns u8"ink_sac"; } } + if (i == u8"fireworks") { + return ns u8"firework_rocket"; + } if (i == u8"firework_charge") { return ns u8"firework_star"; } @@ -648,6 +669,8 @@ class Flatten { } if (i == u8"melon") { return ns u8"melon_slice"; + } else if (i == u8"speckled_melon") { + return ns u8"glistering_melon_slice"; } #undef ns @@ -791,7 +814,7 @@ class Flatten { case 1: return ns u8"cooked_salmon"; case 0: default: - return ns u8"cooked_fish"; + return ns u8"cooked_cod"; } case 351: switch (DrainDamage(damage)) {