if not sparktech then sparktech = {} end function sparktech.empty_inventory(source, destination, listname) --- --- expects those in already inventory formats -- local inventory_lists = source:get_lists() if not inventory_lists then return true end for i, list in pairs(inventory_lists) do for n=1, #list do if destination:room_for_item(listname, list[n]) then destination:add_item("main", list[n]) else return false end end end return true end function sparktech.drop_inventory(nodepos, quilty) --- --- evacutate the mines, quickly now! local inventory_lists = minetest.get_meta(nodepos):get_inventory():get_lists() for i, list in pairs(inventory_lists) do for n=1, #list do minetest.item_drop(list[n], quilty, nodepos) end end end function sparktech.dig_node(nodepos, inventory, listname, strictmode, quilty) --- --- call with position, your inventory, and the listname -- strictmode true: give me all you can -- strictmode false: it is okay to drop items to the ground local node = minetest.get_node(nodepos) local node_inv = minetest.get_meta(nodepos):get_inventory() if not sparktech.empty_inventory(node_inv, inventory, listname) then if not strictmode then sparktech.drop_inventory(nodepos) else return false end end if inventory:room_for_item(listname, ItemStack(node["name"])) then inventory:add_item(listname, ItemStack(node["name"])) else if not strictmode then minetest.item_drop(ItemStack(node["name"]), quilty, nodepos) else return false end end minetest.remove_node(nodepos) return true end