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=9,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),
71 redstone.update(vector.add(pos,dir))
74 after_destruct = function(pos, oldnode)
75 redstone.inject(pos,nil)
79 after_place_node = function(pos)
80 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
82 name = "redstone:repeater_on_"..level,
84 torch_directional = true,
85 directional_activator = true,
86 input = vector.subtract(pos,dir),
87 output = vector.add(pos,dir),
94 redstone.register_activator({
95 name = "redstone:repeater_on_"..level,
96 deactivate = function(pos)
97 local timer = minetest.get_node_timer(pos)
98 if not timer:is_started() then
99 timer:start(level/max_timer)
105 minetest.register_lbm({
106 name = "redstone:startup_activator_on_"..level,
107 nodenames = {"redstone:repeater_on_"..level},
108 run_at_every_load = true,
109 action = function(pos)
110 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
111 redstone.inject(pos,{
112 name = "redstone:repeater_on_"..level,
114 torch_directional = true,
115 directional_activator = true,
116 input = vector.subtract(pos,dir),
117 output = vector.add(pos,dir),
120 --redstone needs to warm up
121 minetest.after(0,function()
137 ██████╗ ███████╗███████╗
138 ██╔═══██╗██╔════╝██╔════╝
147 minetest.register_node("redstone:repeater_off_"..level, {
148 description = "Redstone Repeater",
149 tiles = {"repeater_off.png"},
150 groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
151 sounds = main.stoneSound(),
153 paramtype2 = "facedir",
154 sunlight_propagates = true,
157 drop="redstone:repeater_off_0",
161 --left front bottom right back top
162 {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, --base
163 {-0.1, -0.5, 0.2, 0.1, 0.1, 0.4}, --output post
164 {-0.1, -0.5, -0.05-(level*0.05), 0.1, 0.1, 0.15-(level*0.05)}, --input post
167 redstone_activation = function(pos)
168 local timer = minetest.get_node_timer(pos)
169 if not timer:is_started() then
170 timer:start(level/max_timer)
174 on_timer = function(pos, elapsed)
175 local param2 = minetest.get_node(pos).param2
176 minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
178 local dir = minetest.facedir_to_dir(param2)
179 redstone.inject(pos,{
180 name = "redstone:repeater_on_"..level,
182 torch_directional = true,
183 directional_activator = true,
184 input = vector.subtract(pos,dir),
185 output = vector.add(pos,dir),
188 redstone.update(vector.add(pos,dir))
191 on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
192 local newlevel = level + 1
193 if newlevel > max_timer then
196 local param2 = minetest.get_node(pos).param2
197 local dir = minetest.facedir_to_dir(param2)
198 minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=param2})
199 redstone.inject(pos,{
200 name = "redstone:repeater_off_"..newlevel,
201 directional_activator = true,
202 input = vector.subtract(pos,dir),
205 minetest.sound_play("lever", {pos=pos})
208 after_destruct = function(pos, oldnode)
209 redstone.inject(pos,nil)
213 after_place_node = function(pos)
214 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
215 redstone.inject(pos,{
216 name = "redstone:repeater_off_"..level,
217 directional_activator = true,
218 input = vector.subtract(pos,dir),
226 redstone.register_activator({
227 name = "redstone:repeater_off_"..level,
228 activate = function(pos)
229 local timer = minetest.get_node_timer(pos)
230 if not timer:is_started() then
231 timer:start(level/max_timer)
237 minetest.register_lbm({
238 name = "redstone:startup_activator_off_"..level,
239 nodenames = {"redstone:repeater_off_"..level},
240 run_at_every_load = true,
241 action = function(pos)
242 local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
243 redstone.inject(pos,{
244 name = "redstone:repeater_off_"..level,
245 directional_activator = true,
246 input = vector.subtract(pos,dir),
249 --redstone needs a second to warm up
250 minetest.after(0,function()