diff --git a/api.lua b/api.lua index d195561..4956f3a 100644 --- a/api.lua +++ b/api.lua @@ -6,9 +6,13 @@ tubetool = { nodes = {}, register_node = function(self, name, definition, override) if override or not self.nodes[name] then - if type(definition.copy) == 'function' and type(definition.paste) == 'function' then + if type(definition) ~= 'table' then + print(string.format('tubetool:register_node invalid definition, must be table but was %s', type(definition))) + elseif not definition.group then + print('tubetool:register_node invalid definition, group must be defined') + elseif type(definition.copy) == 'function' and type(definition.paste) == 'function' then self.nodes[name] = definition - print(string.format('tubetool:register_node registered %s', name)) + print(string.format('tubetool:register_node registered %s for group %s', name, definition.group)) else print('tubetool:register_node invalid definition, copy or paste function not defined') end @@ -59,13 +63,22 @@ tubetool = { copy = function(self, node, pos, player) local definition = self.nodes[node.name] if definition then - return definition.copy(node, pos, player) + minetest.chat_send_player(player:get_player_name(), string.format('copying data for group %s', definition.group)) + return definition.copy(node, pos, player), definition.group end end, - paste = function(self, node, pos, player, data) + paste = function(self, node, pos, player, data, group) local definition = self.nodes[node.name] + if definition.group ~= group then + minetest.chat_send_player( + player:get_player_name(), + string.format('tubetool wand contains data for %s, cannot apply for %s', group, definition.group) + ) + return + end if definition and data then + minetest.chat_send_player(player:get_player_name(), string.format('applying data for group %s', definition.group)) return definition.paste(node, pos, player, data) end end, diff --git a/nodes/injector.lua b/nodes/injector.lua index 44012c0..a873897 100644 --- a/nodes/injector.lua +++ b/nodes/injector.lua @@ -6,12 +6,19 @@ --luacheck: ignore unused argument node player local tooldef = { + group = 'injector', + copy = function(node, pos, player) + -- useless stuff to remove luacheck warnings + print(type(pos)) -- return data required for replicating this tube settings return { description = 'Not implemented' } end, paste = function(node, pos, player, data) + -- useless stuff to remove luacheck warnings + print(type(pos)) + print(type(data)) end, } diff --git a/nodes/mese_tube.lua b/nodes/mese_tube.lua index 767dcd3..604539d 100644 --- a/nodes/mese_tube.lua +++ b/nodes/mese_tube.lua @@ -27,6 +27,8 @@ local inv_size = 6 --luacheck: ignore unused argument node player local tooldef = { + group = 'sorting tube', + copy = function(node, pos, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() diff --git a/nodes/sand_tube.lua b/nodes/sand_tube.lua index 98a523a..8557e47 100644 --- a/nodes/sand_tube.lua +++ b/nodes/sand_tube.lua @@ -6,12 +6,19 @@ --luacheck: ignore unused argument node player local tooldef = { + group = 'vacuum tube', + copy = function(node, pos, player) + -- useless stuff to remove luacheck warnings + print(type(pos)) -- return data required for replicating this tube settings return { description = 'Not implemented' } end, paste = function(node, pos, player, data) + -- useless stuff to remove luacheck warnings + print(type(pos)) + print(type(data)) end, } diff --git a/nodes/teleport_tube.lua b/nodes/teleport_tube.lua index ca34ab2..06e1205 100644 --- a/nodes/teleport_tube.lua +++ b/nodes/teleport_tube.lua @@ -6,6 +6,8 @@ local nodenameprefix = "pipeworks:teleport_tube_" --luacheck: ignore unused argument node player local tooldef = { + group = 'teleport tube', + copy = function(node, pos, player) local meta = minetest.get_meta(pos) diff --git a/tool.lua b/tool.lua index 0d5e2bf..9f6cfae 100644 --- a/tool.lua +++ b/tool.lua @@ -47,12 +47,12 @@ minetest.register_craftitem('tubetool:wand', { local controls = player:get_player_control() if controls.aux1 or controls.sneak then - local data = tubetool:copy(node, pos, player) + local data, group = tubetool:copy(node, pos, player) local description = type(data) == 'table' and data.description or ('Data from ' .. minetest.pos_to_string(pos)) - write_wand(itemstack, data, description) + write_wand(itemstack, {data = data, group = group}, description) else local data = read_wand(itemstack) - tubetool:paste(node, pos, player, data) + tubetool:paste(node, pos, player, data.data, data.group) end return itemstack