function getCraftableItems(bot) {
    /**
     * Get a list of all items that can be crafted with the bot's current inventory.
     * @param {Bot} bot - The bot to get the craftable items for.
     * @returns {string[]} - A list of all items that can be crafted.
     * @example
     * let craftableItems = world.getCraftableItems(bot);
     **/
    let table = getNearestBlock(bot, 'crafting_table');
    if (!table) {
        for (const item of bot.inventory.items()) {
            if (item != null && item.name === 'crafting_table') {
                table = item;
                break;
            }
        }
    }
    let res = [];
    for (const item of mc.getAllItems()) {
        let recipes = bot.recipesFor(item.id, null, 1, table);
        if (recipes.length > 0)
            res.push(item.name);
    }
    return res;
}
Get an object representing the bot's inventory.
@param {Bot} bot - The bot to get the inventory for.
@returns {object} - An object with item names as keys and counts as values.
@example
let inventory = world.getInventoryCounts(bot);
let oakLogCount = inventory['oak_log'];
let hasWoodenPickaxe = inventory['wooden_pickaxe'] > 0;