# Blocks census

Oracle `Block.registerBlocks` registry: **236** rows.

Census rows: **236**.

The registry has numeric IDs 0 through 234 plus 255. `docs/GOAL.md` was absent from this checkout during the census, so the supplied P1 CENSUS brief and `docs/SCOPE.md` section 1 were used as the phase and cut contracts.

| name | oracle ref | magma status | magma cite | tape coverage | scenario candidate |
|---|---|---|---|---|---|
| 0 air | Block.java:Block.registerBlocks id=0 | implemented | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 1 stone | Block.java:Block.registerBlocks id=1 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 2 grass | Block.java:Block.registerBlocks id=2 | partial(random grass spread missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 3 dirt | Block.java:Block.registerBlocks id=3 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 4 cobblestone | Block.java:Block.registerBlocks id=4 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_flow_convert_20260723T002122Z | - |
| 5 planks | Block.java:Block.registerBlocks id=5 | partial(non-oak metadata renders with oak sprite) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~-2 ~ ~5 ~2 ~ ~5 minecraft:planks 0` |
| 6 sapling | Block.java:Block.registerBlocks id=6 | partial(render falls back to stone and growth missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:break_unsupported_plants; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:sapling 0` on a grass pad |
| 7 bedrock | Block.java:Block.registerBlocks id=7 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_dragon_kill_20260729T110941Z | - |
| 8 flowing_water | Block.java:Block.registerBlocks id=8 | partial(animated texture phase is not implemented) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/fluid_live.c:gm_fluid_tick; magma/world/mesh_mc.c:emit_fluid | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 9 water | Block.java:Block.registerBlocks id=9 | partial(animated texture phase is not implemented) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/fluid_live.c:gm_fluid_tick; magma/world/mesh_mc.c:emit_fluid | scenario_water_dive_20260722T234816Z | - |
| 10 flowing_lava | Block.java:Block.registerBlocks id=10 | partial(animated texture phase is not implemented) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/fluid_live.c:gm_fluid_tick; magma/world/mesh_mc.c:emit_fluid | scenario_lava_walk_20260722T234940Z | - |
| 11 lava | Block.java:Block.registerBlocks id=11 | partial(animated texture phase is not implemented) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/fluid_live.c:gm_fluid_tick; magma/world/mesh_mc.c:emit_fluid | scenario_nether_elytra_20260729T110024Z | - |
| 12 sand | Block.java:Block.registerBlocks id=12 | partial(red-sand render provenance is lost and falling-block update is missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~-2 ~ ~5 ~2 ~ ~5 minecraft:sand 0` |
| 13 gravel | Block.java:Block.registerBlocks id=13 | partial(falling-block update is missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~-2 ~ ~5 ~2 ~ ~5 minecraft:gravel` |
| 14 gold_ore | Block.java:Block.registerBlocks id=14 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:gold_ore` |
| 15 iron_ore | Block.java:Block.registerBlocks id=15 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:iron_ore` |
| 16 coal_ore | Block.java:Block.registerBlocks id=16 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:coal_ore` |
| 17 log | Block.java:Block.registerBlocks id=17 | partial(non-oak horizontal-axis metadata renders vertically) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 18 leaves | Block.java:Block.registerBlocks id=18 | partial(leaf decay random tick missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 19 sponge | Block.java:Block.registerBlocks id=19 | partial(render falls back to stone and water absorption is missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:sponge 0` beside a water pool |
| 20 glass | Block.java:Block.registerBlocks id=20 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_flow_convert_20260723T002122Z | - |
| 21 lapis_ore | Block.java:Block.registerBlocks id=21 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:lapis_ore` |
| 22 lapis_block | Block.java:Block.registerBlocks id=22 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:lapis_block` |
| 23 dispenser | Block.java:Block.registerBlocks id=23 | cut | - | none | - |
| 24 sandstone | Block.java:Block.registerBlocks id=24 | partial(chiseled and smooth metadata render as plain sandstone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~-1 ~ ~5 ~1 ~ ~5 minecraft:sandstone 0` |
| 25 noteblock | Block.java:Block.registerBlocks id=25 | cut | - | none | - |
| 26 bed | Block.java:Block.registerBlocks id=26 | partial(render falls back to stone and collision is full-cube) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; magma/game/runtime.c:gm_runtime_use_block | none | `/give @p minecraft:bed 1` and place it on a flat stone pad |
| 27 golden_rail | Block.java:Block.registerBlocks id=27 | cut | - | none | - |
| 28 detector_rail | Block.java:Block.registerBlocks id=28 | cut | - | none | - |
| 29 sticky_piston | Block.java:Block.registerBlocks id=29 | cut | - | none | - |
| 30 web | Block.java:Block.registerBlocks id=30 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_cobweb_fall_20260723T001656Z | - |
| 31 tallgrass | Block.java:Block.registerBlocks id=31 | partial(shrub metadata renders as tall grass) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:break_unsupported_plants; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 32 deadbush | Block.java:Block.registerBlocks id=32 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:break_unsupported_plants; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:deadbush` on sand |
| 33 piston | Block.java:Block.registerBlocks id=33 | cut | - | none | - |
| 34 piston_head | Block.java:Block.registerBlocks id=34 | cut | - | none | - |
| 35 wool | Block.java:Block.registerBlocks id=35 | partial(render falls back to stone for every color) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~-2 ~ ~5 ~2 ~ ~5 minecraft:wool 0` |
| 36 piston_extension | Block.java:Block.registerBlocks id=36 | cut | - | none | - |
| 37 yellow_flower | Block.java:Block.registerBlocks id=37 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:break_unsupported_plants; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:yellow_flower` on grass |
| 38 red_flower | Block.java:Block.registerBlocks id=38 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:break_unsupported_plants; blaze/core/player_survival.h:psv_collect_blocks | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 39 brown_mushroom | Block.java:Block.registerBlocks id=39 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_nether_elytra_20260729T110024Z | - |
| 40 red_mushroom | Block.java:Block.registerBlocks id=40 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_nether_elytra_20260729T110024Z | - |
| 41 gold_block | Block.java:Block.registerBlocks id=41 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:gold_block` |
| 42 iron_block | Block.java:Block.registerBlocks id=42 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:iron_block` |
| 43 double_stone_slab | Block.java:Block.registerBlocks id=43 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:double_stone_slab 0` |
| 44 stone_slab | Block.java:Block.registerBlocks id=44 | partial(non-sandstone variants share one model and collision is full-cube) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:stone_slab 0` |
| 45 brick_block | Block.java:Block.registerBlocks id=45 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:brick_block` |
| 46 tnt | Block.java:Block.registerBlocks id=46 | partial(render falls back to stone and ignition behavior is missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:tnt` |
| 47 bookshelf | Block.java:Block.registerBlocks id=47 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:bookshelf` |
| 48 mossy_cobblestone | Block.java:Block.registerBlocks id=48 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:mossy_cobblestone` |
| 49 obsidian | Block.java:Block.registerBlocks id=49 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_dragon_kill_20260729T110941Z | - |
| 50 torch | Block.java:Block.registerBlocks id=50 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; magma/world/mesh_mc.c:emit_torch | scenario_dragon_kill_20260729T110941Z | - |
| 51 fire | Block.java:Block.registerBlocks id=51 | partial(fire spread and animated texture phase are missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; magma/world/mesh_mc.c:emit_fire | scenario_nether_elytra_20260729T110024Z | - |
| 52 mob_spawner | Block.java:Block.registerBlocks id=52 | partial(spawner mob logic is missing) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:mob_spawner` |
| 53 oak_stairs | Block.java:Block.registerBlocks id=53 | partial(render ignores orientation and collision is full-cube) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:oak_stairs 0` |
| 54 chest | Block.java:Block.registerBlocks id=54 | partial(render uses an oak-plank stand-in with no lid animation and collision is full-cube) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:gm_runtime_use_block; magma/game/sel_box.c:gm_sel_box | none | `/setblock ~ ~ ~5 minecraft:chest 2` |
| 55 redstone_wire | Block.java:Block.registerBlocks id=55 | cut | - | none | - |
| 56 diamond_ore | Block.java:Block.registerBlocks id=56 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:diamond_ore` |
| 57 diamond_block | Block.java:Block.registerBlocks id=57 | partial(render falls back to stone) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:diamond_block` |
| 58 crafting_table | Block.java:Block.registerBlocks id=58 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:gm_runtime_use_block; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:crafting_table` |
| 59 wheat | Block.java:Block.registerBlocks id=59 | partial(growth exists but render falls back to stone) | magma/game/live_sim.c:gm_live_tick; magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:farmland 7` then `/setblock ~ ~1 ~5 minecraft:wheat 7` |
| 60 farmland | Block.java:Block.registerBlocks id=60 | partial(render falls back to stone and collision is full-cube) | magma/game/live_sim.c:gm_live_tick; magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:farmland 7` |
| 61 furnace | Block.java:Block.registerBlocks id=61 | partial(container and smelting work but render falls back to stone) | magma/game/runtime.c:gm_runtime_use_block; magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:furnace 2` |
| 62 lit_furnace | Block.java:Block.registerBlocks id=62 | partial(render falls back to stone and live furnace does not expose the lit state) | magma/game/runtime.c:gm_runtime_use_block; magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~ ~ ~5 minecraft:lit_furnace 2` |
| 63 standing_sign | Block.java:Block.registerBlocks id=63 | cut | - | none | - |
| 64 wooden_door | Block.java:Block.registerBlocks id=64 | cut | - | none | - |
| 65 ladder | Block.java:Block.registerBlocks id=65 | partial(placement metadata, selection, and thin collision exist, but rendering falls back to stone) | magma/game/sel_box.c:gm_sel_box; blaze/core/item_block_place.h:ibp_meta_ladder; blaze/core/physics_collision_full.h:pcf_ladder_aabb | none | Build a stone wall, use `/setblock ~1 ~ ~ minecraft:ladder 5`, then climb and collide with it. |
| 66 rail | Block.java:Block.registerBlocks id=66 | cut | - | none | - |
| 67 stone_stairs | Block.java:Block.registerBlocks id=67 | partial(render missing and live collision is a full cube) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick | none | Use `/fill ~ ~ ~ ~4 ~2 ~ minecraft:stone_stairs 0` and walk across the stepped profile. |
| 68 wall_sign | Block.java:Block.registerBlocks id=68 | cut | - | none | - |
| 69 lever | Block.java:Block.registerBlocks id=69 | cut | - | none | - |
| 70 stone_pressure_plate | Block.java:Block.registerBlocks id=70 | cut | - | none | - |
| 71 iron_door | Block.java:Block.registerBlocks id=71 | cut | - | none | - |
| 72 wooden_pressure_plate | Block.java:Block.registerBlocks id=72 | cut | - | none | - |
| 73 redstone_ore | Block.java:Block.registerBlocks id=73 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-2 ~ ~-2 ~2 ~2 ~2 minecraft:redstone_ore` and mine through the ore cube. |
| 74 lit_redstone_ore | Block.java:Block.registerBlocks id=74 | partial(block properties exist but rendering falls back and ore activation is absent) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/setblock ~ ~ ~ minecraft:lit_redstone_ore` and record its light, texture, and reversion. |
| 75 unlit_redstone_torch | Block.java:Block.registerBlocks id=75 | cut | - | none | - |
| 76 redstone_torch | Block.java:Block.registerBlocks id=76 | cut | - | none | - |
| 77 stone_button | Block.java:Block.registerBlocks id=77 | cut | - | none | - |
| 78 snow_layer | Block.java:Block.registerBlocks id=78 | partial(render and selection support only a thin layer while stacked-layer collision is absent) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box | none | Use `/fill ~-3 ~ ~-3 ~3 ~ ~3 minecraft:snow_layer 7` and walk from bare ground onto eight-layer snow. |
| 79 ice | Block.java:Block.registerBlocks id=79 | implemented | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_slipperiness; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-8 ~-1 ~-2 ~8 ~-1 ~2 minecraft:ice` and sprint, stop, and slide across it. |
| 80 snow | Block.java:Block.registerBlocks id=80 | partial(placement and full-block collision work but rendering falls back) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/fill ~-2 ~ ~-2 ~2 ~2 ~2 minecraft:snow` and circle the exposed faces. |
| 81 cactus | Block.java:Block.registerBlocks id=81 | partial(generates and renders but live collision is full-cube and cactus damage and growth are absent) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; magma/game/runtime.c:plant_support_ok | none | Put sand down with `/setblock ~ ~-1 ~ minecraft:sand`, stack cactus with `/fill ~ ~ ~ ~ ~2 ~ minecraft:cactus`, and walk into it. |
| 82 clay | Block.java:Block.registerBlocks id=82 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-3 ~-1 ~-3 ~3 ~1 ~3 minecraft:clay` beside water and mine an exposed face. |
| 83 reeds | Block.java:Block.registerBlocks id=83 | partial(generates and renders with support checks but the reeds item cannot place the block) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/runtime.c:plant_support_ok; magma/game/sel_box.c:gm_sel_box | none | Place water beside grass, then use `/fill ~ ~1 ~ ~ ~3 ~ minecraft:reeds` and remove its support. |
| 84 jukebox | Block.java:Block.registerBlocks id=84 | cut | - | none | - |
| 85 fence | Block.java:Block.registerBlocks id=85 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~3 ~ ~-3 ~3 ~ ~3 minecraft:fence` and test connected rendering and the 1.5-block collision top. |
| 86 pumpkin | Block.java:Block.registerBlocks id=86 | implemented | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/item_block_place.h:ibp_meta_pumpkin; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-2 ~ ~-2 ~2 ~1 ~2 minecraft:pumpkin 0` and record all four facing metadata values. |
| 87 netherrack | Block.java:Block.registerBlocks id=87 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_blaze_bow_20260722T092838Z, scenario_blaze_bow_demo_20260722T104234Z, scenario_blaze_melee_20260722T092705Z, scenario_nether_elytra_20260729T110024Z, scenario_pigmen_aggro_20260722T093154Z | - |
| 88 soul_sand | Block.java:Block.registerBlocks id=88 | implemented | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks; blaze/core/player_survival.h:psv_do_block_collisions | scenario_soulsand_ice_20260723T001810Z | - |
| 89 glowstone | Block.java:Block.registerBlocks id=89 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_nether_elytra_20260729T110024Z | - |
| 90 portal | Block.java:Block.registerBlocks id=90 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/portal_live.c:gm_portal_ignite; magma/game/runtime.c:gm_runtime_tick | none | Build an obsidian frame, use `/setblock ~ ~ ~ minecraft:portal 1`, then stand in it through the dimension transfer. |
| 91 lit_pumpkin | Block.java:Block.registerBlocks id=91 | partial(light and collision properties exist but rendering falls back and facing placement is generic) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick | none | Use `/setblock ~ ~ ~ minecraft:lit_pumpkin 0` through metadata 3 and view its emitted light from every side. |
| 92 cake | Block.java:Block.registerBlocks id=92 | partial(selection shape exists but item placement, rendering, eating, and collision are not faithful) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props | none | Use `/setblock ~ ~ ~ minecraft:cake 0`, eat successive slices, and walk against the shrinking box. |
| 93 unpowered_repeater | Block.java:Block.registerBlocks id=93 | cut | - | none | - |
| 94 powered_repeater | Block.java:Block.registerBlocks id=94 | cut | - | none | - |
| 95 stained_glass | Block.java:Block.registerBlocks id=95 | partial(generic placement and collision exist but colored transparent rendering falls back) | magma/game/player_ctl.c:gm_player_tick; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/fill ~-4 ~ ~ ~4 ~4 ~ minecraft:stained_glass 14` and view terrain through the red wall. |
| 96 trapdoor | Block.java:Block.registerBlocks id=96 | partial(selection and click metadata exist but rendering falls back and live collision remains a full cube) | magma/game/sel_box.c:gm_sel_box; magma/game/player_ctl.c:gm_player_tick | none | Use `/setblock ~ ~ ~ minecraft:trapdoor 0`, click it open, and collide with both horizontal and vertical poses. |
| 97 monster_egg | Block.java:Block.registerBlocks id=97 | partial(generates and renders a collapsed host-stone model but metadata variants and silverfish release are absent) | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/block_props_table.h:mc_bpt_props | none | Use `/fill ~-2 ~ ~-2 ~2 ~2 ~2 minecraft:monster_egg 0` and mine several blocks to trigger silverfish. |
| 98 stonebrick | Block.java:Block.registerBlocks id=98 | partial(generation, placement, and full collision exist but all stone-brick variants render as fallback) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/fill ~-4 ~ ~ ~4 ~3 ~ minecraft:stonebrick 0` with metadata 1 through 3 patches and pan across the wall. |
| 99 brown_mushroom_block | Block.java:Block.registerBlocks id=99 | partial(generates and renders but mushroom-cap face metadata is collapsed) | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-2 ~ ~-2 ~2 ~2 ~2 minecraft:brown_mushroom_block 0` with several cap metadata values exposed. |
| 100 red_mushroom_block | Block.java:Block.registerBlocks id=100 | partial(generates and renders but mushroom-cap face metadata is collapsed) | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-2 ~ ~-2 ~2 ~2 ~2 minecraft:red_mushroom_block 0` with several cap metadata values exposed. |
| 101 iron_bars | Block.java:Block.registerBlocks id=101 | partial(render and connected selection exist but live player collision is a full cube) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; blaze/core/player_survival.h:psv_collect_blocks | scenario_dragon_kill_20260729T110941Z, scenario_dragon_kill_geared_20260730T025316Z, scenario_ender_dragon_20260722T093713Z, scenario_ender_dragon_20260722T094040Z, scenario_ender_dragon_demo_20260722T104500Z | - |
| 102 glass_pane | Block.java:Block.registerBlocks id=102 | partial(connected selection exists but rendering falls back and live player collision is a full cube) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/fill ~3 ~ ~-3 ~3 ~ ~3 minecraft:glass_pane` beside glass blocks and test every connection and gap. |
| 103 melon_block | Block.java:Block.registerBlocks id=103 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | none | Use `/fill ~-3 ~ ~-3 ~3 ~2 ~3 minecraft:melon_block` and mine and collide with the exposed stack. |
| 104 pumpkin_stem | Block.java:Block.registerBlocks id=104 | partial(selection and no-collision properties exist but rendering, seed placement, growth, and fruit attachment are absent) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props | none | Put farmland below, use `/setblock ~ ~ ~ minecraft:pumpkin_stem 7`, and tick it beside an empty fruit cell. |
| 105 melon_stem | Block.java:Block.registerBlocks id=105 | partial(selection and no-collision properties exist but rendering, seed placement, growth, and fruit attachment are absent) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props | none | Put farmland below, use `/setblock ~ ~ ~ minecraft:melon_stem 7`, and tick it beside an empty fruit cell. |
| 106 vine | Block.java:Block.registerBlocks id=106 | partial(generates and renders attached faces but item placement orientation, support, and growth are not faithful) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; magma/game/player_ctl.c:gm_player_tick | none | Build a stone corner, use `/setblock ~1 ~ ~ minecraft:vine 2`, and inspect attached faces after removing support. |
| 107 fence_gate | Block.java:Block.registerBlocks id=107 | partial(selection and open metadata toggle exist but rendering falls back and collision stays closed and full-cube) | magma/game/sel_box.c:gm_sel_box; magma/game/player_ctl.c:gm_player_tick | none | Put a gate in a fence run with `/setblock ~ ~ ~ minecraft:fence_gate 0`, then open it and walk through. |
| 108 brick_stairs | Block.java:Block.registerBlocks id=108 | partial(render missing, orientation placement generic, and live collision is a full cube) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick | none | Use `/fill ~ ~ ~ ~4 ~2 ~ minecraft:brick_stairs 0` and walk across bottom and top-half variants. |
| 109 stone_brick_stairs | Block.java:Block.registerBlocks id=109 | partial(render missing, orientation placement generic, and live collision is a full cube) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick | none | Use `/fill ~ ~ ~ ~4 ~2 ~ minecraft:stone_brick_stairs 0` and walk across bottom and top-half variants. |
| 110 mycelium | Block.java:Block.registerBlocks id=110 | partial(generates, places, renders, and collides but random-tick spread is absent) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/block_props_table.h:mc_bpt_props | none | Use `/fill ~-3 ~ ~-3 ~3 ~ ~3 minecraft:mycelium`, border it with dirt, and raise random tick speed to watch spread. |
| 111 waterlily | Block.java:Block.registerBlocks id=111 | partial(generates and renders with support cleanup but player collision and water-only placement checks are absent) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; magma/game/runtime.c:plant_support_ok | none | Fill a shallow pool, use `/setblock ~ ~1 ~ minecraft:waterlily`, then walk over it and remove the water. |
| 112 nether_brick | Block.java:Block.registerBlocks id=112 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_wither_skeleton_20260722T093020Z | - |
| 113 nether_brick_fence | Block.java:Block.registerBlocks id=113 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; blaze/core/player_survival.h:psv_collect_blocks | scenario_fence_collide_20260723T002017Z | - |
| 114 nether_brick_stairs | Block.java:Block.registerBlocks id=114 | partial(render missing, orientation placement generic, and live collision is a full cube) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/player_ctl.c:gm_player_tick | none | Use `/fill ~ ~ ~ ~4 ~2 ~ minecraft:nether_brick_stairs 0` and walk across bottom and top-half variants. |
| 115 nether_wart | Block.java:Block.registerBlocks id=115 | partial(selection and random-tick flags exist but rendering, wart-item placement, and growth are absent) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props | none | Put soul sand below, use `/setblock ~ ~ ~ minecraft:nether_wart 0`, and record every growth metadata stage. |
| 116 enchanting_table | Block.java:Block.registerBlocks id=116 | cut | - | none | - |
| 117 brewing_stand | Block.java:Block.registerBlocks id=117 | cut | - | none | - |
| 118 cauldron | Block.java:Block.registerBlocks id=118 | partial(block properties exist but rendering, basin collision, filling, and interaction are absent) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/setblock ~ ~ ~ minecraft:cauldron 3`, circle its rim, step inside, and empty it with a bucket. |
| 119 end_portal | Block.java:Block.registerBlocks id=119 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/dragon_live.c:gm_dragon_tick; magma/game/runtime.c:gm_runtime_tick | none | Use `/fill ~-1 ~ ~-1 ~1 ~ ~1 minecraft:end_portal` and step through from both the Overworld and End. |
| 120 end_portal_frame | Block.java:Block.registerBlocks id=120 | partial(generates, renders, and accepts eyes but live collision is full-height instead of 13/16) | magma/game/block_registry.h:gm_state_to_model_key; magma/game/sel_box.c:gm_sel_box; magma/game/portal_live.c:gm_end_portal_insert_eye | none | Build a twelve-frame ring with `/setblock` commands, add eye metadata, and walk over an empty and filled frame. |
| 121 end_stone | Block.java:Block.registerBlocks id=121 | implemented | magma/game/block_registry.h:gm_state_to_model_key; magma/game/player_ctl.c:gm_player_tick; blaze/core/player_survival.h:psv_collect_blocks | scenario_dragon_kill_20260729T110941Z, scenario_dragon_kill_geared_20260730T025316Z, scenario_ender_dragon_20260722T093713Z, scenario_ender_dragon_20260722T094040Z, scenario_ender_dragon_demo_20260722T104500Z, scenario_enderman_fight_20260722T093335Z | - |
| 122 dragon_egg | Block.java:Block.registerBlocks id=122 | partial(dragon death generates it but rendering falls back and teleport and falling behavior are absent) | blaze/core/ender_dragon_death.h:ede_place_dragon_egg; magma/game/dragon_live.c:gm_dragon_tick; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/setblock ~ ~2 ~ minecraft:dragon_egg`, let it fall, then click it to exercise teleport and particles. |
| 123 redstone_lamp | Block.java:Block.registerBlocks id=123 | cut | - | none | - |
| 124 lit_redstone_lamp | Block.java:Block.registerBlocks id=124 | cut | - | none | - |
| 125 double_wooden_slab | Block.java:Block.registerBlocks id=125 | partial(full collision properties exist but rendering falls back and normal item placement cannot create it) | blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/setblock ~ ~ ~ minecraft:double_wooden_slab 0` through wood metadata 5 and inspect every face. |
| 126 wooden_slab | Block.java:Block.registerBlocks id=126 | partial(selection metadata exists but rendering falls back and live collision is a full cube) | magma/game/sel_box.c:gm_sel_box; blaze/core/block_props_table.h:mc_bpt_props; magma/game/block_registry.h:gm_state_to_model_key | none | Use `/fill ~-3 ~ ~ ~3 ~ ~ minecraft:wooden_slab 0`, add top slabs with metadata 8, and walk the seam. |
| 127 cocoa | Block.java:Block.registerBlocks id=127 | partial(generates a lossy model but age and facing collapse, item placement is absent, and collision is full-cube) | magma/game/block_registry.h:gm_state_to_model_key; blaze/core/block_props_table.h:mc_bpt_props | none | Place a jungle log, use `/setblock ~1 ~ ~ minecraft:cocoa 0` through age and facing metadata, and circle it. |
| 128 sandstone_stairs | Block.java:Block.registerBlocks id=128 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:sandstone_stairs 0`, then circle it and jump onto it. |
| 129 emerald_ore | Block.java:Block.registerBlocks id=129 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, magma/world/populate_mc.c:popmc_decorate_chunk | none | `/setblock ~2 ~ ~ minecraft:emerald_ore`, then inspect and mine it. |
| 130 ender_chest | Block.java:Block.registerBlocks id=130 | partial(selection and light properties exist; render and ender-chest inventory are absent) | magma/game/sel_box.c:gm_sel_box, magma/game/overlay_live.c:overlay_particle_sprite, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:ender_chest 2`, then open and break it. |
| 131 tripwire_hook | Block.java:Block.registerBlocks id=131 | cut | - | none | - |
| 132 tripwire | Block.java:Block.registerBlocks id=132 | cut | - | none | - |
| 133 emerald_block | Block.java:Block.registerBlocks id=133 | partial(placement and full-cube collision exist; render falls back to stone) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:emerald_block`, then inspect, collide with, and mine it. |
| 134 spruce_stairs | Block.java:Block.registerBlocks id=134 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:spruce_stairs 0`, then circle it and jump onto it. |
| 135 birch_stairs | Block.java:Block.registerBlocks id=135 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:birch_stairs 0`, then circle it and jump onto it. |
| 136 jungle_stairs | Block.java:Block.registerBlocks id=136 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:jungle_stairs 0`, then circle it and jump onto it. |
| 137 command_block | Block.java:Block.registerBlocks id=137 | cut | - | none | - |
| 138 beacon | Block.java:Block.registerBlocks id=138 | cut | - | none | - |
| 139 cobblestone_wall | Block.java:Block.registerBlocks id=139 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | scenario_fence_collide_20260723T002017Z | - |
| 140 flower_pot | Block.java:Block.registerBlocks id=140 | partial(selection and block properties exist; pot render and contents are absent) | magma/game/sel_box.c:gm_sel_box, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:flower_pot`, then right-click it with a red flower. |
| 141 carrots | Block.java:Block.registerBlocks id=141 | partial(age selection exists; placement, render, and growth are absent) | magma/game/sel_box.c:gm_sel_box, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~-1 ~ minecraft:farmland 7` and `/setblock ~2 ~ ~ minecraft:carrots 7`, then harvest it. |
| 142 potatoes | Block.java:Block.registerBlocks id=142 | partial(age selection exists; placement, render, and growth are absent) | magma/game/sel_box.c:gm_sel_box, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~-1 ~ minecraft:farmland 7` and `/setblock ~2 ~ ~ minecraft:potatoes 7`, then harvest it. |
| 143 wooden_button | Block.java:Block.registerBlocks id=143 | cut | - | none | - |
| 144 skull | Block.java:Block.registerBlocks id=144 | partial(selection and particle choice exist; block render, tile entity, and collision are incomplete) | magma/game/sel_box.c:gm_sel_box, magma/game/overlay_live.c:overlay_particle_sprite | none | `/setblock ~2 ~ ~ minecraft:skull 1`, then view it from all sides and break it. |
| 145 anvil | Block.java:Block.registerBlocks id=145 | cut | - | none | - |
| 146 trapped_chest | Block.java:Block.registerBlocks id=146 | cut | - | none | - |
| 147 light_weighted_pressure_plate | Block.java:Block.registerBlocks id=147 | cut | - | none | - |
| 148 heavy_weighted_pressure_plate | Block.java:Block.registerBlocks id=148 | cut | - | none | - |
| 149 unpowered_comparator | Block.java:Block.registerBlocks id=149 | cut | - | none | - |
| 150 powered_comparator | Block.java:Block.registerBlocks id=150 | cut | - | none | - |
| 151 daylight_detector | Block.java:Block.registerBlocks id=151 | cut | - | none | - |
| 152 redstone_block | Block.java:Block.registerBlocks id=152 | cut | - | none | - |
| 153 quartz_ore | Block.java:Block.registerBlocks id=153 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, blaze/core/block_props_table.h:mc_bpt_props | scenario_nether_elytra_20260729T110024Z | - |
| 154 hopper | Block.java:Block.registerBlocks id=154 | cut | - | none | - |
| 155 quartz_block | Block.java:Block.registerBlocks id=155 | partial(full-cube properties exist; render falls back to stone and quartz variants are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/fill ~2 ~ ~2 ~4 ~2 ~4 minecraft:quartz_block 0`, then add pillar and chiseled metas beside it. |
| 156 quartz_stairs | Block.java:Block.registerBlocks id=156 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:quartz_stairs 0`, then circle it and jump onto it. |
| 157 activator_rail | Block.java:Block.registerBlocks id=157 | cut | - | none | - |
| 158 dropper | Block.java:Block.registerBlocks id=158 | cut | - | none | - |
| 159 stained_hardened_clay | Block.java:Block.registerBlocks id=159 | partial(all metadata maps, but every color renders with the white texture) | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, blaze/core/block_props_table.h:mc_bpt_props | none | `/fill ~2 ~ ~2 ~17 ~ ~2 minecraft:stained_hardened_clay 0`, replacing each block with metas 0 through 15. |
| 160 stained_glass_pane | Block.java:Block.registerBlocks id=160 | partial(connected selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~2 ~2 minecraft:stained_glass_pane 14`, then walk along and into the pane run. |
| 161 leaves2 | Block.java:Block.registerBlocks id=161 | partial(generation, render, and collision exist; leaf decay is absent) | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, magma/world/populate_mc.c:popmc_decorate_chunk | none | `/fill ~2 ~ ~2 ~6 ~3 ~6 minecraft:leaves2 0`, remove supporting logs, and observe the canopy. |
| 162 log2 | Block.java:Block.registerBlocks id=162 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, magma/world/populate_mc.c:popmc_decorate_chunk | none | `/setblock ~2 ~ ~ minecraft:log2 0` and `/setblock ~3 ~ ~ minecraft:log2 1`, then inspect and mine both species. |
| 163 acacia_stairs | Block.java:Block.registerBlocks id=163 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:acacia_stairs 0`, then circle it and jump onto it. |
| 164 dark_oak_stairs | Block.java:Block.registerBlocks id=164 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:dark_oak_stairs 0`, then circle it and jump onto it. |
| 165 slime | Block.java:Block.registerBlocks id=165 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, blaze/core/player_survival.h:psv_physics_tick | scenario_slime_bounce_20260723T001527Z | - |
| 166 barrier | Block.java:Block.registerBlocks id=166 | partial(invisible overlay behavior and solid collision exist; world render falls back to stone) | magma/game/overlay_live.c:overlay_render_invisible, blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~2 ~ ~ minecraft:barrier`, switch to survival, and walk into it while holding a barrier. |
| 167 iron_trapdoor | Block.java:Block.registerBlocks id=167 | partial(selection and interaction-state logic exist, but rendering falls back to stone and player collision is full-cube; redstone operation is cut) | magma/game/sel_box.c:gm_sel_box, blaze/core/interact_blocks.h:ib_apply | none | `/setblock ~2 ~ ~ minecraft:iron_trapdoor 0`, then compare collision and powered open states. |
| 168 prismarine | Block.java:Block.registerBlocks id=168 | partial(full-cube properties exist; render falls back to stone) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/fill ~2 ~ ~2 ~4 ~2 ~4 minecraft:prismarine 0`, then stage metas 1 and 2 beside it. |
| 169 sea_lantern | Block.java:Block.registerBlocks id=169 | partial(collision and light emission exist; render falls back to stone) | magma/world/light.c:state_emission, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:sea_lantern`, then enclose it at night to inspect emitted light. |
| 170 hay_block | Block.java:Block.registerBlocks id=170 | partial(full-cube properties exist; render and axis placement are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:hay_block 0`, then add metas 4 and 8 to compare all axes. |
| 171 carpet | Block.java:Block.registerBlocks id=171 | partial(thin selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~ ~6 minecraft:carpet 14`, then walk and jump across it. |
| 172 hardened_clay | Block.java:Block.registerBlocks id=172 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, magma/world/populate_mc.c:popmc_decorate_chunk | none | `/fill ~2 ~ ~2 ~6 ~2 ~6 minecraft:hardened_clay`, then inspect and mine the wall. |
| 173 coal_block | Block.java:Block.registerBlocks id=173 | partial(full-cube properties exist; render falls back to stone) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:coal_block`, then inspect, collide with, and mine it. |
| 174 packed_ice | Block.java:Block.registerBlocks id=174 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, blaze/core/player_survival.h:psv_slipperiness | scenario_soulsand_ice_20260723T001810Z | - |
| 175 double_plant | Block.java:Block.registerBlocks id=175 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_dplant_upper, magma/world/mesh_mc.c:dplant_type_from_below | 20260721T215812Z_fast_s0_survival_default_rd8_77b5b462 | - |
| 176 standing_banner | Block.java:Block.registerBlocks id=176 | missing | - | none | `/setblock ~2 ~ ~ minecraft:standing_banner 0 replace {Base:14}`, then view it from all sides. |
| 177 wall_banner | Block.java:Block.registerBlocks id=177 | missing | - | none | `/setblock ~2 ~1 ~ minecraft:wall_banner 2 replace {Base:11}`, then view its wall attachment. |
| 178 daylight_detector_inverted | Block.java:Block.registerBlocks id=178 | cut | - | none | - |
| 179 red_sandstone | Block.java:Block.registerBlocks id=179 | implemented | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block, magma/world/populate_mc.c:popmc_decorate_chunk | none | `/fill ~2 ~ ~2 ~6 ~2 ~6 minecraft:red_sandstone 0`, then stage metas 1 and 2 beside it. |
| 180 red_sandstone_stairs | Block.java:Block.registerBlocks id=180 | partial(render falls back to stone; stair orientation and collision are absent) | magma/game/player_ctl.c:gm_player_tick, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:red_sandstone_stairs 0`, then circle it and jump onto it. |
| 181 double_stone_slab2 | Block.java:Block.registerBlocks id=181 | partial(full-cube properties exist; render and survival placement are absent) | magma/game/world_live.c:gm_world_set_block_meta, blaze/core/block_props_table.h:mc_bpt_props | none | `/setblock ~2 ~ ~ minecraft:double_stone_slab2 0`, then inspect, collide with, and mine it. |
| 182 stone_slab2 | Block.java:Block.registerBlocks id=182 | partial(half-slab selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/setblock ~2 ~ ~ minecraft:stone_slab2 0` and `/setblock ~3 ~ ~ minecraft:stone_slab2 8`, then walk across both halves. |
| 183 spruce_fence_gate | Block.java:Block.registerBlocks id=183 | partial(selection and interaction exist; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, magma/game/player_ctl.c:gm_player_tick | none | `/setblock ~2 ~ ~ minecraft:spruce_fence_gate 0`, then open it and walk through. |
| 184 birch_fence_gate | Block.java:Block.registerBlocks id=184 | partial(selection and interaction exist; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, magma/game/player_ctl.c:gm_player_tick | none | `/setblock ~2 ~ ~ minecraft:birch_fence_gate 0`, then open it and walk through. |
| 185 jungle_fence_gate | Block.java:Block.registerBlocks id=185 | partial(selection and interaction exist; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, magma/game/player_ctl.c:gm_player_tick | none | `/setblock ~2 ~ ~ minecraft:jungle_fence_gate 0`, then open it and walk through. |
| 186 dark_oak_fence_gate | Block.java:Block.registerBlocks id=186 | partial(selection and interaction exist; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, magma/game/player_ctl.c:gm_player_tick | none | `/setblock ~2 ~ ~ minecraft:dark_oak_fence_gate 0`, then open it and walk through. |
| 187 acacia_fence_gate | Block.java:Block.registerBlocks id=187 | partial(selection and interaction exist; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, magma/game/player_ctl.c:gm_player_tick | none | `/setblock ~2 ~ ~ minecraft:acacia_fence_gate 0`, then open it and walk through. |
| 188 spruce_fence | Block.java:Block.registerBlocks id=188 | partial(connected selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~ ~2 minecraft:spruce_fence`, then jump against and walk along the run. |
| 189 birch_fence | Block.java:Block.registerBlocks id=189 | partial(connected selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~ ~2 minecraft:birch_fence`, then jump against and walk along the run. |
| 190 jungle_fence | Block.java:Block.registerBlocks id=190 | partial(connected selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~ ~2 minecraft:jungle_fence`, then jump against and walk along the run. |
| 191 dark_oak_fence | Block.java:Block.registerBlocks id=191 | partial(connected selection exists; render is missing and physics collision is a full cube) | magma/game/sel_box.c:gm_sel_box, blaze/core/player_survival.h:psv_collect_blocks | none | `/fill ~2 ~ ~2 ~6 ~ ~2 minecraft:dark_oak_fence`, then jump against and walk along the run. |
| 192 acacia_fence | Block.java:Block.registerBlocks id=192 | partial(selection box exists, but player collision is full-cube and rendering falls back to stone) | magma/game/sel_box.c:gm_sel_box, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~-3 ~2 ~ ~3 minecraft:acacia_fence`, then walk and jump against it |
| 193 spruce_door | Block.java:Block.registerBlocks id=193 | cut | - | none | - |
| 194 birch_door | Block.java:Block.registerBlocks id=194 | cut | - | none | - |
| 195 jungle_door | Block.java:Block.registerBlocks id=195 | cut | - | none | - |
| 196 acacia_door | Block.java:Block.registerBlocks id=196 | cut | - | none | - |
| 197 dark_oak_door | Block.java:Block.registerBlocks id=197 | cut | - | none | - |
| 198 end_rod | Block.java:Block.registerBlocks id=198 | partial(selection box exists, but player collision is full-cube and rendering falls back to stone) | magma/game/sel_box.c:gm_sel_box, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:end_rod 0`, then view and collide from several faces |
| 199 chorus_plant | Block.java:Block.registerBlocks id=199 | partial(place/load and generic collision only; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~-1 ~ minecraft:end_stone`; `/setblock ~2 ~ ~ minecraft:chorus_plant` |
| 200 chorus_flower | Block.java:Block.registerBlocks id=200 | partial(place/load and generic collision only; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~-1 ~ minecraft:end_stone`; `/setblock ~2 ~ ~ minecraft:chorus_flower 0` |
| 201 purpur_block | Block.java:Block.registerBlocks id=201 | partial(place/load and full-cube collision exist; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~2 ~5 ~2 ~5 minecraft:purpur_block`, then circle and mine the cube |
| 202 purpur_pillar | Block.java:Block.registerBlocks id=202 | partial(place/load and full-cube collision exist; rendering and axis states fall back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~2 ~4 ~2 ~2 minecraft:purpur_pillar`, including horizontal metadata variants |
| 203 purpur_stairs | Block.java:Block.registerBlocks id=203 | partial(place/load only; rendering falls back to stone and collision is a full cube) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:purpur_stairs 0`, then walk up and inspect every face |
| 204 purpur_double_slab | Block.java:Block.registerBlocks id=204 | partial(place/load and full-cube collision exist; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:purpur_double_slab 0`, then circle and mine it |
| 205 purpur_slab | Block.java:Block.registerBlocks id=205 | partial(place/load only; rendering falls back to stone and collision is a full cube) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:purpur_slab 0`; `/setblock ~3 ~ ~ minecraft:purpur_slab 8` |
| 206 end_bricks | Block.java:Block.registerBlocks id=206 | partial(place/load and generic full-cube collision exist; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~2 ~5 ~2 ~5 minecraft:end_bricks`, then circle and mine the cube |
| 207 beetroots | Block.java:Block.registerBlocks id=207 | partial(place/load only; rendering falls back to stone and collision is a full cube) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~-1 ~ minecraft:farmland`; `/setblock ~2 ~ ~ minecraft:beetroots 7` |
| 208 grass_path | Block.java:Block.registerBlocks id=208 | partial(place/load only; rendering falls back to stone and collision uses full-block height) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~-2 ~6 ~ ~2 minecraft:grass_path`, then walk across the height transition |
| 209 end_gateway | Block.java:Block.registerBlocks id=209 | partial(load hook accepts it, but rendering falls back to stone and collision is solid instead of portal-like) | magma/game/runtime.c:gm_runtime_load_block, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:end_gateway`, then view its beam and enter it |
| 210 repeating_command_block | Block.java:Block.registerBlocks id=210 | cut | - | none | - |
| 211 chain_command_block | Block.java:Block.registerBlocks id=211 | cut | - | none | - |
| 212 frosted_ice | Block.java:Block.registerBlocks id=212 | partial(place/load and generic collision only; rendering falls back to stone and ice slipperiness is absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~-2 ~8 ~ ~2 minecraft:frosted_ice 0`, then sprint and wait for decay |
| 213 magma | Block.java:Block.registerBlocks id=213 | partial(place/load, render, and solid collision exist, but hot-floor damage and vanilla hardness are absent) | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block | scenario_nether_elytra_20260729T110024Z | - |
| 214 nether_wart_block | Block.java:Block.registerBlocks id=214 | partial(place/load and generic full-cube collision exist; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~2 ~5 ~2 ~5 minecraft:nether_wart_block`, then circle and mine the cube |
| 215 red_nether_brick | Block.java:Block.registerBlocks id=215 | partial(place/load and generic full-cube collision exist; rendering falls back to stone) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/fill ~2 ~ ~2 ~5 ~2 ~5 minecraft:red_nether_brick`, then circle and mine the cube |
| 216 bone_block | Block.java:Block.registerBlocks id=216 | partial(place/load, render, and solid collision exist, but axis metadata is discarded) | magma/game/block_registry.h:gm_state_to_model_key, magma/assets/blockmodels.c:bm_block | none | `/setblock ~2 ~ ~ minecraft:bone_block 0`; place axis metadata variants beside it |
| 217 structure_void | Block.java:Block.registerBlocks id=217 | partial(load hook accepts it, but it renders as stone and collides as a solid cube) | magma/game/runtime.c:gm_runtime_load_block, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:structure_void`, then inspect in creative and walk through it |
| 218 observer | Block.java:Block.registerBlocks id=218 | cut | - | none | - |
| 219 white_shulker_box | Block.java:Block.registerBlocks id=219 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:white_shulker_box`, then open it and view the lid |
| 220 orange_shulker_box | Block.java:Block.registerBlocks id=220 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:orange_shulker_box`, then open it and view the lid |
| 221 magenta_shulker_box | Block.java:Block.registerBlocks id=221 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:magenta_shulker_box`, then open it and view the lid |
| 222 light_blue_shulker_box | Block.java:Block.registerBlocks id=222 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:light_blue_shulker_box`, then open it and view the lid |
| 223 yellow_shulker_box | Block.java:Block.registerBlocks id=223 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:yellow_shulker_box`, then open it and view the lid |
| 224 lime_shulker_box | Block.java:Block.registerBlocks id=224 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:lime_shulker_box`, then open it and view the lid |
| 225 pink_shulker_box | Block.java:Block.registerBlocks id=225 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:pink_shulker_box`, then open it and view the lid |
| 226 gray_shulker_box | Block.java:Block.registerBlocks id=226 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:gray_shulker_box`, then open it and view the lid |
| 227 silver_shulker_box | Block.java:Block.registerBlocks id=227 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:silver_shulker_box`, then open it and view the lid |
| 228 cyan_shulker_box | Block.java:Block.registerBlocks id=228 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:cyan_shulker_box`, then open it and view the lid |
| 229 purple_shulker_box | Block.java:Block.registerBlocks id=229 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:purple_shulker_box`, then open it and view the lid |
| 230 blue_shulker_box | Block.java:Block.registerBlocks id=230 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:blue_shulker_box`, then open it and view the lid |
| 231 brown_shulker_box | Block.java:Block.registerBlocks id=231 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:brown_shulker_box`, then open it and view the lid |
| 232 green_shulker_box | Block.java:Block.registerBlocks id=232 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:green_shulker_box`, then open it and view the lid |
| 233 red_shulker_box | Block.java:Block.registerBlocks id=233 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:red_shulker_box`, then open it and view the lid |
| 234 black_shulker_box | Block.java:Block.registerBlocks id=234 | partial(place/load and generic collision only; box rendering and container behavior are absent) | magma/game/player_ctl.c:gm_player_tick, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:black_shulker_box`, then open it and view the lid |
| 255 structure_block | Block.java:Block.registerBlocks id=255 | partial(load hook accepts it, but rendering falls back to stone and structure UI behavior is absent) | magma/game/runtime.c:gm_runtime_load_block, magma/game/block_registry.h:gm_state_to_model_key | none | `/setblock ~2 ~ ~ minecraft:structure_block`, then open its mode UI and view all faces |

CENSUS blocks DONE rows=236
