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