From 29c17c14f1ef42f8080a44b1e3308f34de8b5df2 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 17 Dec 2012 19:49:18 +0100 Subject: [PATCH] Add ability to change the itemstack in placenode callbacks --- builtin/item.lua | 14 +++++++++++--- doc/lua_api.txt | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/builtin/item.lua b/builtin/item.lua index 80c665c..acc1e62 100644 --- a/builtin/item.lua +++ b/builtin/item.lua @@ -192,11 +192,15 @@ function minetest.item_place_node(itemstack, placer, pointed_thing) -- Add node and update minetest.env:add_node(place_to, newnode) + local take_item = true + -- Run callback if def.after_place_node then -- Copy place_to because callback can modify it local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z} - def.after_place_node(place_to_copy, placer) + if def.after_place_node(place_to_copy, placer, itemstack) then + take_item = false + end end -- Run script hook @@ -206,10 +210,14 @@ function minetest.item_place_node(itemstack, placer, pointed_thing) local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z} local newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2} local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.param2} - callback(place_to_copy, newnode_copy, placer, oldnode_copy) + if callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack) then + take_item = false + end end - itemstack:take_item() + if take_item then + itemstack:take_item() + end return itemstack end diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 60d1b2c..a994493 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -810,8 +810,9 @@ minetest.register_on_shutdown(func()) ^ WARNING: If the server terminates abnormally (i.e. crashes), the registered callbacks WILL LIKELY NOT BE RUN. Data should be saved at semi-frequent intervals as well as on server shutdown. -minetest.register_on_placenode(func(pos, newnode, placer, oldnode)) +minetest.register_on_placenode(func(pos, newnode, placer, oldnode, itemstack)) ^ Called when a node has been placed +^ If return true no item is taken from itemstack ^ Deprecated: Use on_construct or after_place_node in node definition instead minetest.register_on_dignode(func(pos, oldnode, digger)) ^ Called when a node has been dug. @@ -1405,9 +1406,10 @@ Node definition (register_node) ^ Node destructor; always called after removing node ^ default: nil - after_place_node = func(pos, placer), + after_place_node = func(pos, placer, itemstack), ^ Called after constructing node when node was placed using minetest.item_place_node / minetest.env:place_node + ^ If return true no item is taken from itemstack ^ default: nil after_dig_node = func(pos, oldnode, oldmetadata, digger), ^ oldmetadata is in table format