While creating a webpage on hacking Minecraft, I realized that there were significantly more blocks available than were listed in the blocks.py library file. Not including redefinitions, there are 70 blocks defined by the library, but there are at least 294 blocks that can be created in the Minecraft Pi Edition. This web page documents the current list of blocks that I know of.
Unfortunately, the Minecraft API doesn't make it easy to definitively find the complete list of blocks. The response to creating a block using an invalid combination of id and data sometimes returns a failed response, but just as often it will repeat one of the blocks in the series, or will modulus the value and repeat a series of blocks over and over. The list below has been "cleaned" of what appeared to be obvious incorrect responses, however there is always a possibility that some valid blocks may have been removed. For anyone that feels like exploring the blocks themselves, I have provided the scripts that I used at the bottom of this page.
Based on experimentation, the valid range for "id" is 0-255, and the valid range for "data" is 0-15, making 4096 possible combinations. There are a few blocks that I couldn't identify or get to work properly. If you know the answer, please contact me using the feedback button, so that I can update the page. Thanks.
Block(id, data) | Image | Descrption |
---|---|---|
Block(0,0) |
AIR This looks empty, but it's not. Using AIR is a great way to erase, or create openings. |
|
Block(1,0) | STONE | |
Block(2,0) | GRASS | |
Block(3,0) | DIRT | |
Block(4,0) | COBBLESTONE | |
Block(5,0) | OAK_WOOD_PLANK | |
Block(6,0) | OAK_SAPLING | |
Block(6,1) | SPRUCE_SAPLING | |
Block(6,2) | BIRCH_SAPLING | |
Block(7,0) | BEDROCK | |
Block(8,0) |
FLOWING_WATER_0 (Fills) This block creates flowing water that fills a space as though there is a continuous source of water. |
|
Block(8,1) |
FLOWING_WATER_1 (Drains) This looks empty only because it was hard to take a picture of. This block is like flowing water, with no source. The result is that all of the water drains away. |
|
Block(9,0) | STILL_WATER_0 | |
Block(9,1) | STILL_WATER_1 | |
Block(9,2) | STILL_WATER_2 | |
Block(9,3) | STILL_WATER_3 | |
Block(9,4) | STILL_WATER_4 | |
Block(9,5) | STILL_WATER_5 | |
Block(9,6) | STILL_WATER_6 | |
Block(9,7) | STILL_WATER_7 | |
Block(10,0) |
FLOWING_LAVA_0 (Fills) This block creates flowing lava that fills a space as though there is a continuous source of lava. |
|
Block(10,1) |
FLOWING_LAVA_1 (Drains) This block is like flowing lava, with no source. The result is that all of the lava drains away. |
|
Block(11,0) | STILL_LAVA_0 | |
Block(11,1) | STILL_LAVA_1 | |
Block(11,2) | STILL_LAVA_2 | |
Block(11,3) | STILL_LAVA_3 | |
Block(11,4) | STILL_LAVA_4 | |
Block(11,5) | STILL_LAVA_5 | |
Block(11,6) | STILL_LAVA_6 | |
Block(11,7) | STILL_LAVA_7 | |
Block(12,0) |
SAND (gravity) If this block is placed in a location that is unsupported, it will fall. |
|
Block(13,0) |
GRAVEL (gravity) If this block is placed in a location that is unsupported, it will fall. |
|
Block(14,0) | GOLD_ORE | |
Block(15,0) | IRON_ORE | |
Block(16,0) | COAL_ORE | |
Block(17,0) | OAK_WOOD | |
Block(17,1) | SPRUCE_WOOD | |
Block(17,2) | BIRCH_WOOD | |
Block(18,0) | OAK_LEAVES | |
Block(18,1) | SPRUCE_LEAVES | |
Block(18,2) | BIRCH_LEAVES | |
Block(20,0) | GLASS | |
Block(21,0) | LAPIS_LAZULI_ORE | |
Block(22,0) | LAPIS_LAZULI_BLOCK | |
Block(24,0) | SAND_STONE | |
Block(24,1) | CHISELED_SANDSTONE | |
Block(24,2) | SMOOTH_SANDSTONE | |
Block(26,0) | BED_0 | |
Block(26,1) | BED_1 | |
Block(26,2) | BED_2 | |
Block(26,3) | BED_3 | |
Block(30,0) | COBWEB | |
Block(31,0) | DEAD_SHRUB | |
Block(31,1) | TALLGRASS | |
Block(31,3) | FERN | |
Block(35,0) | WOOL_WHITE | |
Block(35,1) | WOOL_ORANGE | |
Block(35,2) | WOOL_MAGENTA | |
Block(35,3) | WOOL_LIGHT_BLUE | |
Block(35,4) | WOOL_YELLOW | |
Block(35,5) | WOOL_LIME | |
Block(35,6) | WOOL_PINK | |
Block(35,7) | WOOL_GRAY | |
Block(35,8) | WOOL_LIGHT_GRAY | |
Block(35,9) | WOOL_CYAN | |
Block(35,10) | WOOL_PURPLE | |
Block(35,11) | WOOL_BLUE | |
Block(35,12) | WOOL_BROWN | |
Block(35,13) | WOOL_GREEN | |
Block(35,14) | WOOL_RED | |
Block(35,15) | WOOL_BLACK | |
Block(37,0) | DANDELION | |
Block(38,0) | POPPY | |
Block(39,0) | MUSHROOM_BROWN | |
Block(40,0) | MUSHROOM_RED | |
Block(41,0) | GOLD_BLOCK | |
Block(42,0) | IRON_BLOCK | |
Block(43,0) | DOUBLE_STONE_SLAB | |
Block(43,1) | DOUBLE_SANDSTONE_SLAB | |
Block(43,2) | DOUBLE_WOODEN_SLAB | |
Block(43,3) | DOUBLE_COBLESTONE_SLAB | |
Block(43,4) | DOUBLE_BRICK_SLAB | |
Block(43,5) | DOUBLE_STONE_BRICK_SLAB | |
Block(43,6) | STONE_BLOCK | |
Block(44,0) | STONE_SLAB_LOWER | |
Block(44,1) | SANDSTONE_SLAB_LOWER | |
Block(44,2) | WOODEN_SLAB_LOWER | |
Block(44,3) | COBBLESTONE_SLAB_LOWER | |
Block(44,4) | BRICK_SLAB_LOWER | |
Block(44,5) | STONE_BRICK_SLAB_LOWER | |
Block(44,8) | STONE_SLAB_UPPER | |
Block(44,9) | SANDSTONE_SLAB_UPPER | |
Block(44,10) | WOODEN_SLAB_UPPER | |
Block(44,11) | COBBLESTONE_SLAB_UPPER | |
Block(44,12) | BRICK_SLAB_UPPER | |
Block(44,13) | STONE_BRICK_SLAB_UPPER | |
Block(45,0) | BRICKS | |
Block(46,0) |
TNT (Inactive) If you hit this TNT block, it will just break. |
|
Block(46,1) |
TNT (Active) If you hit this TNT block, it will start flashing for a little while and then blow up. |
|
Block(47,0) | BOOKSHELF | |
Block(48,0) | MOSS_STONE | |
Block(49,0) | OBBSIDIAN | |
Block(50,5) | TORCH | |
Block(51,0) |
FIRE This block is supposed to be fire. I tried using other blocks that should interact when placing it, but I never did get this to work. If someone stumbles on to this page, and figures out the secret of fire. Please let me know. |
|
Block(53,0) | OAK_WOOD_STAIRS_0 | |
Block(53,1) | OAK_WOOD_STAIRS_1 | |
Block(53,2) | OAK_WOOD_STAIRS_2 | |
Block(53,3) | OAK_WOOD_STAIRS_3 | |
Block(53,4) | OAK_WOOD_STAIRS_4 | |
Block(53,5) | OAK_WOOD_STAIRS_5 | |
Block(53,6) | OAK_WOOD_STAIRS_6 | |
Block(53,7) | OAK_WOOD_STAIRS_7 | |
Block(54,0) |
CHEST_0 Where is the latch? |
|
Block(54,1) | CHEST_1 | |
Block(54,2) | CHEST_2 | |
Block(54,3) | CHEST_3 | |
Block(54,4) | CHEST_4 | |
Block(56,0) | DIAMOND_ORE | |
Block(57,0) | DIAMOND_BLOCK | |
Block(58,0) | CRAFTING_TABLE | |
Block(59,0) | WHEAT_CROPS_0 | |
Block(59,1) | WHEAT_CROPS_1 | |
Block(59,2) | WHEAT_CROPS_2 | |
Block(59,3) | WHEAT_CROPS_3 | |
Block(59,4) | WHEAT_CROPS_4 | |
Block(59,5) | WHEAT_CROPS_5 | |
Block(59,6) | WHEAT_CROPS_6 | |
Block(59,7) | WHEAT_CROPS_7 | |
Block(59,8) | UNKNOWN | |
Block(59,9) | UNKNOWN | |
Block(59,10) | UNKNOWN | |
Block(59,11) | UNKNOWN | |
Block(59,12) | UNKNOWN | |
Block(59,13) | UNKNOWN | |
Block(59,14) | UNKNOWN | |
Block(59,15) | UNKNOWN | |
Block(60,0) | FARMLAND_LIGHT | |
Block(60,1) | FARMLAND_DARK | |
Block(61,3) | FURNACE | |
Block(62,3) | BURNING_FURNACE | |
Block(63,0) | STANDING_SIGN_0 | |
Block(63,1) | STANDING_SIGN_1 | |
Block(63,2) | STANDING_SIGN_2 | |
Block(63,3) | STANDING_SIGN_3 | |
Block(63,4) | STANDING_SIGN_4 | |
Block(63,5) | STANDING_SIGN_5 | |
Block(63,6) | STANDING_SIGN_6 | |
Block(63,7) | STANDING_SIGN_7 | |
Block(63,8) | STANDING_SIGN_8 | |
Block(63,9) | STANDING_SIGN_9 | |
Block(63,10) | STANDING_SIGN_10 | |
Block(63,11) | STANDING_SIGN_11 | |
Block(63,12) | STANDING_SIGN_12 | |
Block(63,13) | STANDING_SIGN_13 | |
Block(63,14) | STANDING_SIGN_14 | |
Block(63,15) | STANDING_SIGN_15 | |
Block(64,0) | OAK_DOOR_0 | |
Block(64,1) | OAK_DOOR_1 | |
Block(64,2) | OAK_DOOR_2 | |
Block(64,3) | OAK_DOOR_3 | |
Block(64,4) | OAK_DOOR_4 | |
Block(64,5) | OAK_DOOR_5 | |
Block(64,6) | OAK_DOOR_6 | |
Block(64,7) | OAK_DOOR_7 | |
Block(64,8) | OAK_WINDOW_0 | |
Block(64,9) | OAK_WINDOW_1 | |
Block(67,0) | COBBLESTONE_STAIRS_0 | |
Block(67,1) | COBBLESTONE_STAIRS_1 | |
Block(67,2) | COBBLESTONE_STAIRS_2 | |
Block(67,3) | COBBLESTONE_STAIRS_3 | |
Block(67,4) | COBBLESTONE_STAIRS_4 | |
Block(67,5) | COBBLESTONE_STAIRS_5 | |
Block(67,6) | COBBLESTONE_STAIRS_6 | |
Block(67,7) | COBBLESTONE_STAIRS_7 | |
Block(68,2) | WALL_MOUNTED_SIGN_0 | |
Block(68,3) | WALL_MOUNTED_SIGN_1 | |
Block(68,4) | WALL_MOUNTED_SIGN_2 | |
Block(68,5) | WALL_MOUNTED_SIGN_3 | |
Block(71,0) | IRON_DOOR_0 | |
Block(71,1) | IRON_DOOR_1 | |
Block(71,2) | IRON_DOOR_2 | |
Block(71,3) | IRON_DOOR_3 | |
Block(71,4) | IRON_DOOR_4 | |
Block(71,5) | IRON_DOOR_5 | |
Block(71,6) | IRON_DOOR_6 | |
Block(71,7) | IRON_DOOR_7 | |
Block(71,8) | IRON_WINDOW_0 | |
Block(71,9) | IRON_WINDOW_1 | |
Block(73,0) | REDSTONE_ORE | |
Block(78,0) | SNOW | |
Block(79,0) | ICE | |
Block(80,0) | SNOW_BLOCK | |
Block(81,0) | CACTUS | |
Block(82,0) | CLAY | |
Block(83,0) | SUGAR_CANES | |
Block(85,0) | OAK_FENCE | |
Block(87,0) | NETHERRACK | |
Block(89,0) | GLOWSTONE | |
Block(95,0) |
STAINED_GLASS_WHITE I tried interacting with GLASS_PANES, etc., but I was never able to get this to work. If anyone does get this to work, then changing the data values should provide more color options. |
|
Block(96,3) | WOODEN_TRAP_DOOR_0 | |
Block(96,4) | WOODEN_TRAP_DOOR_1 | |
Block(96,5) | WOODEN_TRAP_DOOR_2 | |
Block(96,6) | WOODEN_TRAP_DOOR_3 | |
Block(96,7) | WOODEN_TRAP_DOOR_4 | |
Block(96,8) | WOODEN_TRAP_DOOR_5 | |
Block(98,0) | STONE_BRICKS | |
Block(98,1) | MOSSY_STONE_BRICKS | |
Block(98,2) | CRACKED_STONE_BRICKS | |
Block(102,0) | GLASS_PANE | |
Block(103,0) | MELON | |
Block(105,0) | MELON_STEM_0 | |
Block(105,1) | MELON_STEM_1 | |
Block(105,2) | MELON_STEM_2 | |
Block(105,3) | MELON_STEM_3 | |
Block(105,4) | MELON_STEM_4 | |
Block(105,5) | MELON_STEM_5 | |
Block(105,6) | MELON_STEM_6 | |
Block(105,7) | MELON_STEM_7 | |
Block(105,8) | MELON_STEM_8 | |
Block(105,9) | MELON_STEM_9 | |
Block(105,10) | MELON_STEM_10 | |
Block(105,11) | MELON_STEM_11 | |
Block(105,12) | MELON_STEM_12 | |
Block(105,13) | MELON_STEM_13 | |
Block(105,14) | MELON_STEM_14 | |
Block(105,15) |
MELON_STEM_15 I haven't experimented with this, but it appears that data values 8-15 may place or affect 2 blocks. |
|
Block(107,0) | OAK_FENCE_GATE_CLOSED_0 | |
Block(107,1) | OAK_FENCE_GATE_CLOSED_1 | |
Block(107,2) | OAK_FENCE_GATE_CLOSED_2 | |
Block(107,3) | OAK_FENCE_GATE_CLOSED_3 | |
Block(107,4) | OAK_FENCE_GATE_OPEN_0 | |
Block(107,5) | OAK_FENCE_GATE_OPEN_1 | |
Block(107,6) | OAK_FENCE_GATE_OPEN_2 | |
Block(107,7) | OAK_FENCE_GATE_OPEN_3 | |
Block(108,0) | BRICK_STAIRS_0 | |
Block(108,1) | BRICK_STAIRS_1 | |
Block(108,2) | BRICK_STAIRS_2 | |
Block(108,3) | BRICK_STAIRS_3 | |
Block(108,4) | BRICK_STAIRS_4 | |
Block(108,5) | BRICK_STAIRS_5 | |
Block(108,6) | BRICK_STAIRS_6 | |
Block(108,7) | BRICK_STAIRS_7 | |
Block(109,0) | STONE_BRICK_STAIRS_0 | |
Block(109,1) | STONE_BRICK_STAIRS_1 | |
Block(109,2) | STONE_BRICK_STAIRS_2 | |
Block(109,3) | STONE_BRICK_STAIRS_3 | |
Block(109,4) | STONE_BRICK_STAIRS_4 | |
Block(109,5) | STONE_BRICK_STAIRS_5 | |
Block(109,6) | STONE_BRICK_STAIRS_6 | |
Block(109,7) | STONE_BRICK_STAIRS_7 | |
Block(112,0) | NETHER_BRICK | |
Block(114,0) | NETHER_BRICK_STAIRS_0 | |
Block(114,1) | NETHER_BRICK_STAIRS_1 | |
Block(114,2) | NETHER_BRICK_STAIRS_2 | |
Block(114,3) | NETHER_BRICK_STAIRS_3 | |
Block(114,4) | NETHER_BRICK_STAIRS_4 | |
Block(114,5) | NETHER_BRICK_STAIRS_5 | |
Block(114,6) | NETHER_BRICK_STAIRS_6 | |
Block(114,7) | NETHER_BRICK_STAIRS_7 | |
Block(128,0) | SANDSTONE_STAIRS_0 | |
Block(128,1) | SANDSTONE_STAIRS_1 | |
Block(128,2) | SANDSTONE_STAIRS_2 | |
Block(128,3) | SANDSTONE_STAIRS_3 | |
Block(128,4) | SANDSTONE_STAIRS_4 | |
Block(128,5) | SANDSTONE_STAIRS_5 | |
Block(128,6) | SANDSTONE_STAIRS_6 | |
Block(128,7) | SANDSTONE_STAIRS_7 | |
Block(155,0) | QUARTZ_BLOCK | |
Block(155,1) | CHISELED_QUARTZ_BLOCK | |
Block(155,2) | PILLAR_QUARTZ_BLOCK | |
Block(156,0) | QUARTZ_STAIRS_0 | |
Block(156,1) | QUARTZ_STAIRS_1 | |
Block(156,2) | QUARTZ_STAIRS_2 | |
Block(156,3) | QUARTZ_STAIRS_3 | |
Block(156,4) | QUARTZ_STAIRS_4 | |
Block(156,5) | QUARTZ_STAIRS_5 | |
Block(156,6) | QUARTZ_STAIRS_6 | |
Block(156,7) | QUARTZ_STAIRS_7 | |
Block(245,0) | UNKNOWN | |
Block(246,0) | UNKNOWN | |
Block(247,0) | UNKNOWN | |
Block(247,1) | UNKNOWN | |
Block(247,2) | UNKNOWN | |
Block(248,0) | UNKNOWN | |
Block(249,0) | UNKNOWN | |
Block(253,0) | GRASS (Repeat) | |
Block(254,0) | BUSHES_0 | |
Block(254,1) | BUSHES_1 | |
Block(254,2) | BUSHES_2 | |
Block(255,0) | STONE (Repeat) |
For anyone wanting to explore the blocks further, here are the scripts that I used to find and create the list of blocks.
The first script is find_primary_blocks.py. This simply iterates through a range of id values, writes the primary block (using data = 0), reads back the block value, and if it matches, writes the successful block combination to a file. If you set a range > 255 you should see that blocks appear based on what seems like modulo 255 but Minecraft also throws an exception for the request. Only values between 0-255 are written to the file.
The second script is explore_secondary_blocks.py. This script provides a keyboard interface to manually step through the combinations of id and data values. Unfortunately, automation didn't work well here as Minecraft would accept lots of combinations that were clearly repeats or modulo values of other blocks, and would return a valid confirmation that it was the requested block. Using this script I manually created the "cleaned" list of valid blocks. A benefit to manually placing blocks is that I was able to observe some interesting combinations, particularly before I started erasing between changing blocks. This is an area that haven't fully explored.
The third script is screen_capture_blocks.py. This script added an auto run mode to iterate through the known blocks and a screen capture of each successful combination. This provides the first mechanism to capture images of each block. To run this script you will need to install raspi2png, which is required to capture the Minecraft display. You may need to adjust the paths in the script to match your install location.
The fourth script is crop_block_image.py. This script adds the second mechanism to capture images of each block. It iterates through all block combinations, and if a screen capture exists, it opens the file, crops out the block, and saves the cropped image. The only real wrinkle is that the Pi version API doesn't provide the ability to set (or get) the player's pitch and direction. This means that the view of the blocks has to be set manually, making it impossible to perfectly reproduce. This means that the crop dimensions will have to be "fine-tuned" each time position of the player is moved. The good news is that once the Minecraft view is set all of the rest of the work is done in the scripts, and there is no need to move it.
Note: When I did this, the first three scripts were run on the Raspberry Pi, and the fourth script was executed on a Windows 10 PC.