]> git.lizzy.rs Git - Crafter.git/blob - mods/redstone/button.lua
Revert redstone back to 9 states
[Crafter.git] / mods / redstone / button.lua
1 local
2 minetest,table,vector
3 =
4 minetest,table,vector
5 local excluded_nodes = {
6         ["main:ironblock"]=true,
7         ["main:ironblock_on"]=true,
8 }
9 local excluded_mods = {redstone=true,door=true}
10 local registered_nodes
11 minetest.register_on_mods_loaded(function()
12         registered_nodes  = minetest.registered_nodes
13 end)
14
15 minetest.register_node("redstone:button_off", {
16     description = "Button",
17     tiles = {"stone.png"},
18     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
19     sounds = main.stoneSound(),
20     paramtype = "light",
21         paramtype2 = "wallmounted",
22         sunlight_propagates = true,
23         walkable = false,
24         drawtype= "nodebox",
25         node_placement_prediction = "",
26         drop="redstone:button_off",
27         node_box = {
28                 type = "fixed",
29                 fixed = {
30                                 --left front bottom right back top
31                                 {-0.25, -0.5,  -0.15, 0.25,  -0.3, 0.15},
32                         },
33                 },
34         on_construct = function(pos)
35                 local param2 = minetest.get_node(pos).param2
36                 local dir = minetest.wallmounted_to_dir(param2)
37                 local node = minetest.get_node(vector.add(pos,dir))
38                 local def = registered_nodes[node.name]
39                 local remove = (excluded_mods[def.mod_origin] == true or excluded_nodes[node.name] == true)
40                 if remove then
41                         minetest.swap_node(pos,{name="air"})
42                         redstone.inject(pos,nil)
43                         minetest.throw_item(pos, "redstone:button_off")
44                 end
45         end,
46     on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
47                 minetest.swap_node(pos, {name="redstone:button_on",param2=node.param2})
48
49                 minetest.sound_play("lever", {pos=pos})
50
51                 local timer = minetest.get_node_timer(pos)
52                 timer:start(1.25)
53
54                 local dir = minetest.wallmounted_to_dir(node.param2)
55
56                 redstone.inject(pos,{torch=9})
57                 local pos2 = vector.add(dir,pos)
58                 redstone.inject(pos2,{torch=9})
59
60                 redstone.update(pos)
61                 redstone.update(pos2)
62         end,
63         after_destruct = function(pos, oldnode)
64                 redstone.inject(pos,nil)
65                 local dir = minetest.wallmounted_to_dir(oldnode.param2)
66                 local pos2 = vector.add(dir,pos)
67                 redstone.inject(pos2,nil)
68
69                 redstone.update(pos)
70                 redstone.update(pos2)
71         end,
72 })
73 minetest.register_node("redstone:button_on", {
74     description = "Button",
75     tiles = {"stone.png"},
76     groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,dig_immediate=1},
77     sounds = main.stoneSound(),
78     paramtype = "light",
79         paramtype2 = "wallmounted",
80         sunlight_propagates = true,
81         walkable = false,
82         drawtype= "nodebox",
83         drop="redstone:button_off",
84         node_box = {
85                 type = "fixed",
86                 fixed = {
87                                 --left front bottom right back top
88                                 {-0.25, -0.5,  -0.15, 0.25,  -0.45, 0.15},
89                         },
90                 },
91     on_timer = function(pos, elapsed)
92                 minetest.sound_play("lever", {pos=pos,pitch=0.8})
93
94                 local node = minetest.get_node(pos)
95                 minetest.swap_node(pos, {name="redstone:button_off",param2=node.param2})
96
97                 redstone.inject(pos,nil)
98                 local param2 = minetest.get_node(pos).param2
99                 local dir = minetest.wallmounted_to_dir(param2)
100                 local pos2 = vector.add(dir,pos)
101                 redstone.inject(pos2,nil)
102
103                 redstone.update(pos)
104                 redstone.update(pos2)
105                 
106         end,
107         after_destruct = function(pos, oldnode)
108                 redstone.inject(pos,nil)
109                 local dir = minetest.wallmounted_to_dir(oldnode.param2)
110                 local pos2 = vector.add(dir,pos)
111                 redstone.inject(pos2,nil)
112
113                 redstone.update(pos)
114                 redstone.update(pos2)
115         end,
116 })
117
118 minetest.register_lbm({
119         name = "redstone:button_on",
120         nodenames = {"redstone:button_on"},
121         run_at_every_load = true,
122         action = function(pos)
123                 local param2 = minetest.get_node(pos).param2
124                 local dir = minetest.wallmounted_to_dir(param2)
125
126                 redstone.inject(pos,{torch=9})
127                 local pos2 = vector.add(dir,pos)
128                 redstone.inject(pos2,{torch=9})
129
130                 minetest.after(0,function()
131                         redstone.update(pos)
132                         redstone.update(pos2)
133                 end)
134         end,
135 })