Add on_rightclick(pos, node, clicker) callback for nodes
authorPilzAdam <PilzAdam@gmx.de>
Thu, 3 Jan 2013 23:05:56 +0000 (00:05 +0100)
committerPilzAdam <PilzAdam@gmx.de>
Fri, 4 Jan 2013 16:15:16 +0000 (17:15 +0100)
builtin/item.lua
doc/lua_api.txt

index acc1e626232c33c62c8029cf6c0db847ff25b729..d36e8a758b41e610ffd1d06dfb4a422ce85456a5 100644 (file)
@@ -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,
 }
index 124344cadc807f02a57907fe74751aee9874e008..f891b56f0d5dd0ac2f525123f760f5b55b1be12f 100644 (file)
@@ -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