import json import importlib import mcdata importlib.reload(mcdata) MCD_BLOCKS = {} for d in mcdata.mcd.blocks.values(): MCD_BLOCKS[d['name']] = d with open('minecraft_data/blocks.json') as f: JSON_BLOCKS = json.load(f) BLOCKS = {} for name, data in JSON_BLOCKS.items(): for state in data['states']: BLOCKS[state['id']] = name.replace('minecraft:', '') BREAK_DISTANCE = 6 AIR = 0 STONE = 1 SAND = 66 SINGLE_SNOW = 3921 SOUL_TORCH = 4008 EMERALD_BLOCK = 5407 TEST_BLOCK = (616, 78, 496) WATER = [ 'water', ] AVOID = [ 'lava', 'water', 'fire', 'magma_block', 'oak_fence', 'oak_fence_gate', 'nether_brick_fence', 'spruce_fence_gate', 'birch_fence_gate', 'jungle_fence_gate', 'acacia_fence_gate', 'dark_oak_fence_gate', 'spruce_fence', 'birch_fence', 'jungle_fence', 'acacia_fence', 'dark_oak_fence', 'sweet_berry_bush', 'nether_portal', 'end_portal', 'cobblestone_wall', 'mossy_cobblestone_wall', 'brick_wall', 'prismarine_wall', 'red_sandstone_wall', 'mossy_stone_brick_wall', 'granite_wall', 'stone_brick_wall', 'nether_brick_wall', 'andesite_wall', 'red_nether_brick_wall', 'sandstone_wall', 'end_stone_brick_wall', 'diorite_wall', 'oak_sapling', # saplings can grow up and hurt 'spruce_sapling', 'birch_sapling', 'jungle_sapling', 'acacia_sapling', 'dark_oak_sapling', ] NON_SOLID = [ 'air', 'powered_rail', 'detector_rail', 'grass', 'fern', 'dead_bush', 'seagrass', 'tall_seagrass', 'dandelion', 'poppy', 'blue_orchid', 'allium', 'azure_bluet', 'red_tulip', 'orange_tulip', 'white_tulip', 'pink_tulip', 'oxeye_daisy', 'cornflower', 'wither_rose', 'lily_of_the_valley', 'brown_mushroom', 'red_mushroom', 'torch', 'wall_torch', 'redstone_wire', 'wheat', 'oak_sign', 'spruce_sign', 'birch_sign', 'acacia_sign', 'jungle_sign', 'dark_oak_sign', 'rail', 'oak_wall_sign', 'spruce_wall_sign', 'birch_wall_sign', 'acacia_wall_sign', 'jungle_wall_sign', 'dark_oak_wall_sign', 'lever', 'stone_pressure_plate', 'oak_pressure_plate', 'spruce_pressure_plate', 'birch_pressure_plate', 'jungle_pressure_plate', 'acacia_pressure_plate', 'dark_oak_pressure_plate', 'redstone_torch', 'redstone_wall_torch', 'stone_button', 'sugar_cane', 'repeater', 'attached_pumpkin_stem', 'attached_melon_stem', 'pumpkin_stem', 'melon_stem', 'nether_wart', 'tripwire_hook', 'tripwire', 'carrots', 'potatoes', 'oak_button', 'spruce_button', 'birch_button', 'jungle_button', 'acacia_button', 'dark_oak_button', 'light_weighted_pressure_plate', 'heavy_weighted_pressure_plate', 'comparator', 'activator_rail', 'white_carpet', 'orange_carpet', 'magenta_carpet', 'light_blue_carpet', 'yellow_carpet', 'lime_carpet', 'pink_carpet', 'gray_carpet', 'light_gray_carpet', 'cyan_carpet', 'purple_carpet', 'blue_carpet', 'brown_carpet', 'green_carpet', 'red_carpet', 'black_carpet', 'sunflower', 'lilac', 'rose_bush', 'peony', 'tall_grass', 'large_fern', 'white_banner', 'orange_banner', 'magenta_banner', 'light_blue_banner', 'yellow_banner', 'lime_banner', 'pink_banner', 'gray_banner', 'light_gray_banner', 'cyan_banner', 'purple_banner', 'blue_banner', 'brown_banner', 'green_banner', 'red_banner', 'black_banner', 'white_wall_banner', 'orange_wall_banner', 'magenta_wall_banner', 'light_blue_wall_banner', 'yellow_wall_banner', 'lime_wall_banner', 'pink_wall_banner', 'gray_wall_banner', 'light_gray_wall_banner', 'cyan_wall_banner', 'purple_wall_banner', 'blue_wall_banner', 'brown_wall_banner', 'green_wall_banner', 'red_wall_banner', 'black_wall_banner', 'beetroots', 'bamboo_sapling', 'void_air', 'cave_air', 'lantern', 'soul_torch', ] LOGS = [ 'oak_log', 'spruce_log', 'birch_log', 'jungle_log', 'acacia_log', 'dark_oak_log', ] LEAVES = [ 'oak_leaves', 'spruce_leaves', 'birch_leaves', 'jungle_leaves', 'acacia_leaves', 'dark_oak_leaves', ] SAPLINGS = [ 'oak_sapling', 'spruce_sapling', 'birch_sapling', 'jungle_sapling', 'acacia_sapling', 'dark_oak_sapling', ] INDEXED = [ 'chest', 'trapped_chest', 'emerald_block', 'barrel', ] NON_SOLID_IDS = set([SINGLE_SNOW]) for block_name in NON_SOLID: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: NON_SOLID_IDS.add(state['id']) AVOID_IDS = set() for block_name in AVOID: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: AVOID_IDS.add(state['id']) WATER_IDS = set() for block_name in WATER: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: WATER_IDS.add(state['id']) LOG_IDS = set() for block_name in LOGS: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: LOG_IDS.add(state['id']) LEAF_IDS = set() for block_name in LEAVES: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: LEAF_IDS.add(state['id']) CHEST_IDS = set() for block_name in ['chest']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: CHEST_IDS.add(state['id']) BARREL_IDS = set() for block_name in ['barrel']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: BARREL_IDS.add(state['id']) TRAPPED_CHEST_IDS = set() for block_name in ['trapped_chest']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: TRAPPED_CHEST_IDS.add(state['id']) NETHERWART_IDS = set() for block_name in ['nether_wart']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: NETHERWART_IDS.add(state['id']) WHEAT_IDS = set() for block_name in ['wheat']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: WHEAT_IDS.add(state['id']) POTATO_IDS = set() for block_name in ['potatoes']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: POTATO_IDS.add(state['id']) CARROT_IDS = set() for block_name in ['carrots']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: CARROT_IDS.add(state['id']) BEETROOT_IDS = set() for block_name in ['beetroots']: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: BEETROOT_IDS.add(state['id']) INDEXED_IDS = set() for block_name in INDEXED: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: INDEXED_IDS.add(state['id']) SAPLING_IDS = set() for block_name in SAPLINGS: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: SAPLING_IDS.add(state['id']) MATURE_WHEAT_ID = max(WHEAT_IDS) MATURE_POTATO_ID = max(POTATO_IDS) MATURE_CARROT_ID = max(CARROT_IDS) MATURE_BEETROOT_ID = max(BEETROOT_IDS) def get(bid): name = BLOCKS[bid] return MCD_BLOCKS[name] def find(name): return MCD_BLOCKS[name]