summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNovatux <nathanael.courant@laposte.net>2014-01-11 17:23:28 +0100
committerNovatux <nathanael.courant@laposte.net>2014-01-11 17:23:28 +0100
commite21b29f4227581162490cc70aaf4009118544f97 (patch)
tree6bec44b3801c6800f8cb8b55e2086a681dbc26cc
parent3bbd280336dffc73ef43b2ac93937f320cb32872 (diff)
downloadminetest-e21b29f4227581162490cc70aaf4009118544f97.tar.gz
minetest-e21b29f4227581162490cc70aaf4009118544f97.tar.bz2
minetest-e21b29f4227581162490cc70aaf4009118544f97.zip
Deepcopy pointed_thing for after_place_node, give it to on_rightclick too.
-rw-r--r--builtin/item.lua15
-rw-r--r--builtin/misc_helpers.lua2
-rw-r--r--doc/lua_api.txt6
3 files changed, 16 insertions, 7 deletions
diff --git a/builtin/item.lua b/builtin/item.lua
index 35ad9e6e4..8c0c0ed31 100644
--- a/builtin/item.lua
+++ b/builtin/item.lua
@@ -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
diff --git a/builtin/misc_helpers.lua b/builtin/misc_helpers.lua
index 8b2d493b7..097c65865 100644
--- a/builtin/misc_helpers.lua
+++ b/builtin/misc_helpers.lua
@@ -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()
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index e3fc92b29..f4bc95786 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -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