diff --git a/.luacheckrc b/.luacheckrc index 14273f4..07a4e78 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -21,6 +21,7 @@ read_globals = { "doc", "intllib", "fakelib", + "wrench" } files = { diff --git a/nodes/node_builders.lua b/nodes/node_builders.lua index 8f64bae..f5590db 100644 --- a/nodes/node_builders.lua +++ b/nodes/node_builders.lua @@ -7,6 +7,8 @@ local S = digtron.S local node_inventory_table = {type="node"} -- a reusable parameter for get_inventory calls, set the pos parameter before using. +local has_wrench_mod = minetest.get_modpath("wrench") + local displace_due_to_help_button = 1.0 if minetest.get_modpath("doc") then displace_due_to_help_button = 0.0 @@ -70,6 +72,15 @@ local builder_on_rightclick = function(pos, _, clicker, itemstack, pointed_thing builder_formspec(pos, meta)) end +local function sanitize_item(item) + -- check if the item can be "wrenched" + if has_wrench_mod and wrench.registered_nodes[item:get_name()] then + -- item can be "wrenched" (contains the inventory serialized in the "data" field) + -- remove the serialized data on the placed node + item:get_meta():set_string("data", "") + end +end + minetest.register_on_player_receive_fields(function(sender, formname, fields) if formname:sub(1, 15) ~= "digtron:builder" then @@ -277,7 +288,10 @@ minetest.register_node("digtron:builder", { node_inventory_table.pos = pos local inv = minetest.get_inventory(node_inventory_table) - inv:set_stack(listname, index, stack:take_item(1)) + local item = stack:take_item(1) + sanitize_item(item) + + inv:set_stack(listname, index, item) -- If we're adding a wallmounted item and the build facing is greater than 5, reset it to 0 local meta = minetest.get_meta(pos) @@ -524,7 +538,10 @@ minetest.register_node("digtron:master_builder", { node_inventory_table.pos = pos local inv = minetest.get_inventory(node_inventory_table) - inv:set_stack(listname, index, stack:take_item(1)) + local item = stack:take_item(1) + sanitize_item(item) + + inv:set_stack(listname, index, item) -- If we're adding a wallmounted item and the build facing is greater than 5, reset it to 0 local meta = minetest.get_meta(pos)