Logikraft/items.lua
2024-05-20 00:14:34 +02:00

156 lines
7.0 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 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()
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 logikraft.cablenodes[node.name]
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(logikraft.cablenodes[node.name],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(
logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,selectednb,
logikraft.cablenodes[node.name],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 logikraft.cablenodes[node.name]
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 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 logikraft.componentnodes[node.name]
then
minetest.chat_send_all("Looking at component "..logikraft.componentnodes[node.name].name)
elseif node.name == "logikraft:inputBlock"
then
logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under)
elseif node.name == "logikraft:outputBlock"
then
logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under)
end
return itemstack
end
})