Add ability to change the itemstack in placenode callbacks
parent
f4ed37ec6f
commit
29c17c14f1
|
@ -192,11 +192,15 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
|
||||||
-- Add node and update
|
-- Add node and update
|
||||||
minetest.env:add_node(place_to, newnode)
|
minetest.env:add_node(place_to, newnode)
|
||||||
|
|
||||||
|
local take_item = true
|
||||||
|
|
||||||
-- Run callback
|
-- Run callback
|
||||||
if def.after_place_node then
|
if def.after_place_node then
|
||||||
-- Copy place_to because callback can modify it
|
-- Copy place_to 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}
|
||||||
def.after_place_node(place_to_copy, placer)
|
if def.after_place_node(place_to_copy, placer, itemstack) then
|
||||||
|
take_item = false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Run script hook
|
-- 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 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 newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2}
|
||||||
local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.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
|
end
|
||||||
|
|
||||||
|
if take_item then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -810,8 +810,9 @@ minetest.register_on_shutdown(func())
|
||||||
^ WARNING: If the server terminates abnormally (i.e. crashes), the registered
|
^ WARNING: If the server terminates abnormally (i.e. crashes), the registered
|
||||||
callbacks WILL LIKELY NOT BE RUN. Data should be saved at
|
callbacks WILL LIKELY NOT BE RUN. Data should be saved at
|
||||||
semi-frequent intervals as well as on server shutdown.
|
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
|
^ 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
|
^ Deprecated: Use on_construct or after_place_node in node definition instead
|
||||||
minetest.register_on_dignode(func(pos, oldnode, digger))
|
minetest.register_on_dignode(func(pos, oldnode, digger))
|
||||||
^ Called when a node has been dug.
|
^ Called when a node has been dug.
|
||||||
|
@ -1405,9 +1406,10 @@ Node definition (register_node)
|
||||||
^ Node destructor; always called after removing node
|
^ Node destructor; always called after removing node
|
||||||
^ default: nil
|
^ default: nil
|
||||||
|
|
||||||
after_place_node = func(pos, placer),
|
after_place_node = func(pos, placer, itemstack),
|
||||||
^ Called after constructing node when node was placed using
|
^ Called after constructing node when node was placed using
|
||||||
minetest.item_place_node / minetest.env:place_node
|
minetest.item_place_node / minetest.env:place_node
|
||||||
|
^ If return true no item is taken from itemstack
|
||||||
^ default: nil
|
^ default: nil
|
||||||
after_dig_node = func(pos, oldnode, oldmetadata, digger),
|
after_dig_node = func(pos, oldnode, oldmetadata, digger),
|
||||||
^ oldmetadata is in table format
|
^ oldmetadata is in table format
|
||||||
|
|
Loading…
Reference in New Issue