From c675bcc84f5a5a4d285feb7e8fad0d484518585d Mon Sep 17 00:00:00 2001 From: oilboi <47129783+oilboi@users.noreply.github.com> Date: Wed, 1 Jul 2020 13:42:26 -0400 Subject: [PATCH] Add in redstone breaker --- mods/redstone/breaker.lua | 142 ++++++++++++++++++++++++++++++++++++++ mods/redstone/init.lua | 1 + 2 files changed, 143 insertions(+) create mode 100644 mods/redstone/breaker.lua diff --git a/mods/redstone/breaker.lua b/mods/redstone/breaker.lua new file mode 100644 index 0000000..bd7c4ea --- /dev/null +++ b/mods/redstone/breaker.lua @@ -0,0 +1,142 @@ +minetest.register_node("redstone:breaker_off", { + description = "Breaker", + tiles = {"redstone_piston.png^[invert:rgb", + "redstone_piston.png^[transformR180^[invert:rgb", + "redstone_piston.png^[transformR270^[invert:rgb", + "redstone_piston.png^[transformR90^[invert:rgb", + "wood.png^[invert:rgb", + "stone.png^[invert:rgb"}, + paramtype2 = "facedir", + groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,pathable = 1,redstone_activation=1}, + sounds = main.stoneSound(), + drop = "redstone:breaker_off", + paramtype = "light", + sunlight_propagates = true, + --reverse the direction to face the player + on_construct = function(pos) + redstone.inject(pos,{ + name = "redstone:breaker_off", + activator = true, + }) + redstone.update(pos) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local look = clicker:get_look_dir() + look = vector.multiply(look,-1) + local dir = minetest.dir_to_facedir(look, true) + minetest.swap_node(pos,{name="redstone:breaker_off",param2=dir}) + redstone.update(pos) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + local look = placer:get_look_dir() + look = vector.multiply(look,-1) + local dir = minetest.dir_to_facedir(look, true) + minetest.swap_node(pos,{name="redstone:breaker_off",param2=dir}) + end, + on_destruct = function(pos, oldnode) + redstone.inject(pos,nil) + end, +}) + +redstone.register_activator({ + name = "redstone:breaker_off", + activate = function(pos) + + local node = minetest.get_node(pos) + + minetest.swap_node(pos,{name="redstone:breaker_on",param2=node.param2}) + + local dir = minetest.facedir_to_dir(node.param2) + + redstone.inject(pos,{ + name = "redstone:breaker_on", + activator = true, + }) + + pos = vector.add(pos,dir) + + node = minetest.get_node(pos) + + node = minetest.get_node_drops(node, "main:rubypick") + + if type(node) == "table" then + for _,nodey in pairs(node) do + minetest.throw_item(pos,nodey) + end + else + minetest.throw_item(pos,node) + end + minetest.remove_node(pos) + + redstone.update(pos) + end +}) + +minetest.register_lbm({ + name = "redstone:breaker_off", + nodenames = {"redstone:breaker_off"}, + run_at_every_load = true, + action = function(pos) + redstone.inject(pos,{ + name = "redstone:breaker_off", + activator = true, + }) + redstone.update(pos) + end, +}) + + +minetest.register_node("redstone:breaker_on", { + description = "Breaker", + tiles = {"redstone_piston.png^[invert:rgb^[colorize:red:100", + "redstone_piston.png^[transformR180^[invert:rgb^[colorize:red:100", + "redstone_piston.png^[transformR270^[invert:rgb^[colorize:red:100", + "redstone_piston.png^[transformR90^[invert:rgb^[colorize:red:100", + "wood.png^[invert:rgb^[colorize:red:100", + "stone.png^[invert:rgb^[colorize:red:100"}, + paramtype2 = "facedir", + groups = {stone = 1, hard = 1, pickaxe = 1, hand = 4,pathable = 1,redstone_activation=1}, + sounds = main.stoneSound(), + drop = "redstone:breaker_off", + paramtype = "light", + sunlight_propagates = true, + --reverse the direction to face the player + on_construct = function(pos) + redstone.inject(pos,{ + name = "redstone:breaker_on", + activator = true, + }) + redstone.update(pos) + end, + on_destruct = function(pos) + redstone.inject(pos,nil) + end, +}) + + +redstone.register_activator({ + name = "redstone:breaker_on", + deactivate = function(pos) + local node = minetest.get_node(pos) + + minetest.swap_node(pos,{name="redstone:breaker_off",param2=node.param2}) + redstone.inject(pos,{ + name = "redstone:breaker_off", + activator = true, + }) + redstone.update(pos) + end, +}) + +minetest.register_lbm({ + name = "redstone:breaker_on", + nodenames = {"redstone:breaker_on"}, + run_at_every_load = true, + action = function(pos) + redstone.inject(pos,{ + name = "redstone:breaker_on", + activator = true, + }) + redstone.update(pos) + end, +}) diff --git a/mods/redstone/init.lua b/mods/redstone/init.lua index f9875bf..a243e35 100644 --- a/mods/redstone/init.lua +++ b/mods/redstone/init.lua @@ -79,6 +79,7 @@ dofile(path.."/player_detector.lua") dofile(path.."/space_maker.lua") --dofile(path.."/pressure_plate.lua") dofile(path.."/capacitors.lua") +dofile(path.."/breaker.lua") --this is written out manually so that -- 2.44.0