forked from minetest-mods/mesecons
Port a lot more (basically everything apart from gates, pistons and extrawire crossing) to the new nodedef system. There are some problems with wall button and wall lever (in the way they visually connect to wires)
This commit is contained in:
parent
cf6080f723
commit
b37bdbf55c
@ -23,22 +23,5 @@ mesecon.rules.buttonlike =
|
||||
{x = 1, y =-1, z =-1},
|
||||
{x = 2, y = 0, z = 0}}
|
||||
|
||||
mesecon.rules.pressurplatelike =
|
||||
{{x=0, y=1, z=-1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=-1, z=-1},
|
||||
{x=0, y=1, z=1},
|
||||
{x=0, y=-1, z=1},
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=1, y=1, z=0},
|
||||
{x=1, y=-1, z=0},
|
||||
{x=-1, y=1, z=0},
|
||||
{x=-1, y=-1, z=0},
|
||||
{x=-1, y=0, z=0},
|
||||
{x=0, y=-1, z=0},
|
||||
{x=0, y=-2, z=0},
|
||||
{x=0, y=1, z=0}}
|
||||
|
||||
mesecon.state.on = "on"
|
||||
mesecon.state.off = "off"
|
||||
|
@ -32,7 +32,7 @@ minetest.register_node("mesecons_button:button_off", {
|
||||
description = "Button",
|
||||
on_punch = function (pos, node)
|
||||
mesecon:swap_node(pos, "mesecons_button:button_on")
|
||||
local rules=mesecon.button_get_rules(node.param2)
|
||||
local rules=mesecon.button_get_rules(node)
|
||||
mesecon:receptor_on(pos, rules)
|
||||
minetest.after(1, mesecon.button_turnoff, {pos=pos, param2=node.param2})
|
||||
end,
|
||||
@ -81,7 +81,7 @@ minetest.register_node("mesecons_button:button_on", {
|
||||
mesecon.button_turnoff = function (params)
|
||||
if minetest.env:get_node(params.pos).name=="mesecons_button:button_on" then
|
||||
mesecon:swap_node(params.pos, "mesecons_button:button_off")
|
||||
local rules=mesecon.button_get_rules(params.param2)
|
||||
local rules=mesecon.button_get_rules(params)
|
||||
mesecon:receptor_off(params.pos, rules)
|
||||
end
|
||||
end
|
||||
|
@ -40,7 +40,6 @@ local delayer_turnoff = function(params)
|
||||
end
|
||||
|
||||
local delayer_update = function(pos, node)
|
||||
print("update")
|
||||
if string.find(node.name, "mesecons_delayer:delayer_off")~=nil then
|
||||
local time = 0
|
||||
if node.name=="mesecons_delayer:delayer_off_1" then
|
||||
|
@ -9,8 +9,7 @@ minetest.register_node("mesecons_detector:object_detector_off", {
|
||||
groups = {cracky=3},
|
||||
description="Player Detector",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off,
|
||||
rules = mesecon.rules.pressurplatelike
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
|
||||
@ -21,8 +20,7 @@ minetest.register_node("mesecons_detector:object_detector_on", {
|
||||
groups = {cracky=3,not_in_creative_inventory=1},
|
||||
drop = 'mesecons_detector:object_detector_off',
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on,
|
||||
rules = mesecon.rules.pressurplatelike
|
||||
state = mesecon.state.on
|
||||
}}
|
||||
})
|
||||
|
||||
@ -50,7 +48,7 @@ minetest.register_abm(
|
||||
end
|
||||
local objpos=obj:getpos()
|
||||
minetest.env:add_node(pos, {name="mesecons_detector:object_detector_on"})
|
||||
mesecon:receptor_on(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_on(pos)
|
||||
end
|
||||
end
|
||||
end,
|
||||
@ -78,7 +76,7 @@ minetest.register_abm(
|
||||
end
|
||||
if objectfound==0 then
|
||||
minetest.env:add_node(pos, {name="mesecons_detector:object_detector_off"})
|
||||
mesecon:receptor_off(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_off(pos)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
@ -1,4 +1,7 @@
|
||||
-- MESELAMPS
|
||||
-- A lamp is "is an electrical device used to create artificial light" (wikipedia)
|
||||
-- guess what?
|
||||
|
||||
minetest.register_node("mesecons_lamp:lamp_on", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"jeija_meselamp_on.png"},
|
||||
@ -20,8 +23,13 @@ minetest.register_node("mesecons_lamp:lamp_on", {
|
||||
wall_bottom = {-0.3125,-0.5,-0.3125,0.3125,-0.375,0.3125},
|
||||
wall_side = {-0.375,-0.3125,-0.3125,-0.5,0.3125,0.3125},
|
||||
},
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1, mesecon_effector_on = 1, mesecon = 2},
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1, mesecon_effector_on = 1},
|
||||
drop='"mesecons_lamp:lamp_off" 1',
|
||||
mesecons = {effector = {
|
||||
action_off = function (pos, node)
|
||||
mesecon:swap_node(pos, "mesecons_lamp:lamp_off")
|
||||
end
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_lamp:lamp_off", {
|
||||
@ -45,8 +53,13 @@ minetest.register_node("mesecons_lamp:lamp_off", {
|
||||
wall_bottom = {-0.3125,-0.5,-0.3125,0.3125,-0.375,0.3125},
|
||||
wall_side = {-0.375,-0.3125,-0.3125,-0.5,0.3125,0.3125},
|
||||
},
|
||||
groups = {dig_immediate=3, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2},
|
||||
groups = {dig_immediate=3, mesecon_receptor_off = 1, mesecon_effector_off = 1},
|
||||
description="Meselamp",
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
mesecon:swap_node(pos, "mesecons_lamp:lamp_on")
|
||||
end
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -57,19 +70,3 @@ minetest.register_craft({
|
||||
{'', '"default:glass"', ''},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:register_on_signal_on(function(pos, node)
|
||||
if node.name == "mesecons_lamp:lamp_off" then
|
||||
minetest.env:add_node(pos, {name="mesecons_lamp:lamp_on", param2 = node.param2})
|
||||
nodeupdate(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
mesecon:register_on_signal_off(function(pos, node)
|
||||
if node.name == "mesecons_lamp:lamp_on" then
|
||||
minetest.env:add_node(pos, {name="mesecons_lamp:lamp_off", param2 = node.param2})
|
||||
nodeupdate(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
mesecon:register_effector("mesecons_lamp:lamp_on", "mesecons_lamp:lamp_off")
|
||||
|
@ -23,6 +23,33 @@ if tostring(d)..tostring(c)..tostring(b)..tostring(a) ~= "0000" then
|
||||
else
|
||||
groups = {dig_immediate=2, mesecon = 3}
|
||||
end
|
||||
local rules={}
|
||||
if (a == 1) then table.insert(rules, {x = -1, y = 0, z = 0}) end
|
||||
if (b == 1) then table.insert(rules, {x = 0, y = 0, z = 1}) end
|
||||
if (c == 1) then table.insert(rules, {x = 1, y = 0, z = 0}) end
|
||||
if (d == 1) then table.insert(rules, {x = 0, y = 0, z = -1}) end
|
||||
|
||||
local input_rules={}
|
||||
if (a == 0) then table.insert(input_rules, {x = -1, y = 0, z = 0}) end
|
||||
if (b == 0) then table.insert(input_rules, {x = 0, y = 0, z = 1}) end
|
||||
if (c == 0) then table.insert(input_rules, {x = 1, y = 0, z = 0}) end
|
||||
if (d == 0) then table.insert(input_rules, {x = 0, y = 0, z = -1}) end
|
||||
mesecon:add_rules(nodename, rules)
|
||||
|
||||
local mesecons = {effector =
|
||||
{
|
||||
rules = input_rules,
|
||||
action_change = function (pos, node)
|
||||
update_yc(pos)
|
||||
end
|
||||
}}
|
||||
if nodename ~= "mesecons_microcontroller:microcontroller0000" then
|
||||
mesecons.receptor = {
|
||||
state = mesecon.state.on,
|
||||
rules = rules
|
||||
}
|
||||
end
|
||||
|
||||
minetest.register_node(nodename, {
|
||||
description = "Microcontroller",
|
||||
drawtype = "nodebox",
|
||||
@ -101,25 +128,12 @@ minetest.register_node(nodename, {
|
||||
yc_reset (pos)
|
||||
update_yc(pos)
|
||||
end,
|
||||
mesecons = mesecons,
|
||||
on_dig = function (pos, node)
|
||||
rules = mesecon:get_rules(node.name)
|
||||
mesecon:receptor_off(pos, rules)
|
||||
end,
|
||||
})
|
||||
|
||||
local rules={}
|
||||
if (a == 1) then table.insert(rules, {x = -1, y = 0, z = 0}) end
|
||||
if (b == 1) then table.insert(rules, {x = 0, y = 0, z = 1}) end
|
||||
if (c == 1) then table.insert(rules, {x = 1, y = 0, z = 0}) end
|
||||
if (d == 1) then table.insert(rules, {x = 0, y = 0, z = -1}) end
|
||||
|
||||
local input_rules={}
|
||||
if (a == 0) then table.insert(input_rules, {x = -1, y = 0, z = 0}) end
|
||||
if (b == 0) then table.insert(input_rules, {x = 0, y = 0, z = 1}) end
|
||||
if (c == 0) then table.insert(input_rules, {x = 1, y = 0, z = 0}) end
|
||||
if (d == 0) then table.insert(input_rules, {x = 0, y = 0, z = -1}) end
|
||||
mesecon:add_rules(nodename, rules)
|
||||
|
||||
mesecon:register_effector(nodename, nodename, input_rules)
|
||||
if nodename ~= "mesecons_microcontroller:microcontroller0000" then
|
||||
mesecon:add_receptor_node(nodename, rules)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -682,16 +696,3 @@ function yc_overheat_off(pos)
|
||||
rules = mesecon:get_rules("mesecons_microcontroller:microcontroller1111")
|
||||
mesecon:receptor_off(pos, rules)
|
||||
end
|
||||
|
||||
mesecon:register_on_signal_change(function(pos, node)
|
||||
if string.find(node.name, "mesecons_microcontroller:microcontroller")~=nil then
|
||||
update_yc(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_dignode(function(pos, node)
|
||||
if string.find(node.name, "mesecons_microcontroller:microcontroller") then
|
||||
rules = mesecon:get_rules(node.name)
|
||||
mesecon:receptor_off(pos, rules)
|
||||
end
|
||||
end)
|
||||
|
@ -1,33 +1,53 @@
|
||||
-- MOVESTONE
|
||||
-- Non-sticky:
|
||||
-- Moves along mesecon lines
|
||||
-- Pushes all blocks in front of it
|
||||
--
|
||||
-- Sticky one
|
||||
-- Moves along mesecon lines
|
||||
-- Pushes all block in front of it
|
||||
-- Pull all blocks in its back
|
||||
|
||||
function mesecon:get_movestone_direction(pos)
|
||||
getactivated=0
|
||||
getactivated = 0
|
||||
local lpos
|
||||
local getactivated=0
|
||||
local rules=mesecon:get_rules("movestone")
|
||||
local getactivated = 0
|
||||
local rules = {
|
||||
{x=0, y=1, z=-1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=-1, z=-1},
|
||||
{x=0, y=1, z=1},
|
||||
{x=0, y=-1, z=1},
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=1, y=1, z=0},
|
||||
{x=1, y=-1, z=0},
|
||||
{x=-1, y=1, z=0},
|
||||
{x=-1, y=-1, z=0},
|
||||
{x=-1, y=0, z=0}}
|
||||
|
||||
lpos={x=pos.x+1, y=pos.y, z=pos.z}
|
||||
for n=1, 3 do
|
||||
lpos = {x=pos.x+1, y=pos.y, z=pos.z}
|
||||
for n = 1, 3 do
|
||||
if mesecon:is_power_on(lpos, rules[n].x, rules[n].y, rules[n].z) then
|
||||
return {x=0, y=0, z=-1}
|
||||
end
|
||||
end
|
||||
|
||||
lpos={x=pos.x-1, y=pos.y, z=pos.z}
|
||||
lpos = {x = pos.x-1, y = pos.y, z = pos.z}
|
||||
for n=4, 6 do
|
||||
if mesecon:is_power_on(lpos, rules[n].x, rules[n].y, rules[n].z) then
|
||||
return {x=0, y=0, z=1}
|
||||
end
|
||||
end
|
||||
|
||||
lpos={x=pos.x, y=pos.y, z=pos.z+1}
|
||||
lpos = {x = pos.x, y = pos.y, z = pos.z+1}
|
||||
for n=7, 9 do
|
||||
if mesecon:is_power_on(lpos, rules[n].x, rules[n].y, rules[n].z) then
|
||||
return {x=-1, y=0, z=0}
|
||||
end
|
||||
end
|
||||
|
||||
lpos={x=pos.x, y=pos.y, z=pos.z-1}
|
||||
lpos = {x = pos.x, y = pos.y, z = pos.z-1}
|
||||
for n=10, 12 do
|
||||
if mesecon:is_power_on(lpos, rules[n].x, rules[n].y, rules[n].z) then
|
||||
return {x=1, y=0, z=0}
|
||||
@ -41,8 +61,27 @@ minetest.register_node("mesecons_movestones:movestone", {
|
||||
legacy_facedir_simple = true,
|
||||
groups = {cracky=3},
|
||||
description="Movestone",
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
local direction=mesecon:get_movestone_direction(pos)
|
||||
if not direction then return end
|
||||
local checknode={}
|
||||
local collpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
repeat -- Check if it collides with a stopper
|
||||
collpos = addPosRule(collpos, direction)
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
minetest.env:remove_node(pos)
|
||||
mesecon:update_autoconnect(pos)
|
||||
minetest.env:add_entity(pos, "mesecons_movestones:movestone_entity")
|
||||
end
|
||||
}}
|
||||
})
|
||||
mesecon:register_effector("mesecons_movestones:movestone", "mesecons_movestones:movestone")
|
||||
|
||||
minetest.register_entity("mesecons_movestones:movestone_entity", {
|
||||
physical = false,
|
||||
@ -50,10 +89,6 @@ minetest.register_entity("mesecons_movestones:movestone_entity", {
|
||||
textures = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"},
|
||||
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
|
||||
visual = "cube",
|
||||
--on_activate = function(self, staticdata)
|
||||
--self.object:setsprite({x=0,y=0}, 1, 0, true)
|
||||
--self.object:setvelocity({x=-3, y=0, z=0})
|
||||
--end,
|
||||
|
||||
on_punch = function(self, hitter)
|
||||
self.object:remove()
|
||||
@ -73,7 +108,7 @@ minetest.register_entity("mesecons_movestones:movestone_entity", {
|
||||
self.object:setvelocity({x=direction.x*3, y=direction.y*3, z=direction.z*3})
|
||||
|
||||
mesecon:mvps_push(pos, direction)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -85,28 +120,6 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:register_on_signal_on(function (pos, node)
|
||||
if node.name=="mesecons_movestones:movestone" then
|
||||
local direction=mesecon:get_movestone_direction(pos)
|
||||
if not direction then return end
|
||||
local checknode={}
|
||||
local collpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
repeat -- Check if it collides with a stopper
|
||||
collpos={x=collpos.x+direction.x, y=collpos.y+direction.y, z=collpos.z+direction.z}
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
minetest.env:remove_node(pos)
|
||||
nodeupdate(pos)
|
||||
minetest.env:add_entity(pos, "mesecons_movestones:movestone_entity")
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
-- STICKY_MOVESTONE
|
||||
@ -118,8 +131,36 @@ minetest.register_node("mesecons_movestones:sticky_movestone", {
|
||||
legacy_facedir_simple = true,
|
||||
groups = {cracky=3},
|
||||
description="Sticky Movestone",
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
local direction=mesecon:get_movestone_direction(pos)
|
||||
if not direction then return end
|
||||
local checknode={}
|
||||
local collpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
repeat -- Check if it collides with a stopper
|
||||
collpos = addPosRule(collpos, direction)
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
repeat -- Check if it collides with a stopper (pull direction)
|
||||
collpos={x=collpos.x-direction.x, y=collpos.y-direction.y, z=collpos.z-direction.z}
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
minetest.env:remove_node(pos)
|
||||
mesecon:update_autoconnect(pos)
|
||||
minetest.env:add_entity(pos, "mesecons_movestones:sticky_movestone_entity")
|
||||
end
|
||||
}}
|
||||
})
|
||||
mesecon:register_effector("mesecons_movestones:sticky_movestone", "mesecons_movestones:sticky_movestone")
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_movestones:sticky_movestone" 2',
|
||||
@ -146,8 +187,6 @@ minetest.register_entity("mesecons_movestones:sticky_movestone_entity", {
|
||||
local direction=mesecon:get_movestone_direction(colp)
|
||||
|
||||
if not direction then
|
||||
--or (minetest.env:get_node_or_nil(pos).name ~="air"
|
||||
--and minetest.env:get_node_or_nil(pos).name ~= nil) then
|
||||
minetest.env:add_node(pos, {name="mesecons_movestones:sticky_movestone"})
|
||||
self.object:remove()
|
||||
return
|
||||
@ -159,49 +198,5 @@ minetest.register_entity("mesecons_movestones:sticky_movestone_entity", {
|
||||
|
||||
--STICKY
|
||||
mesecon:mvps_pull_all(pos, direction)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
mesecon:register_on_signal_on(function (pos, node)
|
||||
if node.name=="mesecons_movestones:sticky_movestone" then
|
||||
local direction=mesecon:get_movestone_direction(pos)
|
||||
if not direction then return end
|
||||
local checknode={}
|
||||
local collpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
repeat -- Check if it collides with a stopper
|
||||
collpos={x=collpos.x+direction.x, y=collpos.y+direction.y, z=collpos.z+direction.z}
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
repeat -- Check if it collides with a stopper (pull direction)
|
||||
collpos={x=collpos.x-direction.x, y=collpos.y-direction.y, z=collpos.z-direction.z}
|
||||
checknode=minetest.env:get_node(collpos)
|
||||
if mesecon:is_mvps_stopper(checknode.name) then
|
||||
return
|
||||
end
|
||||
until checknode.name=="air"
|
||||
or checknode.name=="ignore"
|
||||
or not(minetest.registered_nodes[checknode.name].liquidtype == "none")
|
||||
minetest.env:remove_node(pos)
|
||||
nodeupdate(pos)
|
||||
minetest.env:add_entity(pos, "mesecons_movestones:sticky_movestone_entity")
|
||||
end
|
||||
end)
|
||||
|
||||
mesecon:add_rules("movestone", {
|
||||
{x=0, y=1, z=-1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=-1, z=-1},
|
||||
{x=0, y=1, z=1},
|
||||
{x=0, y=-1, z=1},
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=1, y=1, z=0},
|
||||
{x=1, y=-1, z=0},
|
||||
{x=-1, y=1, z=0},
|
||||
{x=-1, y=-1, z=0},
|
||||
{x=-1, y=0, z=0}})
|
||||
|
@ -1,15 +1,25 @@
|
||||
minetest.register_node("mesecons_noteblock:noteblock", {
|
||||
description = "Noteblock",
|
||||
tiles = {"mesecons_noteblock.png"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
||||
drawtype = "allfaces_optional",
|
||||
visual_scale = 1.3,
|
||||
paramtype="light",
|
||||
after_place_node = function(pos)
|
||||
minetest.env:add_node(pos, {name="mesecons_noteblock:noteblock", param2=0})
|
||||
end
|
||||
end,
|
||||
on_punch = function (pos, node) -- change sound when punched
|
||||
local param2 = node.param2+1
|
||||
if param2==12 then param2=0 end
|
||||
minetest.env:add_node(pos, {name = node.name, param2 = param2})
|
||||
mesecon.noteblock_play(pos, param2)
|
||||
end,
|
||||
mesecons = {effector = { -- play sound when activated
|
||||
action_on = function (pos, node)
|
||||
mesecon.noteblock_play(pos, node.param2)
|
||||
end
|
||||
}}
|
||||
})
|
||||
mesecon:register_effector("mesecons_noteblock:noteblock", "mesecons_noteblock:noteblock")
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_noteblock:noteblock" 1',
|
||||
@ -20,15 +30,6 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_on_punchnode(function (pos, node)
|
||||
if node.name=="mesecons_noteblock:noteblock" then
|
||||
local param2 = node.param2+1
|
||||
if param2==12 then param2=0 end
|
||||
minetest.env:add_node(pos, {name=node.name, param2=param2})
|
||||
mesecon.noteblock_play(pos, param2)
|
||||
end
|
||||
end)
|
||||
|
||||
mesecon.noteblock_play = function (pos, param2)
|
||||
local soundname
|
||||
if param2==8 then
|
||||
@ -75,9 +76,3 @@ mesecon.noteblock_play = function (pos, param2)
|
||||
minetest.sound_play(soundname,
|
||||
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||
end
|
||||
|
||||
mesecon:register_on_signal_on(function(pos, node)
|
||||
if node.name=="mesecons_noteblock:noteblock" then
|
||||
mesecon.noteblock_play(pos, node.param2)
|
||||
end
|
||||
end)
|
||||
|
@ -1,5 +1,11 @@
|
||||
--PISTONS
|
||||
|
||||
local update = function(pos, node)
|
||||
local timer = minetest.env:get_node_timer(pos)
|
||||
timer:stop()
|
||||
timer:start(0)
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_pistons:piston_normal", {
|
||||
description = "Piston",
|
||||
tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_side.png"},
|
||||
@ -25,8 +31,10 @@ minetest.register_node("mesecons_pistons:piston_normal", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
mesecons = {effector={
|
||||
action_change = update
|
||||
}}
|
||||
})
|
||||
mesecon:register_effector("mesecons_pistons:piston_normal", "mesecons_pistons:piston_normal")
|
||||
|
||||
minetest.register_node("mesecons_pistons:piston_sticky", {
|
||||
description = "Sticky Piston",
|
||||
@ -53,8 +61,10 @@ minetest.register_node("mesecons_pistons:piston_sticky", {
|
||||
end
|
||||
return false
|
||||
end,
|
||||
mesecons = {effector={
|
||||
action_change = update
|
||||
}}
|
||||
})
|
||||
mesecon:register_effector("mesecons_pistons:piston_sticky", "mesecons_pistons:piston_sticky")
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_pistons:piston_normal" 2',
|
||||
@ -127,18 +137,6 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", {
|
||||
mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_normal")
|
||||
mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_sticky")
|
||||
|
||||
local update = function(pos, node)
|
||||
if node.name ~= "mesecons_pistons:piston_normal" and node.name ~= "mesecons_pistons:piston_sticky" then
|
||||
return
|
||||
end
|
||||
|
||||
local timer = minetest.env:get_node_timer(pos)
|
||||
timer:stop()
|
||||
timer:start(0)
|
||||
end
|
||||
mesecon:register_on_signal_on(update) --push action
|
||||
mesecon:register_on_signal_off(update) --pull action
|
||||
|
||||
function mesecon:piston_push(pos)
|
||||
local node = minetest.env:get_node(pos)
|
||||
local dir = mesecon:piston_get_direction(node)
|
||||
|
@ -1,4 +1,5 @@
|
||||
-- The POWER_PLANT
|
||||
-- The POWER_PLANT
|
||||
-- Just emits power. always.
|
||||
|
||||
minetest.register_node("mesecons_powerplant:power_plant", {
|
||||
drawtype = "plantlike",
|
||||
@ -14,6 +15,9 @@ minetest.register_node("mesecons_powerplant:power_plant", {
|
||||
type = "fixed",
|
||||
fixed = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
||||
},
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -24,5 +28,3 @@ minetest.register_craft({
|
||||
{'"default:sapling"'},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_powerplant:power_plant")
|
||||
|
@ -25,7 +25,7 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_wood_off", {
|
||||
local objpos=obj:getpos()
|
||||
if objpos.y>pos.y-1 and objpos.y<pos.y then
|
||||
minetest.env:add_node(pos, {name="mesecons_pressureplates:pressure_plate_wood_on"})
|
||||
mesecon:receptor_on(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_on(pos)
|
||||
end
|
||||
end
|
||||
return true
|
||||
@ -57,7 +57,7 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_wood_on", {
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
if objs[1]==nil then
|
||||
minetest.env:add_node(pos, {name="mesecons_pressureplates:pressure_plate_wood_off"})
|
||||
mesecon:receptor_off(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_off(pos)
|
||||
end
|
||||
return true
|
||||
end,
|
||||
@ -92,7 +92,7 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_stone_off", {
|
||||
type = "fixed",
|
||||
fixed = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 },
|
||||
},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3, mesecon = 2},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3},
|
||||
description="Stone Pressure Plate",
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
@ -101,7 +101,7 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_stone_off", {
|
||||
local objpos=obj:getpos()
|
||||
if objpos.y>pos.y-1 and objpos.y<pos.y then
|
||||
minetest.env:add_node(pos, {name="mesecons_pressureplates:pressure_plate_stone_on"})
|
||||
mesecon:receptor_on(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_on(pos)
|
||||
end
|
||||
end
|
||||
return true
|
||||
@ -110,6 +110,10 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_stone_off", {
|
||||
on_construct = function(pos)
|
||||
minetest.env:get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL)
|
||||
end,
|
||||
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_pressureplates:pressure_plate_stone_on", {
|
||||
@ -126,14 +130,14 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_stone_on", {
|
||||
type = "fixed",
|
||||
fixed = { -7/16, -8/16, -7/16, 7/16, -31/64, 7/16 },
|
||||
},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1, mesecon = 2},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1},
|
||||
drop='"mesecons_pressureplates:pressure_plate_stone_off" 1',
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 1)
|
||||
if objs[1]==nil then
|
||||
minetest.env:add_node(pos, {name="mesecons_pressureplates:pressure_plate_stone_off"})
|
||||
mesecon:receptor_off(pos, mesecon:get_rules("pressureplate"))
|
||||
mesecon:receptor_off(pos)
|
||||
end
|
||||
return true
|
||||
end,
|
||||
@ -141,6 +145,10 @@ minetest.register_node("mesecons_pressureplates:pressure_plate_stone_on", {
|
||||
on_construct = function(pos)
|
||||
minetest.env:get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL)
|
||||
end,
|
||||
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -149,9 +157,3 @@ minetest.register_craft({
|
||||
{'"default:cobble"', '"default:cobble"'},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_pressureplates:pressure_plate_wood_on", mesecon:get_rules("pressureplate"))
|
||||
mesecon:add_receptor_node_off("mesecons_pressureplates:pressure_plate_wood_off", mesecon:get_rules("pressureplate"))
|
||||
|
||||
mesecon:add_receptor_node("mesecons_pressureplates:pressure_plate_stone_on", mesecon:get_rules("pressureplate"))
|
||||
mesecon:add_receptor_node_off("mesecons_pressureplates:pressure_plate_stone_off", mesecon:get_rules("pressureplate"))
|
||||
|
@ -3,12 +3,16 @@
|
||||
minetest.register_node("mesecons_random:removestone", {
|
||||
tiles = {"jeija_removestone.png"},
|
||||
inventory_image = minetest.inventorycube("jeija_removestone_inv.png"),
|
||||
groups = {cracky=3, mesecon=2},
|
||||
groups = {cracky=3},
|
||||
description="Removestone",
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
minetest.env:remove_node(pos)
|
||||
mesecon:update_autoconnect(pos)
|
||||
end
|
||||
}}
|
||||
})
|
||||
|
||||
mesecon:register_effector(nil, "mesecons_random:removestone")
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'mesecons_random:removestone 4',
|
||||
recipe = {
|
||||
@ -18,12 +22,6 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:register_on_signal_on(function(pos, node)
|
||||
if node.name == "mesecons_random:removestone" then
|
||||
minetest.env:remove_node(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
-- GHOSTSTONE
|
||||
|
||||
minetest.register_node("mesecons_random:ghoststone", {
|
||||
@ -31,8 +29,13 @@ minetest.register_node("mesecons_random:ghoststone", {
|
||||
tiles = {"jeija_ghoststone.png"},
|
||||
is_ground_content = true,
|
||||
inventory_image = minetest.inventorycube("jeija_ghoststone_inv.png"),
|
||||
groups = {cracky=3, mesecon=2},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
minetest.env:add_node(pos, {name="mesecons_random:ghoststone_active"})
|
||||
end
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_random:ghoststone_active", {
|
||||
@ -41,10 +44,13 @@ minetest.register_node("mesecons_random:ghoststone_active", {
|
||||
walkable = false,
|
||||
diggable = false,
|
||||
sunlight_propagates = true,
|
||||
groups = {mesecon=2},
|
||||
mesecons = {effector = {
|
||||
action_off = function (pos, node)
|
||||
minetest.env:add_node(pos, {name="mesecons_random:ghoststone"})
|
||||
end
|
||||
}}
|
||||
})
|
||||
|
||||
mesecon:register_effector("mesecons_random:ghoststone_active", "mesecons_random:ghoststone")
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'mesecons_random:ghoststone 4',
|
||||
@ -54,17 +60,3 @@ minetest.register_craft({
|
||||
{"default:steel_ingot", "default:cobble", "default:steel_ingot"},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:register_on_signal_on(function(pos, node)
|
||||
if node.name == "mesecons_random:ghoststone" then
|
||||
minetest.env:add_node(pos, {name="mesecons_random:ghoststone_active"})
|
||||
nodeupdate(pos)
|
||||
end
|
||||
end)
|
||||
|
||||
mesecon:register_on_signal_off(function(pos, node)
|
||||
if node.name == "mesecons_random:ghoststone_active" then
|
||||
minetest.env:add_node(pos, {name="mesecons_random:ghoststone"})
|
||||
nodeupdate(pos)
|
||||
end
|
||||
end)
|
@ -5,6 +5,19 @@ rcvboxes = {
|
||||
{ -3/32, -17/32 , -7/16+0.002 , 3/32, -13/32, 16/32+0.001 } -- the horizontal wire
|
||||
}
|
||||
|
||||
local receiver_get_rules = function (node)
|
||||
local rules = { {x = 1, y = 0, z = 0},
|
||||
{x = -2, y = 0, z = 0}}
|
||||
if node.param2 == 2 then
|
||||
rules = mesecon:rotate_rules_left(rules)
|
||||
elseif node.param2 == 3 then
|
||||
rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
|
||||
elseif node.param2 == 0 then
|
||||
rules = mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_receiver:receiver_on", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
@ -26,9 +39,13 @@ minetest.register_node("mesecons_receiver:receiver_on", {
|
||||
type = "fixed",
|
||||
fixed = rcvboxes
|
||||
},
|
||||
groups = {dig_immediate = 3, mesecon = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
drop = "mesecons:wire_00000000_off",
|
||||
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.on,
|
||||
rules = receiver_get_rules,
|
||||
offstate = "mesecons_receiver:receiver_off"
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_receiver:receiver_off", {
|
||||
@ -53,8 +70,13 @@ minetest.register_node("mesecons_receiver:receiver_off", {
|
||||
type = "fixed",
|
||||
fixed = rcvboxes
|
||||
},
|
||||
groups = {dig_immediate = 3, mesecon = 3, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
drop = "mesecons:wire_00000000_off",
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.off,
|
||||
rules = receiver_get_rules,
|
||||
onstate = "mesecons_receiver:receiver_on"
|
||||
}}
|
||||
})
|
||||
|
||||
mesecon:add_rules("receiver_pos", {{x = 2, y = 0, z = 0}})
|
||||
@ -65,34 +87,6 @@ mesecon:add_rules("receiver_pos_all", {
|
||||
{x = 0, y = 0, z = 2},
|
||||
{x = 0, y = 0, z =-2}})
|
||||
|
||||
mesecon:add_rules("mesecon_receiver", {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x = -2, y = 0, z = 0},})
|
||||
|
||||
mesecon:add_rules("mesecon_receiver_all", {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x =-2, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},
|
||||
{x = 2, y = 0, z = 0},
|
||||
{x = 0, y = 0, z = 1},
|
||||
{x = 0, y = 0, z =-2},
|
||||
{x = 1, y = 0, z =-1},
|
||||
{x =-2, y = 0, z = 2},})
|
||||
|
||||
function receiver_get_rules(param2)
|
||||
local rules = mesecon:get_rules("mesecon_receiver")
|
||||
if param2 == 2 then
|
||||
rules = mesecon:rotate_rules_left(rules)
|
||||
elseif param2 == 3 then
|
||||
rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
|
||||
elseif param2 == 0 then
|
||||
rules = mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon:register_conductor("mesecons_receiver:receiver_on", "mesecons_receiver:receiver_off", mesecon:get_rules("mesecon_receiver_all"), receiver_get_rules)
|
||||
|
||||
function mesecon:receiver_get_pos_from_rcpt(pos, param2)
|
||||
local rules = mesecon:get_rules("receiver_pos")
|
||||
if param2 == nil then param2 = minetest.env:get_node(pos).param2 end
|
||||
|
@ -21,8 +21,10 @@ minetest.register_node("mesecons_solarpanel:solar_panel_on", {
|
||||
wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 },
|
||||
},
|
||||
drop = "mesecons_solarpanel:solar_panel_off",
|
||||
groups = {dig_immediate=3, mesecon = 2, not_in_creative_inventory = 1},
|
||||
description="Solar Panel",
|
||||
groups = {dig_immediate=3, not_in_creative_inventory = 1},
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on
|
||||
}}
|
||||
})
|
||||
|
||||
-- Solar Panel
|
||||
@ -47,8 +49,11 @@ minetest.register_node("mesecons_solarpanel:solar_panel_off", {
|
||||
wall_top = { -7/16, 7/16, -7/16, 7/16, 8/16, 7/16 },
|
||||
wall_side = { -8/16, -7/16, -7/16, -7/16, 7/16, 7/16 },
|
||||
},
|
||||
groups = {dig_immediate=3, mesecon = 2},
|
||||
groups = {dig_immediate=3},
|
||||
description="Solar Panel",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -86,6 +91,3 @@ minetest.register_abm(
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_solarpanel:solar_panel_on")
|
||||
mesecon:add_receptor_node_off("mesecons_solarpanel:solar_panel_off")
|
||||
|
@ -1,30 +1,74 @@
|
||||
--MESECON TORCHES
|
||||
|
||||
local torch_get_rules = function(node)
|
||||
local rules = {
|
||||
{x=1, y=0, z=0},
|
||||
{x=0, y=0, z=1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=1, z=0},
|
||||
{x=0, y=-1, z=0}}
|
||||
if node.param2 == 5 then
|
||||
rules=mesecon:rotate_rules_right(rules)
|
||||
elseif node.param2 == 2 then
|
||||
rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
|
||||
elseif node.param2 == 4 then
|
||||
rules=mesecon:rotate_rules_left(rules)
|
||||
elseif node.param2 == 1 then
|
||||
rules=mesecon:rotate_rules_down(rules)
|
||||
elseif node.param2 == 0 then
|
||||
rules=mesecon:rotate_rules_up(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
local torch_get_input_rules = function(node)
|
||||
local rules = {x=0, y=0, z=0}
|
||||
|
||||
if node.param2 == 4 then
|
||||
rules.z = -2
|
||||
elseif node.param2 == 2 then
|
||||
rules.x = -2
|
||||
elseif node.param2 == 5 then
|
||||
rules.z = 2
|
||||
elseif node.param2 == 3 then
|
||||
rules.x = 2
|
||||
elseif node.param2 == 1 then
|
||||
rules.y = 2
|
||||
elseif node.param2 == 0 then
|
||||
rules.y = -2
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_torch:mesecon_torch_on" 4',
|
||||
recipe = {
|
||||
{"group:mesecon_conductor_craftable"},
|
||||
{"default:stick"},
|
||||
}
|
||||
output = '"mesecons_torch:mesecon_torch_on" 4',
|
||||
recipe = {
|
||||
{"group:mesecon_conductor_craftable"},
|
||||
{"default:stick"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_torch:mesecon_torch_off", {
|
||||
drawtype = "torchlike",
|
||||
tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
|
||||
inventory_image = "jeija_torches_off.png",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
paramtype2 = "wallmounted",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
|
||||
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
||||
wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
|
||||
},
|
||||
legacy_wallmounted = true,
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1, mesecon = 2},
|
||||
drop = '"mesecons_torch:mesecon_torch_on" 1',
|
||||
description="Mesecon Torch",
|
||||
drawtype = "torchlike",
|
||||
tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
|
||||
inventory_image = "jeija_torches_off.png",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
paramtype2 = "wallmounted",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
|
||||
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
||||
wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
|
||||
},
|
||||
legacy_wallmounted = true,
|
||||
groups = {dig_immediate=3,not_in_creative_inventory=1},
|
||||
drop = '"mesecons_torch:mesecon_torch_on" 1',
|
||||
description="Mesecon Torch",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off,
|
||||
rules = torch_get_rules
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_torch:mesecon_torch_on", {
|
||||
@ -43,9 +87,13 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", {
|
||||
wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
|
||||
},
|
||||
legacy_wallmounted = true,
|
||||
groups = {dig_immediate=3, mesecon = 2},
|
||||
groups = {dig_immediate=3},
|
||||
light_source = LIGHT_MAX-5,
|
||||
description="Mesecon Torch",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on,
|
||||
rules = torch_get_rules
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
@ -53,70 +101,24 @@ minetest.register_abm({
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local rules=mesecon.torch_get_rules(minetest.env:get_node(pos).param2)
|
||||
local pa = mesecon.torch_get_input_rules(node.param2)
|
||||
local node = minetest.env:get_node(pos)
|
||||
local pa = torch_get_input_rules(node)
|
||||
|
||||
local postc = {x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}
|
||||
if mesecon:is_power_on(postc) then
|
||||
if node.name ~= "mesecons_torch:mesecon_torch_off" then
|
||||
minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_off",param2=node.param2})
|
||||
mesecon:receptor_off(pos, rules_string)
|
||||
mesecon:receptor_off(pos, torch_get_rules(node))
|
||||
end
|
||||
else
|
||||
if node.name ~= "mesecons_torch:mesecon_torch_on" then
|
||||
minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_on",param2=node.param2})
|
||||
mesecon:receptor_on(pos, rules_string)
|
||||
mesecon:receptor_on(pos, torch_get_rules(node))
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
mesecon.torch_get_rules = function(param2)
|
||||
local rules=mesecon:get_rules("mesecontorch")
|
||||
if param2 == 5 then
|
||||
rules=mesecon:rotate_rules_right(rules)
|
||||
elseif param2 == 2 then
|
||||
rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
|
||||
elseif param2 == 4 then
|
||||
rules=mesecon:rotate_rules_left(rules)
|
||||
elseif param2 == 1 then
|
||||
rules=mesecon:rotate_rules_down(rules)
|
||||
elseif param2 == 0 then
|
||||
rules=mesecon:rotate_rules_up(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon.torch_get_input_rules = function(param2)
|
||||
local rules = {x=0, y=0, z=0}
|
||||
|
||||
if param2 == 4 then
|
||||
rules.z = -2
|
||||
elseif param2 == 2 then
|
||||
rules.x = -2
|
||||
elseif param2 == 5 then
|
||||
rules.z = 2
|
||||
elseif param2 == 3 then
|
||||
rules.x = 2
|
||||
elseif param2 == 1 then
|
||||
rules.y = 2
|
||||
elseif param2 == 0 then
|
||||
rules.y = -2
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon:add_rules("mesecontorch",
|
||||
{{x=1, y=0, z=0},
|
||||
{x=0, y=0, z=1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=1, z=0},
|
||||
{x=0, y=-1, z=0}})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_torch:mesecon_torch_on", nil, mesecon.torch_get_rules)
|
||||
mesecon:add_receptor_node_off("mesecons_torch:mesecon_torch_off", nil, mesecon.torch_get_rules)
|
||||
mesecon:register_effector("mesecons_torch:mesecon_torch_on","mesecons_torch:mesecon_torch_off", nil, mesecon.torch_get_input_rules)
|
||||
|
||||
-- Param2 Table (Block Attached To)
|
||||
-- 5 = z-1
|
||||
-- 3 = x-1
|
||||
|
@ -1,4 +1,22 @@
|
||||
-- WALL LEVER
|
||||
local walllever_get_rules = function(node)
|
||||
local rules = {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x = 1, y = 1, z = 0},
|
||||
{x = 1, y =-1, z = 0},
|
||||
{x = 1, y =-1, z = 1},
|
||||
{x = 1, y =-1, z =-1},
|
||||
{x = 2, y = 0, z = 0}}
|
||||
if node.param2 == 2 then
|
||||
rules=mesecon:rotate_rules_left(rules)
|
||||
elseif node.param2 == 3 then
|
||||
rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
|
||||
elseif node.param2 == 0 then
|
||||
rules=mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_walllever:wall_lever_off", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
@ -27,8 +45,16 @@ minetest.register_node("mesecons_walllever:wall_lever_off", {
|
||||
{ -2/16, -1/16, 3/16, 2/16, 1/16, 4/16 }, -- the lever "hinge"
|
||||
{ -1/16, -8/16, 4/16, 1/16, 0, 6/16 }} -- the lever itself.
|
||||
},
|
||||
groups = {dig_immediate=2, mesecon = 3, mesecon_needs_receiver = 1},
|
||||
groups = {dig_immediate=2, mesecon_needs_receiver = 1},
|
||||
description="Lever",
|
||||
on_punch = function (pos, node)
|
||||
mesecon:swap_node(pos, "mesecons_walllever:wall_lever_on")
|
||||
mesecon:receptor_on(pos, walllever_get_rules(node))
|
||||
end,
|
||||
mesecon = {receptor = {
|
||||
rules = walllever_get_rules,
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
minetest.register_node("mesecons_walllever:wall_lever_on", {
|
||||
drawtype = "nodebox",
|
||||
@ -61,19 +87,16 @@ minetest.register_node("mesecons_walllever:wall_lever_on", {
|
||||
groups = {dig_immediate=2,not_in_creative_inventory=1, mesecon = 3, mesecon_needs_receiver = 1},
|
||||
drop = '"mesecons_walllever:wall_lever_off" 1',
|
||||
description="Lever",
|
||||
on_punch = function (pos, node)
|
||||
mesecon:swap_node(pos, "mesecons_walllever:wall_lever_off")
|
||||
mesecon:receptor_off(pos, walllever_get_rules(node))
|
||||
end,
|
||||
mesecon = {receptor = {
|
||||
rules = walllever_get_rules,
|
||||
state = mesecon.state.on
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_on_punchnode(function(pos, node, puncher)
|
||||
if node.name == "mesecons_walllever:wall_lever_off" then
|
||||
minetest.env:add_node(pos, {name="mesecons_walllever:wall_lever_on",param2=node.param2})
|
||||
mesecon:receptor_on(pos, mesecon.walllever_get_rules(node.param2))
|
||||
end
|
||||
if node.name == "mesecons_walllever:wall_lever_on" then
|
||||
minetest.env:add_node(pos, {name="mesecons_walllever:wall_lever_off",param2=node.param2})
|
||||
mesecon:receptor_off(pos, mesecon.walllever_get_rules(node.param2))
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_walllever:wall_lever_off" 2',
|
||||
recipe = {
|
||||
@ -82,29 +105,3 @@ minetest.register_craft({
|
||||
{'"default:stick"'},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_rules("walllever", {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x = 1, y = 1, z = 0},
|
||||
{x = 1, y =-1, z = 0},
|
||||
{x = 1, y =-1, z = 1},
|
||||
{x = 1, y =-1, z =-1},
|
||||
{x = 2, y = 0, z = 0},})
|
||||
|
||||
|
||||
mesecon.walllever_get_rules = function(param2)
|
||||
local rules=mesecon:get_rules("walllever")
|
||||
if param2 == 2 then
|
||||
rules=mesecon:rotate_rules_left(rules)
|
||||
end
|
||||
if param2 == 3 then
|
||||
rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
|
||||
end
|
||||
if param2 == 0 then
|
||||
rules=mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon:add_receptor_node("mesecons_walllever:wall_lever_on", nil, mesecon.walllever_get_rules)
|
||||
mesecon:add_receptor_node_off("mesecons_walllever:wall_lever_off", nil, mesecon.walllever_get_rules)
|
||||
|
Loading…
Reference in New Issue
Block a user