def idToBlockstate(self, bid, data):
        """
        Converts from a numerical ID to a BlockState string
    
        :param bid: The ID of the block
        :type bid: int
        :param data: The data value of the block
        :type data: int
        :return: A tuple of BlockState name and it's properties
        :rtype: tuple
        """
        if bid not in self.block_map:
            return "<Unknown>", {}
        
        name = self.block_map[bid].replace("minecraft:", "")

        if name not in self.blockstates["minecraft"]:
            return "<Unknown>", {}
        
        properties = {}
        for prop in self.blockstates["minecraft"][name]["properties"]: # TODO: Change this if MCEdit's mod support ever improves
            if prop["<data>"] == data:
                for field in prop.keys():
                    if field == "<data>":
                        continue
                    properties[field] = prop[field]
                return name, properties
        return name, properties

        Converts from a numerical ID to a BlockState string
    
        :param bid: The ID of the block
        :type bid: int
        :param data: The data value of the block
        :type data: int
        :return: A tuple of BlockState name and it's properties
        :rtype: tuple
        
pymclevel/materials.py