Deepcopy pointed_thing for after_place_node, give it to on_rightclick too.

This commit is contained in:
Novatux 2014-01-11 17:23:28 +01:00
parent 3bbd280336
commit e21b29f422
3 changed files with 16 additions and 7 deletions

@ -270,12 +270,18 @@ function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
-- Run callback -- Run callback
if def.after_place_node then 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 place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
local pointed_thing_copy = { local pointed_thing_copy = {
type = pointed_thing.type, type = pointed_thing.type,
under = pointed_thing.under, under = {
above = pointed_thing.above 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, if def.after_place_node(place_to_copy, placer, itemstack,
pointed_thing_copy) then 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 n = minetest.get_node(pointed_thing.under)
local nn = n.name local nn = n.name
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then 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
end end

@ -278,7 +278,7 @@ if minetest then
local undef = minetest.registered_nodes[unode.name] local undef = minetest.registered_nodes[unode.name]
if undef and undef.on_rightclick then if undef and undef.on_rightclick then
undef.on_rightclick(pointed_thing.under, node, placer, undef.on_rightclick(pointed_thing.under, node, placer,
itemstack) itemstack, pointed_thing)
return return
end end
local pitch = placer:get_look_pitch() local pitch = placer:get_look_pitch()

@ -2205,10 +2205,12 @@ Node definition (register_node)
on_punch = func(pos, node, puncher), on_punch = func(pos, node, puncher),
^ default: minetest.node_punch ^ default: minetest.node_punch
^ By default: does nothing ^ By default: does nothing
on_rightclick = func(pos, node, clicker, itemstack), on_rightclick = func(pos, node, clicker, itemstack, pointed_thing),
^ default: nil ^ default: nil
^ if defined, itemstack will hold clicker's wielded item ^ 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), on_dig = func(pos, node, digger),
^ default: minetest.node_dig ^ default: minetest.node_dig
^ By default: checks privileges, wears out tool and removes node ^ By default: checks privileges, wears out tool and removes node