Logikraft/items.lua
2024-05-18 20:35:10 +02:00

114 lines
5.4 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 string.startsWith(node.name,"logikraft:cable_")
then return itemstack
end
local new = logikraft.rotateCable(string.without(node.name,"logikraft:cable_"),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()
local node = minetest.get_node(pointed_thing.under)
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}
if string.startsWith(node.name,"logikraft:cable_")
then
if selectedx == pointed_thing.under.x and selectedy == pointed_thing.under.y and selectedz == pointed_thing.under.z
then
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
if(selectednb ~= thisnb)
then
local new = logikraft.connectInCable(string.without(node.name,"logikraft:cable_"),selectednb,thisnb)
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
end
meta:set_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png")
else
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
local new = logikraft.connectContiguousCable(
string.without(minetest.get_node(selectedpos).name,"logikraft:cable_"),selectedpos,selectednb,
string.without(node.name,"logikraft:cable_"),pointed_thing.under,thisnb)
if new
then
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]})
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new[2]})
meta:set_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png")
else
minetest.chat_send_all("Les cables sont trop loins l'un de l'autre :/")
end
end
else
local node_def = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
if not node_def or not node_def.buildable_to then
-- Then we cannot build here
return itemstack
end
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"})
meta:set_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png")
end
else
if string.startsWith(node.name,"logikraft:cable_")
then
-- If we are looking at a cable we activate and store data
meta:set_int("logikraft:selected_nb",logikraft.lookingAtNbIndex(user,pointed_thing.under))
meta:set_int("logikraft:selected_x",pointed_thing.under.x)
meta:set_int("logikraft:selected_y",pointed_thing.under.y)
meta:set_int("logikraft:selected_z",pointed_thing.under.z)
meta:set_string("inventory_image","linker_activated.png")
else
-- Else we place a cable
local node_def = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
if not node_def or not node_def.buildable_to then
-- Then we cannot build here
return itemstack
end
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_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 string.startsWith(node.name,"logikraft:cable_")
then return itemstack
end
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
local new = logikraft.disconnectInCable(string.without(node.name,"logikraft:cable_"),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
})