import json import importlib from mosfet.info import 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) 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', ] BEDS = [ 'white_bed', 'orange_bed', 'magenta_bed', 'light_blue_bed', 'yellow_bed', 'lime_bed', 'pink_bed', 'gray_bed', 'light_gray_bed', 'cyan_bed', 'purple_bed', 'blue_bed', 'brown_bed', 'green_bed', 'red_bed', 'black_bed', ] INDEXED = [ 'chest', 'trapped_chest', 'emerald_block', 'barrel', ] + BEDS def get_set(ids): result = set() for block_name in ids: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: result.add(state['id']) return result NON_SOLID_IDS = get_set(NON_SOLID) NON_SOLID_IDS.add(SINGLE_SNOW) AVOID_IDS = get_set(AVOID) WATER_IDS = get_set(['water']) LOG_IDS = get_set(LOGS) LEAF_IDS = get_set(LEAVES) CHEST_IDS = get_set(['chest']) BARREL_IDS = get_set(['barrel']) TRAPPED_CHEST_IDS = get_set(['trapped_chest']) NETHERWART_IDS = get_set(['nether_wart']) WHEAT_IDS = get_set(['wheat']) POTATO_IDS = get_set(['potatoes']) CARROT_IDS = get_set(['carrots']) BEETROOT_IDS = get_set(['beetroots']) SAPLING_IDS = get_set(SAPLINGS) BED_IDS = get_set(BEDS) INDEXED_IDS = set() for block_name in INDEXED: for state in JSON_BLOCKS['minecraft:' + block_name]['states']: INDEXED_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]