1 local minetest,table,vector = minetest,table,vector
3 local excluded_mods = {redstone=true,door=true}
5 minetest.register_on_mods_loaded(function()
6 registered_nodes = minetest.registered_nodes
9 minetest.register_node("redstone:button_off", {
10 description = "Button",
11 tiles = {"stone.png"},
12 groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
13 sounds = main.stoneSound(),
15 paramtype2 = "wallmounted",
16 sunlight_propagates = true,
19 drop="redstone:button_off",
23 --left front bottom right back top
24 {-0.25, -0.5, -0.15, 0.25, -0.3, 0.15},
27 on_construct = function(pos)
28 local param2 = minetest.get_node(pos).param2
29 local dir = minetest.wallmounted_to_dir(param2)
30 local node = minetest.get_node(vector.add(pos,dir)).name
31 if excluded_mods[registered_nodes[node].mod_origin] then
32 minetest.swap_node(pos,{name="air"})
33 redstone.inject(pos,nil)
34 minetest.throw_item(pos, "redstone:button_off")
37 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
38 minetest.swap_node(pos, {name="redstone:button_on",param2=node.param2})
40 minetest.sound_play("lever", {pos=pos})
42 local timer = minetest.get_node_timer(pos)
45 local dir = minetest.wallmounted_to_dir(node.param2)
47 redstone.inject(pos,{torch=9})
48 local pos2 = vector.add(dir,pos)
49 redstone.inject(pos2,{torch=9})
54 after_destruct = function(pos, oldnode)
55 redstone.inject(pos,nil)
56 local dir = minetest.wallmounted_to_dir(oldnode.param2)
57 local pos2 = vector.add(dir,pos)
58 redstone.inject(pos2,nil)
64 minetest.register_node("redstone:button_on", {
65 description = "Button",
66 tiles = {"stone.png"},
67 groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
68 sounds = main.stoneSound(),
70 paramtype2 = "wallmounted",
71 sunlight_propagates = true,
74 drop="redstone:button_off",
78 --left front bottom right back top
79 {-0.25, -0.5, -0.15, 0.25, -0.45, 0.15},
82 on_timer = function(pos, elapsed)
83 minetest.sound_play("lever", {pos=pos,pitch=0.8})
85 local node = minetest.get_node(pos)
86 minetest.swap_node(pos, {name="redstone:button_off",param2=node.param2})
88 redstone.inject(pos,nil)
89 local param2 = minetest.get_node(pos).param2
90 local dir = minetest.wallmounted_to_dir(param2)
91 local pos2 = vector.add(dir,pos)
92 redstone.inject(pos2,nil)
98 after_destruct = function(pos, oldnode)
99 redstone.inject(pos,nil)
100 local dir = minetest.wallmounted_to_dir(oldnode.param2)
101 local pos2 = vector.add(dir,pos)
102 redstone.inject(pos2,nil)
105 redstone.update(pos2)
109 minetest.register_lbm({
110 name = "redstone:button_on",
111 nodenames = {"redstone:button_on"},
112 run_at_every_load = true,
113 action = function(pos)
114 local param2 = minetest.get_node(pos).param2
115 local dir = minetest.wallmounted_to_dir(param2)
117 redstone.inject(pos,{torch=9})
118 local pos2 = vector.add(dir,pos)
119 redstone.inject(pos2,{torch=9})
121 minetest.after(0,function()
123 redstone.update(pos2)