minetest.register_craftitem("logikraft:rotator", { description = "The rotator", inventory_image = "rotator.png", on_place = function(itemstack, user, pointed_thing) local node = minetest.get_node(pointed_thing.under) if not logikraft.cablenodes[node.name] then return itemstack end local new = logikraft.rotateCable(logikraft.cablenodes[node.name],1) minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new}) return itemstack end }) minetest.register_craftitem("logikraft:linker", { description = "The linker", inventory_image = "linker.png", on_place = function(itemstack, user, pointed_thing) local meta = itemstack:get_meta() if meta:get_int("logikraft:selected_nb") ~= 0 then local selectednb = meta:get_int("logikraft:selected_nb") local selectedx = meta:get_int("logikraft:selected_x") local selectedy = meta:get_int("logikraft:selected_y") local selectedz = meta:get_int("logikraft:selected_z") local selectedpos = {x = selectedx, y = selectedy, z = selectedz} local pos = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and pointed_thing.under or pointed_thing.above local node = minetest.get_node(pos) local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or -1 if selectedx == pos.x and selectedy == pos.y and selectedz == pos.z then if(selectednb ~= thisnb and thisnb ~= -1 and selectednb ~= -1) then local new = logikraft.connectInCable(logikraft.cablenodes[node.name],selectednb,thisnb) minetest.swap_node(pos, {name = "logikraft:cable_" .. new}) end meta:set_int("logikraft:selected_nb",0) meta:set_string("inventory_image","linker.png") return itemstack else local new = logikraft.connectContiguousCable( logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,(selectednb ~= -1 and selectednb) or nil, logikraft.cablenodes[node.name],pos,(thisnb ~= -1 and thisnb) or nil) if new then minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]}) minetest.swap_node(pos, {name = "logikraft:cable_" .. new[2]}) meta:set_int("logikraft:selected_nb",0) meta:set_string("inventory_image","linker.png") else minetest.chat_send_player(user:get_player_name(),"Les cables sont trop loins l'un de l'autre :/") end return itemstack end else local pos = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and pointed_thing.under or pointed_thing.above local node = minetest.get_node(pos) if logikraft.cablenodes[node.name] then -- If we are looking at a cable we activate and store data local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or -1 meta:set_int("logikraft:selected_nb",thisnb) meta:set_int("logikraft:selected_x",pos.x) meta:set_int("logikraft:selected_y",pos.y) meta:set_int("logikraft:selected_z",pos.z) meta:set_string("inventory_image","linker_activated.png") else -- Else we place a cable local node_def = minetest.registered_nodes[node.name] if not (node_def and node_def.buildable_to) then return itemstack end local new = nil local poz = { {x = pos.x+1, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y, z = pos.z+1}, {x = pos.x-1, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y, z = pos.z-1} } for k,pos2 in pairs(poz) do local cable2 = minetest.get_node(pos2) if logikraft.cablenodes[cable2.name] then local contiguous = logikraft.connectContiguousCable(new, pos, 1, logikraft.cablenodes[cable2.name], pos2, nil) new = contiguous[1] minetest.swap_node(pos2, {name = "logikraft:cable_" .. contiguous[2]}) end end minetest.add_node(pos, {name = "logikraft:cable_" .. (new or "NSEW1")}) end end return itemstack end, on_secondary_use = function(itemstack, user, pointed_thing) -- Looking at nothing -> we dispose of the data local meta = itemstack:get_meta() meta:set_int("logikraft:selected_nb",0) meta:set_string("inventory_image","linker.png") return itemstack end }) minetest.register_craftitem("logikraft:unlinker", { description = "The unlinker", inventory_image = "unlinker.png", on_place = function(itemstack, user, pointed_thing) local node = minetest.get_node(pointed_thing.under) if not logikraft.cablenodes[node.name] then return itemstack end local index = logikraft.lookingAtNbIndex(user,pointed_thing.under) print(logikraft.cablenodes[node.name]) print(dump(logikraft.cables[logikraft.cablenodes[node.name]])) local new = logikraft.disconnectInCable(logikraft.cablenodes[node.name],index) if new then minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new}) else minetest.remove_node(pointed_thing.under) end return itemstack end }) minetest.register_craftitem("logikraft:resizer", { description = "The Resizer", inventory_image = "resizer.png", on_place = function(itemstack, user, pointed_thing) local node = minetest.get_node(pointed_thing.under) if not logikraft.cablenodes[node.name] then return itemstack end local index = logikraft.lookingAtNbIndex(user,pointed_thing.under) local new = logikraft.resizeInCable(logikraft.cablenodes[node.name],index) minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new}) return itemstack end }) minetest.register_craftitem("logikraft:editor", { description = "The Editor", inventory_image = "editor.png", on_place = function(itemstack, user, pointed_thing) local node = minetest.get_node(pointed_thing.under) if logikraft.cablenodes[node.name] then local index = logikraft.lookingAtNbIndex(user,pointed_thing.under) minetest.chat_send_all("Looking at nodeblock "..tostring(index)) elseif node.name == "logikraft:component_input_1_1" then logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under) elseif node.name == "logikraft:component_output_1_1" then logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under) elseif logikraft.componentnodes[node.name] then minetest.chat_send_all("Looking at component "..logikraft.componentnodes[node.name].name) elseif node.name == "logikraft:circuitBlock" then logikraft.showCircuitFormspec(user:get_player_name(), pointed_thing.under) end return itemstack end })