X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=builtin%2Fitem.lua;h=c4bd24204864f1f9277ecb38159b865ae1de6259;hb=35df1ee2536c6f8370914ecd62abd46501d2f86f;hp=129a12cf87e034358973caa49a7a6dc30bd991e4;hpb=29f03756bd7494ee6ceffd555c3b93a19295324d;p=oweals%2Fminetest.git diff --git a/builtin/item.lua b/builtin/item.lua index 129a12cf8..c4bd24204 100644 --- a/builtin/item.lua +++ b/builtin/item.lua @@ -158,12 +158,12 @@ function minetest.item_place_node(itemstack, placer, pointed_thing) -- Add node and update minetest.env:add_node(pos, newnode) - -- Set metadata owner - if def.metadata_name ~= "" then - minetest.env:get_meta(pos):set_owner(placer:get_player_name()) + -- Run callback + if def.after_place_node then + def.after_place_node(pos, placer) end - -- Run script hook + -- Run script hook (deprecated) local _, callback for _, callback in ipairs(minetest.registered_on_placenodes) do callback(pos, newnode, placer) @@ -256,18 +256,67 @@ function minetest.node_dig(pos, node, digger) digger:get_inventory():add_item("main", dropped_item) end end + + local oldnode = nil + local oldmetadata = nil + if def.after_dig_node then + oldnode = node; + oldmetadata = minetest.env:get_meta(pos):to_table() + end -- Remove node and update minetest.env:remove_node(pos) + + -- Run callback + if def.after_dig_node then + def.after_dig_node(pos, oldnode, oldmetadata, digger) + end - -- Run script hook + -- Run script hook (deprecated) local _, callback for _, callback in ipairs(minetest.registered_on_dignodes) do callback(pos, node, digger) end end +function minetest.node_metadata_inventory_move_allow_all(pos, from_list, + from_index, to_list, to_index, count, player) + minetest.log("verbose", "node_metadata_inventory_move_allow_all") + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + + local from_stack = inv:get_stack(from_list, from_index) + local taken_items = from_stack:take_item(count) + inv:set_stack(from_list, from_index, from_stack) + + local to_stack = inv:get_stack(to_list, to_index) + to_stack:add_item(taken_items) + inv:set_stack(to_list, to_index, to_stack) +end + +function minetest.node_metadata_inventory_offer_allow_all(pos, listname, index, stack, player) + minetest.log("verbose", "node_metadata_inventory_offer_allow_all") + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + local the_stack = inv:get_stack(listname, index) + the_stack:add_item(stack) + inv:set_stack(listname, index, the_stack) + return ItemStack("") +end + +function minetest.node_metadata_inventory_take_allow_all(pos, listname, index, count, player) + minetest.log("verbose", "node_metadata_inventory_take_allow_all") + local meta = minetest.env:get_meta(pos) + local inv = meta:get_inventory() + local the_stack = inv:get_stack(listname, index) + local taken_items = the_stack:take_item(count) + inv:set_stack(listname, index, the_stack) + return taken_items +end + -- This is used to allow mods to redefine minetest.item_place and so on +-- NOTE: This is not the preferred way. Preferred way is to provide enough +-- callbacks to not require redefining global functions. -celeron55 local function redef_wrapper(table, name) return function(...) return table[name](...) @@ -300,6 +349,12 @@ minetest.nodedef_default = { on_punch = redef_wrapper(minetest, 'node_punch'), -- minetest.node_punch on_dig = redef_wrapper(minetest, 'node_dig'), -- minetest.node_dig + on_receive_fields = nil, + + on_metadata_inventory_move = minetest.node_metadata_inventory_move_allow_all, + on_metadata_inventory_offer = minetest.node_metadata_inventory_offer_allow_all, + on_metadata_inventory_take = minetest.node_metadata_inventory_take_allow_all, + -- Node properties drawtype = "normal", visual_scale = 1.0, @@ -319,7 +374,6 @@ minetest.nodedef_default = { diggable = true, climbable = false, buildable_to = false, - metadata_name = "", liquidtype = "none", liquid_alternative_flowing = "", liquid_alternative_source = "",