+--
+-- Register a craft to copy the metadata of items
+--
+
+function default.register_craft_metadata_copy(ingredient, result)
+ minetest.register_craft({
+ type = "shapeless",
+ output = result,
+ recipe = {ingredient, result}
+ })
+
+ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
+ if itemstack:get_name() ~= result then
+ return
+ end
+
+ local original
+ local index
+ for i = 1, #old_craft_grid do
+ if old_craft_grid[i]:get_name() == result then
+ original = old_craft_grid[i]
+ index = i
+ end
+ end
+ if not original then
+ return
+ end
+ local copymeta = original:get_meta():to_table()
+ itemstack:get_meta():from_table(copymeta)
+ -- put the book with metadata back in the craft grid
+ craft_inv:set_stack("craft", index, original)
+ end)
+end
+