]> git.lizzy.rs Git - Crafter.git/commitdiff
Add in redstone repeaters
authoroilboi <47129783+oilboi@users.noreply.github.com>
Sun, 28 Jun 2020 01:30:48 +0000 (21:30 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Sun, 28 Jun 2020 01:30:48 +0000 (21:30 -0400)
mods/redstone/init.lua
mods/redstone/repeater.lua

index 69fbf111bbf48645d77abe2ff61815b3c5f21ca8..8c5a1bfe3413ee6aad5b6dd793d7df41b769d3d4 100644 (file)
@@ -48,7 +48,7 @@ local path = minetest.get_modpath("redstone")
 dofile(path.."/torch.lua")
 --dofile(path.."/lever.lua")
 --dofile(path.."/button.lua")
---dofile(path.."/repeater.lua")
+dofile(path.."/repeater.lua")
 --dofile(path.."/light.lua")
 --dofile(path.."/piston.lua")
 --dofile(path.."/comparator.lua")
index 7eb45a883502d9029fb13ca8e5bae3d5234ffa9f..15379174522fdfcd46f6469abfef8a5b93a5eb8b 100644 (file)
@@ -1,14 +1,26 @@
 local minetest,vector = minetest,vector
 
 local max_timer = 7
-
 for level = 0,max_timer do
-minetest.register_node("redstone:repeater_off_"..level, {
-    description = "Redstone Repeater",
-    tiles = {"repeater_off.png"},
-    groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
-    sounds = main.stoneSound(),
-    paramtype = "light",
+
+
+
+
+--[[
+ ██████╗ ███╗   ██╗
+██╔═══██╗████╗  ██║
+██║   ██║██╔██╗ ██║
+██║   ██║██║╚██╗██║
+╚██████╔╝██║ ╚████║
+ ╚═════╝ ╚═╝  ╚═══╝
+]]--
+
+minetest.register_node("redstone:repeater_on_"..level, {
+       description = "Redstone Repeater",
+       tiles = {"repeater_on.png"},
+       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},
+       sounds = main.stoneSound(),
+       paramtype = "light",
        paramtype2 = "facedir",
        sunlight_propagates = true,
        walkable = false,
@@ -22,42 +34,114 @@ minetest.register_node("redstone:repeater_off_"..level, {
                                {-0.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
                                {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
                        },
-               },      
-       redstone_activation = function(pos)
-               local timer = minetest.get_node_timer(pos)
-               if not timer:is_started() then
-                       timer:start(level/max_timer)
-               end
-       end,
-
-       on_timer = function(pos, elapsed)
-               local param2 = minetest.get_node(pos).param2
-               minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
-               redstone.collect_info(pos)
-       end,
+               },
 
        on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
                local newlevel = level + 1
                if newlevel > max_timer then
                        newlevel = 0
                end
-               minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=node.param2})
+               local param2 = minetest.get_node(pos).param2
+               local dir = minetest.facedir_to_dir(param2)
+
+               minetest.swap_node(pos,{name="redstone:repeater_on_"..newlevel,param2=param2})
                minetest.sound_play("lever", {pos=pos})
+               redstone.inject(pos,{
+                       name = "redstone:repeater_on_"..newlevel,
+                       torch  = 9,
+                       torch_directional = true,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+       end,
+       
+       on_timer = function(pos, elapsed)
+               local param2 = minetest.get_node(pos).param2
+               minetest.swap_node(pos, {name="redstone:repeater_off_"..level,param2=param2})
+               local dir = minetest.facedir_to_dir(param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_off_"..level,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+
+               redstone.update(pos)
        end,
 
        after_destruct = function(pos, oldnode)
-               redstone.collect_info(pos)
+               redstone.inject(pos,nil)
+               redstone.update(pos)
        end,
 
        after_place_node = function(pos)
-               redstone.collect_info(pos)
+               local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_on_"..level,
+                       torch  = 9,
+                       torch_directional = true,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               redstone.update(pos)
        end
 })
 
-minetest.register_node("redstone:repeater_on_"..level, {
+redstone.register_activator({
+       name = "redstone:repeater_on_"..level,
+       deactivate = function(pos)
+               local timer = minetest.get_node_timer(pos)
+               if not timer:is_started() then
+                       timer:start(level/max_timer)
+               end
+       end
+})
+
+
+minetest.register_lbm({
+       name = "redstone:startup_activator_on_"..level,
+       nodenames = {"redstone:repeater_on_"..level},
+       run_at_every_load = true,
+       action = function(pos)
+               local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_on_"..level,
+                       torch  = 9,
+                       torch_directional = true,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               redstone.update(pos)
+       end,
+})
+
+
+
+
+
+
+
+
+
+
+--[[
+ ██████╗ ███████╗███████╗
+██╔═══██╗██╔════╝██╔════╝
+██║   ██║█████╗  █████╗  
+██║   ██║██╔══╝  ██╔══╝  
+╚██████╔╝██║     ██║     
+ ╚═════╝ ╚═╝     ╚═╝     
+]]--
+
+
+
+minetest.register_node("redstone:repeater_off_"..level, {
     description = "Redstone Repeater",
-    tiles = {"repeater_on.png"},
-    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},
+    tiles = {"repeater_off.png"},
+    groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,attached_node = 1,repeater_off=1,repeater=1,redstone_activation_directional=1,repeater_level=level},
     sounds = main.stoneSound(),
     paramtype = "light",
        paramtype2 = "facedir",
@@ -73,32 +157,102 @@ minetest.register_node("redstone:repeater_on_"..level, {
                                {-0.1, -0.5,  0.2, 0.1,  0.1, 0.4}, --output post
                                {-0.1, -0.5,  -0.05-(level*0.05), 0.1,  0.1, 0.15-(level*0.05)}, --input post
                        },
-               },
-       on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
-               local newlevel = level + 1
-               if newlevel > max_timer then
-                       newlevel = 0
-               end
-               minetest.swap_node(pos,{name="redstone:repeater_on_"..newlevel,param2=node.param2})
-               minetest.sound_play("lever", {pos=pos})
-       end,
-       redstone_deactivation = function(pos)
+               },      
+       redstone_activation = function(pos)
                local timer = minetest.get_node_timer(pos)
                if not timer:is_started() then
                        timer:start(level/max_timer)
                end
        end,
+
        on_timer = function(pos, elapsed)
                local param2 = minetest.get_node(pos).param2
-               minetest.swap_node(pos, {name="redstone:repeater_off_"..level,param2=param2})
-               redstone.collect_info(pos)
+               minetest.swap_node(pos, {name="redstone:repeater_on_"..level,param2=param2})
+
+               local dir = minetest.facedir_to_dir(param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_on_"..level,
+                       torch  = 9,
+                       torch_directional = true,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               redstone.update(pos)
+       end,
+
+       on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+               local newlevel = level + 1
+               if newlevel > max_timer then
+                       newlevel = 0
+               end
+               local param2 = minetest.get_node(pos).param2
+               local dir = minetest.facedir_to_dir(param2)
+               minetest.swap_node(pos,{name="redstone:repeater_off_"..newlevel,param2=param2})
+               redstone.inject(pos,{
+                       name = "redstone:repeater_off_"..newlevel,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               minetest.sound_play("lever", {pos=pos})
        end,
+
        after_destruct = function(pos, oldnode)
-               redstone.collect_info(pos)
+               redstone.inject(pos,nil)
+               redstone.update(pos)
        end,
 
        after_place_node = function(pos)
-               redstone.collect_info(pos)
+               local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_off_"..level,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               redstone.update(pos)
+       end
+})
+
+
+redstone.register_activator({
+       name = "redstone:repeater_off_"..level,
+       activate = function(pos)
+               local timer = minetest.get_node_timer(pos)
+               if not timer:is_started() then
+                       timer:start(level/max_timer)
+               end
        end
 })
+
+
+minetest.register_lbm({
+       name = "redstone:startup_activator_off_"..level,
+       nodenames = {"redstone:repeater_off_"..level},
+       run_at_every_load = true,
+       action = function(pos)
+               local dir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
+               redstone.inject(pos,{
+                       name = "redstone:repeater_off_"..level,
+                       directional_activator = true,
+                       input  = vector.multiply(dir,-1),
+                       dir = dir
+               })
+               redstone.update(pos)
+       end,
+})
+
+
+
+
+
+
+
+
+
+
+
+
+
 end