diff --git a/blocks.py b/blocks.py index 08e2e90..9e1ae45 100644 --- a/blocks.py +++ b/blocks.py @@ -1,216 +1,235 @@ +import minecraft_data import json +mcd = minecraft_data('1.16.2') + +MCD_BLOCKS = {} +for data in mcd.blocks.values(): + MCD_BLOCKS[data['name']] = data + with open('mcdata/blocks.json') as f: - BLOCKS = json.load(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:', '') AVOID = [ - 'minecraft:lava', - 'minecraft:water', - 'minecraft:fire', - 'minecraft:magma_block', - 'minecraft:oak_fence', - 'minecraft:oak_fence_gate', - 'minecraft:nether_brick_fence', - 'minecraft:spruce_fence_gate', - 'minecraft:birch_fence_gate', - 'minecraft:jungle_fence_gate', - 'minecraft:acacia_fence_gate', - 'minecraft:dark_oak_fence_gate', - 'minecraft:spruce_fence', - 'minecraft:birch_fence', - 'minecraft:jungle_fence', - 'minecraft:acacia_fence', - 'minecraft:dark_oak_fence', - 'minecraft:sweet_berry_bush', - 'minecraft:nether_portal', - 'minecraft:end_portal', - 'minecraft:cobblestone_wall', - 'minecraft:mossy_cobblestone_wall', - 'minecraft:brick_wall', - 'minecraft:prismarine_wall', - 'minecraft:red_sandstone_wall', - 'minecraft:mossy_stone_brick_wall', - 'minecraft:granite_wall', - 'minecraft:stone_brick_wall', - 'minecraft:nether_brick_wall', - 'minecraft:andesite_wall', - 'minecraft:red_nether_brick_wall', - 'minecraft:sandstone_wall', - 'minecraft:end_stone_brick_wall', - 'minecraft:diorite_wall', - + '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', ] NON_SOLID = [ - 'minecraft:air', - 'minecraft:powered_rail', - 'minecraft:detector_rail', - 'minecraft:grass', - 'minecraft:fern', - 'minecraft:dead_bush', - 'minecraft:seagrass', - 'minecraft:tall_seagrass', - 'minecraft:dandelion', - 'minecraft:poppy', - 'minecraft:blue_orchid', - 'minecraft:allium', - 'minecraft:azure_bluet', - 'minecraft:red_tulip', - 'minecraft:orange_tulip', - 'minecraft:white_tulip', - 'minecraft:pink_tulip', - 'minecraft:oxeye_daisy', - 'minecraft:cornflower', - 'minecraft:wither_rose', - 'minecraft:lily_of_the_valley', - 'minecraft:brown_mushroom', - 'minecraft:red_mushroom', - 'minecraft:torch', - 'minecraft:wall_torch', - 'minecraft:redstone_wire', - 'minecraft:wheat', - 'minecraft:oak_sign', - 'minecraft:spruce_sign', - 'minecraft:birch_sign', - 'minecraft:acacia_sign', - 'minecraft:jungle_sign', - 'minecraft:dark_oak_sign', - 'minecraft:rail', - 'minecraft:oak_wall_sign', - 'minecraft:spruce_wall_sign', - 'minecraft:birch_wall_sign', - 'minecraft:acacia_wall_sign', - 'minecraft:jungle_wall_sign', - 'minecraft:dark_oak_wall_sign', - 'minecraft:lever', - 'minecraft:stone_pressure_plate', - 'minecraft:oak_pressure_plate', - 'minecraft:spruce_pressure_plate', - 'minecraft:birch_pressure_plate', - 'minecraft:jungle_pressure_plate', - 'minecraft:acacia_pressure_plate', - 'minecraft:dark_oak_pressure_plate', - 'minecraft:redstone_torch', - 'minecraft:redstone_wall_torch', - 'minecraft:stone_button', - 'minecraft:sugar_cane', - 'minecraft:repeater', - 'minecraft:attached_pumpkin_stem', - 'minecraft:attached_melon_stem', - 'minecraft:pumpkin_stem', - 'minecraft:melon_stem', - 'minecraft:nether_wart', - 'minecraft:tripwire_hook', - 'minecraft:tripwire', - 'minecraft:carrots', - 'minecraft:potatoes', - 'minecraft:oak_button', - 'minecraft:spruce_button', - 'minecraft:birch_button', - 'minecraft:jungle_button', - 'minecraft:acacia_button', - 'minecraft:dark_oak_button', - 'minecraft:light_weighted_pressure_plate', - 'minecraft:heavy_weighted_pressure_plate', - 'minecraft:comparator', - 'minecraft:activator_rail', - 'minecraft:white_carpet', - 'minecraft:orange_carpet', - 'minecraft:magenta_carpet', - 'minecraft:light_blue_carpet', - 'minecraft:yellow_carpet', - 'minecraft:lime_carpet', - 'minecraft:pink_carpet', - 'minecraft:gray_carpet', - 'minecraft:light_gray_carpet', - 'minecraft:cyan_carpet', - 'minecraft:purple_carpet', - 'minecraft:blue_carpet', - 'minecraft:brown_carpet', - 'minecraft:green_carpet', - 'minecraft:red_carpet', - 'minecraft:black_carpet', - 'minecraft:sunflower', - 'minecraft:lilac', - 'minecraft:rose_bush', - 'minecraft:peony', - 'minecraft:tall_grass', - 'minecraft:large_fern', - 'minecraft:white_banner', - 'minecraft:orange_banner', - 'minecraft:magenta_banner', - 'minecraft:light_blue_banner', - 'minecraft:yellow_banner', - 'minecraft:lime_banner', - 'minecraft:pink_banner', - 'minecraft:gray_banner', - 'minecraft:light_gray_banner', - 'minecraft:cyan_banner', - 'minecraft:purple_banner', - 'minecraft:blue_banner', - 'minecraft:brown_banner', - 'minecraft:green_banner', - 'minecraft:red_banner', - 'minecraft:black_banner', - 'minecraft:white_wall_banner', - 'minecraft:orange_wall_banner', - 'minecraft:magenta_wall_banner', - 'minecraft:light_blue_wall_banner', - 'minecraft:yellow_wall_banner', - 'minecraft:lime_wall_banner', - 'minecraft:pink_wall_banner', - 'minecraft:gray_wall_banner', - 'minecraft:light_gray_wall_banner', - 'minecraft:cyan_wall_banner', - 'minecraft:purple_wall_banner', - 'minecraft:blue_wall_banner', - 'minecraft:brown_wall_banner', - 'minecraft:green_wall_banner', - 'minecraft:red_wall_banner', - 'minecraft:black_wall_banner', - 'minecraft:beetroots', - 'minecraft:bamboo_sapling', - 'minecraft:void_air', - 'minecraft:cave_air', - 'minecraft:lantern', + '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', ] SINGLE_SNOW = 3919 LOGS = [ - 'minecraft:oak_log', - 'minecraft:spruce_log', - 'minecraft:birch_log', - 'minecraft:jungle_log', - 'minecraft:acacia_log', - 'minecraft:dark_oak_log', + 'oak_log', + 'spruce_log', + 'birch_log', + 'jungle_log', + 'acacia_log', + 'dark_oak_log', ] LEAVES = [ - 'minecraft:oak_leaves', - 'minecraft:spruce_leaves', - 'minecraft:birch_leaves', - 'minecraft:jungle_leaves', - 'minecraft:acacia_leaves', - 'minecraft:dark_oak_leaves', + 'oak_leaves', + 'spruce_leaves', + 'birch_leaves', + 'jungle_leaves', + 'acacia_leaves', + 'dark_oak_leaves', ] NON_SOLID_IDS = set([SINGLE_SNOW]) for block_name in NON_SOLID: - for state in BLOCKS[block_name]['states']: + 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 BLOCKS[block_name]['states']: + for state in JSON_BLOCKS['minecraft:' + block_name]['states']: AVOID_IDS.add(state['id']) LOG_IDS = set() for block_name in LOGS: - for state in BLOCKS[block_name]['states']: + 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 BLOCKS[block_name]['states']: + for state in JSON_BLOCKS['minecraft:' + block_name]['states']: LEAF_IDS.add(state['id']) + + +def get(bid): + name = BLOCKS[bid] + return MCD_BLOCKS[name] + +def find(name): + return MCD_BLOCKS[name] diff --git a/requirements.txt b/requirements.txt index 2b97d1d..9cda937 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,6 +10,7 @@ idna==2.10 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 +minecraft-data==2.67.0 panda3d==1.10.6.post2 pathtools==0.1.2 pycparser==2.20