From e21b29f4227581162490cc70aaf4009118544f97 Mon Sep 17 00:00:00 2001 From: Novatux Date: Sat, 11 Jan 2014 17:23:28 +0100 Subject: [PATCH] Deepcopy pointed_thing for after_place_node, give it to on_rightclick too. --- builtin/item.lua | 15 +++++++++++---- builtin/misc_helpers.lua | 2 +- doc/lua_api.txt | 6 ++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/builtin/item.lua b/builtin/item.lua index 35ad9e6e..8c0c0ed3 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 8b2d493b..097c6586 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 e3fc92b2..f4bc9578 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