This allows mods to easily implement the same behaviour, e.g. for letters.
if `nil` is returned, it is assumed that the wielder did not have
permissions to create a key for this node, and no key is created.
+
+`default.register_craft_metadata_copy(ingredient, result)`
+----------------------------------------------------------
+
+This function registers a shapeless recipe that takes `ingredient`
+and `result` as input and outputs `result`.
+
+The metadata of the input `result` is copied to the output `result`.
player:set_wielded_item(stack)
end)
-minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
- if itemstack:get_name() ~= "default:book_written" then
- return
- end
-
- local original
- local index
- for i = 1, player:get_inventory():get_size("craft") do
- if old_craft_grid[i]:get_name() == "default:book_written" then
- original = old_craft_grid[i]
- index = i
- end
- end
- if not original then
- return
- end
- local copymeta = original:get_meta():to_table()
- -- copy of the book held by player's mouse cursor
- itemstack:get_meta():from_table(copymeta)
- -- put the book with metadata back in the craft grid
- craft_inv:set_stack("craft", index, original)
-end)
-
minetest.register_craftitem("default:skeleton_key", {
description = S("Skeleton Key"),
inventory_image = "default_key_skeleton.png",
}
})
-minetest.register_craft({
- type = "shapeless",
- output = "default:book_written",
- recipe = {"default:book", "default:book_written"}
-})
+default.register_craft_metadata_copy("default:book", "default:book_written")
minetest.register_craft({
output = "default:bronze_ingot 9",
end
})
+--
+-- 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
+
--
-- NOTICE: This method is not an official part of the API yet.