Add overridable function for handling dropped items from nodes

master
Perttu Ahola 2012-09-02 19:38:44 +03:00
parent b6c12d2aa3
commit d53a6cd851
2 changed files with 19 additions and 8 deletions

View File

@ -260,6 +260,16 @@ function minetest.node_punch(pos, node, puncher)
end end
end end
function minetest.handle_node_drops(pos, drops, digger)
-- Add dropped items to object's inventory
if digger:get_inventory() then
local _, dropped_item
for _, dropped_item in ipairs(drops) do
digger:get_inventory():add_item("main", dropped_item)
end
end
end
function minetest.node_dig(pos, node, digger) function minetest.node_dig(pos, node, digger)
minetest.debug("node_dig") minetest.debug("node_dig")
@ -284,14 +294,9 @@ function minetest.node_dig(pos, node, digger)
local dp = minetest.get_dig_params(def.groups, tp) local dp = minetest.get_dig_params(def.groups, tp)
wielded:add_wear(dp.wear) wielded:add_wear(dp.wear)
digger:set_wielded_item(wielded) digger:set_wielded_item(wielded)
-- Add dropped items to object's inventory -- Handle drops
if digger:get_inventory() then minetest.handle_node_drops(pos, drops, digger)
local _, dropped_item
for _, dropped_item in ipairs(drops) do
digger:get_inventory():add_item("main", dropped_item)
end
end
local oldmetadata = nil local oldmetadata = nil
if def.after_dig_node then if def.after_dig_node then

View File

@ -891,6 +891,12 @@ minetest.get_craft_recipe(output) -> input
^ input.items = for example { stack 1, stack 2, stack 3, stack 4, ^ input.items = for example { stack 1, stack 2, stack 3, stack 4,
stack 5, stack 6, stack 7, stack 8, stack 9 } stack 5, stack 6, stack 7, stack 8, stack 9 }
^ input.items = nil if no recipe found ^ input.items = nil if no recipe found
minetest.handle_node_drops(pos, drops, digger)
^ drops: list of itemstrings
^ Handles drops from nodes after digging: Default action is to put them into
digger's inventory
^ Can be overridden to get different functionality (eg. dropping items on
ground)
Rollbacks: Rollbacks:
minetest.rollback_get_last_node_actor(p, range, seconds) -> actor, p, seconds minetest.rollback_get_last_node_actor(p, range, seconds) -> actor, p, seconds