From Minetest Developer Wiki
minetest.register_on_craft(func(itemstack, player, old_craft_grid, craft_inv))
- Called when player crafts something
- itemstack is the output
- old_craft_grid contains the recipe (Note: the one in the inventory is cleared)
- craft_inv is the inventory with the crafting grid
- Returns either an ItemStack, to replace the output, or nil, to not modify it
- IT DOESN'T WORK FOR FURNACE COOKING RECIPES!
This article is missing examples, feel free to add them.