From 5bc14e2fe45f12cdb69d302807d05985ee5552ee Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Fri, 4 Jan 2013 00:05:56 +0100 Subject: [PATCH] Add on_rightclick(pos, node, clicker) callback for nodes --- builtin/item.lua | 15 +++++++++++++-- doc/lua_api.txt | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/builtin/item.lua b/builtin/item.lua index acc1e626..d36e8a75 100644 --- a/builtin/item.lua +++ b/builtin/item.lua @@ -231,9 +231,19 @@ function minetest.item_place_object(itemstack, placer, pointed_thing) end function minetest.item_place(itemstack, placer, pointed_thing) + -- Call on_rightclick if the pointed node defines it + if pointed_thing.type == "node" then + local n = minetest.env:get_node(pointed_thing.under) + local nn = n.name + if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then + minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer) + return + end + end + if itemstack:get_definition().type == "node" then return minetest.item_place_node(itemstack, placer, pointed_thing) - else + elseif itemstack:get_definition().type ~= "none" then return minetest.item_place_object(itemstack, placer, pointed_thing) end end @@ -375,6 +385,7 @@ minetest.nodedef_default = { can_dig = nil, on_punch = redef_wrapper(minetest, 'node_punch'), -- minetest.node_punch + on_rightclick = nil, on_dig = redef_wrapper(minetest, 'node_dig'), -- minetest.node_dig on_receive_fields = nil, @@ -464,7 +475,7 @@ minetest.noneitemdef_default = { -- This is used for the hand and unknown items tool_capabilities = nil, -- Interaction callbacks - on_place = nil, + on_place = redef_wrapper(minetest, 'item_place'), on_drop = nil, on_use = nil, } diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 124344ca..f891b56f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -942,6 +942,8 @@ minetest.item_place_object(itemstack, placer, pointed_thing) ^ Place item as-is minetest.item_place(itemstack, placer, pointed_thing) ^ Use one of the above based on what the item is. +^ Calls on_rightclick of pointed_thing.under if defined instead +^ Note: is not called when wielded item overrides on_place minetest.item_drop(itemstack, dropper, pos) ^ Drop the item minetest.item_eat(hp_change, replace_with_item) @@ -1482,6 +1484,8 @@ Node definition (register_node) on_punch = func(pos, node, puncher), ^ default: minetest.node_punch ^ By default: does nothing + on_rightclick = func(pos, node, clicker), + ^ default: nil on_dig = func(pos, node, digger), ^ default: minetest.node_dig ^ By default: checks privileges, wears out tool and removes node