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