From 34e0a0ca0fbb6826ea0c583295f79307b1a754c6 Mon Sep 17 00:00:00 2001 From: Novatux Date: Mon, 6 May 2013 18:53:15 +0200 Subject: Add tool callback --- builtin/item.lua | 19 ++++++++++++------- doc/lua_api.txt | 9 +++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/builtin/item.lua b/builtin/item.lua index f07566b8c..7f20d30c5 100644 --- a/builtin/item.lua +++ b/builtin/item.lua @@ -383,14 +383,19 @@ function minetest.node_dig(pos, node, digger) local wielded = digger:get_wielded_item() local drops = minetest.get_node_drops(node.name, wielded:get_name()) - - -- Wear out tool - if not minetest.setting_getbool("creative_mode") then - local tp = wielded:get_tool_capabilities() - local dp = minetest.get_dig_params(def.groups, tp) - wielded:add_wear(dp.wear) - digger:set_wielded_item(wielded) + + local wdef = wielded:get_definition() + local tp = wielded:get_tool_capabilities() + local dp = minetest.get_dig_params(def.groups, tp) + if wdef and wdef.after_use then + wielded = wdef.after_use(wielded, digger, node, dp) or wielded + else + -- Wear out tool + if not minetest.setting_getbool("creative_mode") then + wielded:add_wear(dp.wear) + end end + digger:set_wielded_item(wielded) -- Handle drops minetest.handle_node_drops(pos, drops, digger) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f89f71273..cfea3b5c1 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1980,6 +1980,15 @@ Item definition (register_node, register_craftitem, register_tool) eg. itemstack:take_item(); return itemstack ^ Otherwise, the function is free to do what it wants. ^ The default functions handle regular use cases. + after_use = func(itemstack, user, node, digparams), + ^ default: nil + ^ If defined, should return an itemstack and will be called instead of + wearing out the tool. If returns nil, does nothing. + If after_use doesn't exist, it is the same as: + function(itemstack, user, node, digparams) + itemstack:add_wear(digparams.wear) + return itemstack + end } Tile definition: -- cgit v1.2.3