Deepcopy pointed_thing for after_place_node, give it to on_rightclick too.
authorNovatux <nathanael.courant@laposte.net>
Sat, 11 Jan 2014 16:23:28 +0000 (17:23 +0100)
committerNovatux <nathanael.courant@laposte.net>
Sat, 11 Jan 2014 16:23:28 +0000 (17:23 +0100)
builtin/item.lua
builtin/misc_helpers.lua
doc/lua_api.txt

index 35ad9e6e46295abc0eb1c53433e797b5f505e061..8c0c0ed31c2f74d3357319c51e8b8f34089f916e 100644 (file)
@@ -270,12 +270,18 @@ function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
 
        -- Run callback
        if def.after_place_node then
-               -- Copy place_to because callback can modify it
+               -- Deepcopy place_to and pointed_thing because callback can modify it
                local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
                local pointed_thing_copy = {
                        type = pointed_thing.type,
-                       under = pointed_thing.under,
-                       above = pointed_thing.above
+                       under = {
+                               x = pointed_thing.under.x,
+                               y = pointed_thing.under.y,
+                               z = pointed_thing.under.z},
+                       above = {
+                               x = pointed_thing.above.x,
+                               y = pointed_thing.above.y,
+                               z = pointed_thing.above.z}
                }
                if def.after_place_node(place_to_copy, placer, itemstack,
                                pointed_thing_copy) then
@@ -317,7 +323,8 @@ function minetest.item_place(itemstack, placer, pointed_thing, param2)
                local n = minetest.get_node(pointed_thing.under)
                local nn = n.name
                if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
-                       return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer, itemstack) or itemstack, false
+                       return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n,
+                                       placer, itemstack, pointed_thing) or itemstack, false
                end
        end
 
index 8b2d493b7707df00cc38e940afa2b54cbb9c2f45..097c65865d186a9f2d2677e8a7260fd331f3fecf 100644 (file)
@@ -278,7 +278,7 @@ if minetest then
                local undef = minetest.registered_nodes[unode.name]
                if undef and undef.on_rightclick then
                        undef.on_rightclick(pointed_thing.under, node, placer,
-                                       itemstack)
+                                       itemstack, pointed_thing)
                        return
                end
                local pitch = placer:get_look_pitch()
index e3fc92b29df13ffd494d17cb9cb9b430e74d372e..f4bc95786a45f1e170708746d6ff4cb3d10760d7 100644 (file)
@@ -2205,10 +2205,12 @@ Node definition (register_node)
     on_punch = func(pos, node, puncher),
     ^ default: minetest.node_punch
     ^ By default: does nothing
-    on_rightclick = func(pos, node, clicker, itemstack),
+    on_rightclick = func(pos, node, clicker, itemstack, pointed_thing),
     ^ default: nil
     ^ if defined, itemstack will hold clicker's wielded item
-      Shall return the leftover itemstack
+    ^ Shall return the leftover itemstack
+    ^ Note: pointed_thing can be nil, if a mod calls this function
+     
     on_dig = func(pos, node, digger),
     ^ default: minetest.node_dig
     ^ By default: checks privileges, wears out tool and removes node