summaryrefslogtreecommitdiff
path: root/mesecons_temperest
diff options
context:
space:
mode:
Diffstat (limited to 'mesecons_temperest')
-rw-r--r--mesecons_temperest/depends.txt1
-rw-r--r--mesecons_temperest/init.lua220
2 files changed, 221 insertions, 0 deletions
diff --git a/mesecons_temperest/depends.txt b/mesecons_temperest/depends.txt
new file mode 100644
index 0000000..acaa924
--- /dev/null
+++ b/mesecons_temperest/depends.txt
@@ -0,0 +1 @@
+mesecons
diff --git a/mesecons_temperest/init.lua b/mesecons_temperest/init.lua
new file mode 100644
index 0000000..308f7b6
--- /dev/null
+++ b/mesecons_temperest/init.lua
@@ -0,0 +1,220 @@
+--TEMPEREST-PLUG
+
+minetest.register_node("mesecons_temperest:mesecon_plug", {
+ drawtype = "raillike",
+ paramtype = "light",
+ is_ground_content = true,
+ tile_images = {"jeija_mesecon_plug.png"},
+ inventory_image = "jeija_mesecon_plug.png",
+ wield_image = "jeija_mesecon_plug.png",
+ material = minetest.digprop_constanttime(0.1),
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ },
+ description = "Plug",
+})
+
+local set_node_on
+local set_node_off
+
+if ENABLE_TEMPEREST==1 then
+ set_node_on = function(pos)
+ local node = minetest.env:get_node(pos)
+ if node.name=="mesecons_temperest:mesecon_socket_off" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_socket_on"})
+ nodeupdate(pos)
+ mesecon:receptor_on(pos)
+ elseif node.name=="mesecons_temperest:mesecon_inverter_on" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_inverter_off"})
+ nodeupdate(pos)
+ mesecon:receptor_off(pos)
+ end
+ end
+
+ set_node_off = function(pos)
+ node = minetest.env:get_node(pos)
+ if node.name=="mesecons_temperest:mesecon_socket_on" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_socket_off"})
+ nodeupdate(pos)
+ mesecon:receptor_off(pos)
+ elseif node.name=="mesecons_temperest:mesecon_inverter_off" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_inverter_on"})
+ nodeupdate(pos)
+ mesecon:receptor_on(pos)
+ end
+ end
+else
+ set_node_on = function(pos)
+ local node = minetest.env:get_node(pos)
+ if node.name=="mesecons_temperest:mesecon_socket_off" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_socket_on"})
+ nodeupdate(pos)
+ mesecon:receptor_on(pos)
+ end
+ end
+
+ set_node_off = function(pos)
+ node = minetest.env:get_node(pos)
+ if node.name=="mesecons_temperest:mesecon_socket_on" then
+ minetest.env:add_node(pos, {name="mesecons_temperest:mesecon_socket_off"})
+ nodeupdate(pos)
+ mesecon:receptor_off(pos)
+ end
+ end
+end
+
+local plug_on = function(pos, node)
+ if node.name=="mesecons_temperest:mesecon_plug" then
+ local lnode = minetest.env:get_node({x=pos.x-1, y=pos.y, z=pos.z}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_on({x=pos.x-2, y=pos.y, z=pos.z}) end
+
+ local lnode = minetest.env:get_node({x=pos.x+1, y=pos.y, z=pos.z}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_on({x=pos.x+2, y=pos.y, z=pos.z}) end
+
+ local lnode = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z-1}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_on({x=pos.x, y=pos.y, z=pos.z-2}) end
+
+ local lnode = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z+1}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_on({x=pos.x, y=pos.y, z=pos.z+2}) end
+ end
+end
+
+local plug_off = function(pos, node)
+ if node.name=="mesecons_temperest:mesecon_plug" then
+ lnode = minetest.env:get_node({x=pos.x-1, y=pos.y, z=pos.z}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_off({x=pos.x-2, y=pos.y, z=pos.z}) end
+
+ lnode = minetest.env:get_node({x=pos.x+1, y=pos.y, z=pos.z}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_off({x=pos.x+2, y=pos.y, z=pos.z}) end
+
+ lnode = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z-1}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_off({x=pos.x, y=pos.y, z=pos.z-2}) end
+
+ lnode = minetest.env:get_node({x=pos.x, y=pos.y, z=pos.z+1}) --a node between this node and the one two nodes away
+ if lnode.name=="air" then set_node_off({x=pos.x, y=pos.y, z=pos.z+2}) end
+ end
+end
+
+mesecon:register_on_signal_on(plug_on)
+mesecon:register_on_signal_off(plug_off)
+
+minetest.register_on_placenode(plug_off)
+minetest.register_on_dignode(plug_off)
+
+minetest.register_craft({
+ output = 'node "mesecons_temperest:mesecon_plug" 2',
+ recipe = {
+ {'', 'node "mesecons:mesecon_off"', ''},
+ {'node "mesecons:mesecon_off"', 'craft "default:steel_ingot"', 'node "mesecons:mesecon_off"'},
+ {'', 'node "mesecons:mesecon_off"', ''},
+ }
+})
+
+--TEMPEREST-SOCKET
+
+minetest.register_node("mesecons_temperest:mesecon_socket_off", {
+ description = "Socket",
+ drawtype = "raillike",
+ paramtype = "light",
+ is_ground_content = true,
+ tile_images = {"jeija_mesecon_socket_off.png"},
+ inventory_image = "jeija_mesecon_socket_off.png",
+ wield_image = "jeija_mesecon_socket_off.png",
+ material = minetest.digprop_constanttime(0.1),
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ },
+})
+
+minetest.register_node("mesecons_temperest:mesecon_socket_on", {
+ drawtype = "raillike",
+ paramtype = "light",
+ is_ground_content = true,
+ tile_images = {"jeija_mesecon_socket_on.png"},
+ material = minetest.digprop_constanttime(0.1),
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ },
+ drop='"mesecons_temperest:mesecon_socket_off" 1',
+})
+
+minetest.register_on_dignode(
+ function(pos, oldnode, digger)
+ if oldnode.name == "mesecons_temperest:mesecon_socket_on" then
+ mesecon:receptor_off(pos)
+ end
+ end
+)
+
+mesecon:add_receptor_node("mesecons_temperest:mesecon_socket_on")
+mesecon:add_receptor_node_off("mesecons_temperest:mesecon_socket_off")
+
+minetest.register_craft({
+ output = 'node "mesecons_temperest:mesecon_socket_off" 2',
+ recipe = {
+ {'', 'craft "default:steel_ingot"', ''},
+ {'craft "default:steel_ingot"', 'node "mesecons_temperest:mesecon_off"', 'craft "default:steel_ingot"'},
+ {'', 'craft "default:steel_ingot"', ''},
+ }
+})
+
+--TEMPEREST-INVERTER
+if ENABLE_TEMPEREST==1 then
+ minetest.register_node("mesecons_temperest:mesecon_inverter_off", {
+ drawtype = "raillike",
+ paramtype = "light",
+ is_ground_content = true,
+ tile_images = {"jeija_mesecon_inverter_off.png"},
+ material = minetest.digprop_constanttime(0.1),
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ },
+ drop='"mesecons_temperest:mesecon_inverter_on" 1',
+ })
+
+ minetest.register_node("mesecons_temperest:mesecon_inverter_on", {
+ description = "Inverter",
+ drawtype = "raillike",
+ paramtype = "light",
+ is_ground_content = true,
+ tile_images = {"jeija_mesecon_inverter_on.png"},
+ inventory_image = "jeija_mesecon_inverter_on.png",
+ wield_image = "jeija_mesecon_inverter_on.png",
+ material = minetest.digprop_constanttime(0.1),
+ walkable = false,
+ selection_box = {
+ type = "fixed",
+ },
+ })
+
+ minetest.register_on_placenode(function(pos, node)
+ if node.name=="mesecons_temperest:mesecon_inverter_on" then
+ mesecon:receptor_on(pos)
+ end
+ end
+ )
+
+ minetest.register_on_dignode(
+ function(pos, oldnode, digger)
+ if oldnode.name == "mesecons_temperest:mesecon_inverter_on" then
+ mesecon:receptor_off(pos)
+ end
+ end
+ )
+
+ mesecon:add_receptor_node("mesecons_temperest:mesecon_inverter_on")
+ mesecon:add_receptor_node_off("mesecons_temperest:mesecon_inverter_off")
+
+ minetest.register_craft({
+ output = 'node "mesecons_temperest:mesecon_inverter_on" 2',
+ recipe = {
+ {'node "mesecons_temperest:mesecon_off"', 'craft "default:steel_ingot"', 'node "mesecons:mesecon_off"'},
+ {'craft "default:steel_ingot"', '', 'craft "default:steel_ingot"'},
+ {'node "mesecons:mesecon_off"', 'craft "default:steel_ingot"', 'node "mesecons:mesecon_off"'},
+ }
+ })
+end