1 local minetest,vector = minetest,vector
4 for level = 0,max_timer do
18 minetest.register_node("redstone:repeater_on_"..level, {
19 description = "Redstone Repeater",
20 tiles = {"repeater_on.png"},
21 groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,redstone_activation_directional=1,repeater_on=1,repeater=1,torch_directional=1,redstone_power=16,repeater_level=level},
22 sounds = main.stoneSound(),
24 paramtype2 = "facedir",
25 sunlight_propagates = true,
28 drop="redstone:repeater_off_0",
32 --left front bottom right back top
33 {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, --base
34 {-0.1, -0.5, 0.2, 0.1, 0.1, 0.4}, --output post
35 {-0.1, -0.5, -0.05-(level*0.05), 0.1, 0.1, 0.15-(level*0.05)}, --input post
39 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
40 local newlevel = level + 1
41 if newlevel > max_timer then
44 local param2 = minetest.get_node(pos).param2
45 local dir = minetest.facedir_to_dir(param2)
47 minetest.swap_node(pos,{name="redstone:repeater_on_"..newlevel,param2=param2})
48 minetest.sound_play("lever", {pos=pos})
50 name = "redstone:repeater_on_"..newlevel,
52 torch_directional = true,
53 directional_activator = true,
54 input = vector.subtract(pos,dir),
55 output = vector.add(pos,dir),
60 on_timer = function(pos, elapsed)
61 local param2 = minetest.get_node(pos).param2
62 minetest.swap_node(pos, {name="redstone:repeater_off_"..level,param2=param2})
63 local dir = minetest.facedir_to_dir(param2)
65 name = "redstone:repeater_off_"..level,
66 directional_activator = true,
67 input = vector.subtract(pos,dir),
68 output = vector.add(pos,dir),
71 --redstone.update(pos)
72 redstone.update(vector.add(pos,dir))
75 after_destruct = function(pos, oldnode)
76 local param2 = oldnode.param2
77 local dir = minetest.facedir_to_dir(param2)
78 redstone.inject(pos,nil)
79 --redstone.update(pos)
80 redstone.update(vector.add(pos,dir))
83 after_place_node = function(pos)
84 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
86 name = "redstone:repeater_on_"..level,
88 torch_directional = true,
89 directional_activator = true,
90 input = vector.subtract(pos,dir),
91 output = vector.add(pos,dir),
95 redstone.update(vector.add(pos,dir))
99 redstone.register_activator({
100 name = "redstone:repeater_on_"..level,
101 deactivate = function(pos)
102 local timer = minetest.get_node_timer(pos)
103 if not timer:is_started() then
104 timer:start(level/max_timer)
110 minetest.register_lbm({
111 name = "redstone:startup_activator_on_"..level,
112 nodenames = {"redstone:repeater_on_"..level},
113 run_at_every_load = true,
114 action = function(pos)
115 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
116 redstone.inject(pos,{
117 name = "redstone:repeater_on_"..level,
119 torch_directional = true,
120 directional_activator = true,
121 input = vector.subtract(pos,dir),
122 output = vector.add(pos,dir),
125 --redstone.update(pos)
126 redstone.update(vector.add(pos,dir))
140 ██████╗ ███████╗███████╗
141 ██╔═══██╗██╔════╝██╔════╝
150 minetest.register_node("redstone:repeater_off_"..level, {
151 description = "Redstone Repeater",
152 tiles = {"repeater_off.png"},
153 groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
154 sounds = main.stoneSound(),
156 paramtype2 = "facedir",
157 sunlight_propagates = true,
160 drop="redstone:repeater_off_0",
164 --left front bottom right back top
165 {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, --base
166 {-0.1, -0.5, 0.2, 0.1, 0.1, 0.4}, --output post
167 {-0.1, -0.5, -0.05-(level*0.05), 0.1, 0.1, 0.15-(level*0.05)}, --input post
171 on_timer = function(pos, elapsed)
172 local param2 = minetest.get_node(pos).param2
173 minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
175 local dir = minetest.facedir_to_dir(param2)
176 redstone.inject(pos,{
177 name = "redstone:repeater_on_"..level,
179 torch_directional = true,
180 directional_activator = true,
181 input = vector.subtract(pos,dir),
182 output = vector.add(pos,dir),
185 --redstone.update(pos)
186 redstone.update(vector.add(pos,dir))
189 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
190 local newlevel = level + 1
191 if newlevel > max_timer then
194 local param2 = minetest.get_node(pos).param2
195 local dir = minetest.facedir_to_dir(param2)
196 minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=param2})
197 redstone.inject(pos,{
198 name = "redstone:repeater_off_"..newlevel,
199 directional_activator = true,
200 input = vector.subtract(pos,dir),
201 output = vector.add(pos,dir),
204 minetest.sound_play("lever", {pos=pos})
207 after_destruct = function(pos, oldnode)
208 local param2 = oldnode.param2
209 local dir = minetest.facedir_to_dir(param2)
210 redstone.inject(pos,nil)
211 --redstone.update(pos)
212 redstone.update(vector.add(pos,dir))
215 after_place_node = function(pos)
216 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
217 redstone.inject(pos,{
218 name = "redstone:repeater_off_"..level,
219 directional_activator = true,
220 input = vector.subtract(pos,dir),
221 output = vector.add(pos,dir),
225 redstone.update(vector.add(pos,dir))
230 redstone.register_activator({
231 name = "redstone:repeater_off_"..level,
232 activate = function(pos)
233 local timer = minetest.get_node_timer(pos)
234 if not timer:is_started() then
235 timer:start(level/max_timer)
241 minetest.register_lbm({
242 name = "redstone:startup_activator_off_"..level,
243 nodenames = {"redstone:repeater_off_"..level},
244 run_at_every_load = true,
245 action = function(pos)
246 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
247 redstone.inject(pos,{
248 name = "redstone:repeater_off_"..level,
249 directional_activator = true,
250 input = vector.subtract(pos,dir),
253 --redstone.update(pos)
254 redstone.update(vector.add(pos,dir))