---create torch versions of the nodes
-for name,def in pairs(minetest.registered_nodes) do
- if def.drawtype == "normal" and string.match(name, "main:") then
- local def2 = table.copy(def)
- def2.groups.redstone_torch = 1
- def2.groups.redstone_power=9
- def2.drop = def.drop
- def2.mod_origin = "redstone"
- --def2.textures = "dirt.png"
- def2.after_destruct = function(pos, oldnode)
- redstone.collect_info(pos)
- end
- local newname = "redstone:node_activated_"..string.gsub(name, "main:", "")
- def2.name = newname
- def2.description = "Redstone "..def.description
- minetest.register_node(newname,def2)
- end
-end
-
-
---this removes power from node that the lever is powering
-local function on_lever_destroy(pos)
- local param2 = minetest.get_node(pos).param2
- local self = minetest.get_node(pos)
- local dir = minetest.wallmounted_to_dir(self.param2)
-
- local pos = vector.add(dir,pos)
- local node = minetest.get_node(pos)
- local name = node.name
-
- local def = minetest.registered_nodes[name]
- if def.drawtype == "normal" and string.match(name, "redstone:node_activated_")then
- name = "main:"..string.gsub(name, "redstone:node_activated_", "")
- minetest.swap_node(pos, {name=name})
- redstone.collect_info(pos)
- end
-end
+local
+minetest,vector,math,pairs
+=
+minetest,vector,math,pairs
+local excluded_nodes = {
+ ["main:ironblock"]=true,
+ ["main:ironblock_on"]=true,
+}
+local excluded_mods = {redstone=true,door=true}
+local registered_nodes
+minetest.register_on_mods_loaded(function()
+ registered_nodes = minetest.registered_nodes
+end)
-minetest.register_node("redstone:lever_off", {
- description = "Lever",
+minetest.register_node("redstone:lever_on", {
+ description = "Lever On",
tiles = {"stone.png"},
groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
sounds = main.stoneSound(),
fixed = {
--left front bottom right back top
{-0.3, -0.5, -0.4, 0.3, -0.4, 0.4},
- {-0.1, -0.5, -0.3, 0.1, 0, -0.1},
+ {-0.1, -0.5, 0.3, 0.1, 0, 0.1},
},
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
- minetest.set_node(pos, {name="redstone:lever_on",param2=node.param2})
+ minetest.swap_node(pos, {name="redstone:lever_off",param2=node.param2})
+
+ minetest.sound_play("lever", {pos=pos})
+
local dir = minetest.wallmounted_to_dir(node.param2)
- local pos = vector.add(dir,pos)
- local name = minetest.get_node(pos).name
- local def = minetest.registered_nodes[name]
-
- if def.drawtype == "normal" and string.match(name, "main:") then
- minetest.sound_play("lever", {pos=pos})
- name = "redstone:node_activated_"..string.gsub(name, "main:", "")
- minetest.swap_node(pos,{name=name})
- redstone.collect_info(pos)
- else
- minetest.sound_play("lever", {pos=pos,pitch=0.6})
- end
+
+ redstone.inject(pos,nil)
+ local pos2 = vector.add(dir,pos)
+ redstone.inject(pos2,nil)
+
+ redstone.update(pos)
+ redstone.update(pos2)
+ end,
+ after_destruct = function(pos, oldnode)
+ redstone.inject(pos,nil)
+ local dir = minetest.wallmounted_to_dir(oldnode.param2)
+ local pos2 = vector.add(dir,pos)
+ redstone.inject(pos2,nil)
+
+ redstone.update(pos)
+ redstone.update(pos2)
end,
- on_destruct = on_lever_destroy,
})
-minetest.register_node("redstone:lever_on", {
- description = "Lever On",
+
+minetest.register_lbm({
+ name = "redstone:lever_on",
+ nodenames = {"redstone:lever_on"},
+ run_at_every_load = true,
+ action = function(pos)
+ local param2 = minetest.get_node(pos).param2
+ local dir = minetest.wallmounted_to_dir(param2)
+ redstone.inject(pos,{torch=9})
+ local pos2 = vector.add(dir,pos)
+ redstone.inject(pos2,{torch=9})
+ minetest.after(0,function()
+ redstone.update(pos)
+ redstone.update(pos2)
+ end)
+ end,
+})
+
+
+
+minetest.register_node("redstone:lever_off", {
+ description = "Lever",
tiles = {"stone.png"},
groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
sounds = main.stoneSound(),
walkable = false,
drawtype= "nodebox",
drop="redstone:lever_off",
+ node_placement_prediction = "",
node_box = {
type = "fixed",
fixed = {
--left front bottom right back top
{-0.3, -0.5, -0.4, 0.3, -0.4, 0.4},
- {-0.1, -0.5, 0.3, 0.1, 0, 0.1},
+ {-0.1, -0.5, -0.3, 0.1, 0, -0.1},
},
},
+
+ on_construct = function(pos)
+ local param2 = minetest.get_node(pos).param2
+ local dir = minetest.wallmounted_to_dir(param2)
+ local node = minetest.get_node(vector.add(pos,dir))
+ local def = registered_nodes[node.name]
+ local remove = (excluded_mods[def.mod_origin] == true or excluded_nodes[node.name] == true)
+ if remove then
+ minetest.swap_node(pos,{name="air"})
+ redstone.inject(pos,nil)
+ minetest.throw_item(pos, "redstone:lever_off")
+ end
+ end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
- minetest.sound_play("lever", {pos=pos,pitch=0.8})
- minetest.set_node(pos, {name="redstone:lever_off",param2=node.param2})
- on_lever_destroy(pos)
+ minetest.swap_node(pos, {name="redstone:lever_on",param2=node.param2})
+ minetest.sound_play("lever", {pos=pos})
+
+ local dir = minetest.wallmounted_to_dir(node.param2)
+
+ redstone.inject(pos,{torch=9})
+ local pos2 = vector.add(dir,pos)
+ redstone.inject(pos2,{torch=9})
+
+ redstone.update(pos)
+ redstone.update(pos2)
end,
- on_destruct = on_lever_destroy,
-})
+ after_destruct = function(pos, oldnode)
+ redstone.inject(pos,nil)
+ local dir = minetest.wallmounted_to_dir(oldnode.param2)
+ local pos2 = vector.add(dir,pos)
+ redstone.inject(pos2,nil)
+
+ redstone.update(pos)
+ redstone.update(pos2)
+ end,
+})
\ No newline at end of file