2015-06-29 19:55:56 +02:00
--MESECON TORCHES
local rotate_torch_rules = function ( rules , param2 )
2018-01-22 19:58:38 +01:00
if param2 == 1 then
return rules
elseif param2 == 5 then
2017-07-31 00:12:21 +02:00
return mesecon.rotate_rules_right ( rules )
2015-06-29 19:55:56 +02:00
elseif param2 == 2 then
2017-07-31 00:12:21 +02:00
return mesecon.rotate_rules_right ( mesecon.rotate_rules_right ( rules ) ) --180 degrees
2015-06-29 19:55:56 +02:00
elseif param2 == 4 then
2017-07-31 00:12:21 +02:00
return mesecon.rotate_rules_left ( rules )
2015-06-29 19:55:56 +02:00
elseif param2 == 0 then
2018-01-22 19:58:38 +01:00
return rules
2015-06-29 19:55:56 +02:00
else
return rules
end
end
2018-01-22 19:58:38 +01:00
local torch_get_output_rules = function ( node )
if node.param2 == 1 then
return {
{ x = - 1 , y = 0 , z = 0 } ,
{ x = 1 , y = 0 , z = 0 } ,
{ x = 0 , y = 1 , z = 0 , spread = true } ,
{ x = 0 , y = 0 , z = - 1 } ,
{ x = 0 , y = 0 , z = 1 } ,
}
else
return rotate_torch_rules ( {
{ x = 1 , y = 0 , z = 0 } ,
{ x = 0 , y = - 1 , z = 0 } ,
{ x = 0 , y = 1 , z = 0 , spread = true } ,
{ x = 0 , y = 1 , z = 0 } ,
{ x = 0 , y = 0 , z = - 1 } ,
{ x = 0 , y = 0 , z = 1 } ,
} , node.param2 )
end
2018-01-13 04:08:40 +01:00
end
2015-06-29 19:55:56 +02:00
local torch_get_input_rules = function ( node )
2018-01-22 19:58:38 +01:00
if node.param2 == 1 then
return { { x = 0 , y = - 1 , z = 0 } }
else
return rotate_torch_rules ( { { x = - 1 , y = 0 , z = 0 } } , node.param2 )
end
2015-06-29 19:55:56 +02:00
end
2018-01-22 21:32:07 +01:00
local torch_action_on = function ( pos , node )
2018-01-22 21:11:10 +01:00
if node.name == " mesecons_torch:mesecon_torch_on " then
minetest.set_node ( pos , { name = " mesecons_torch:mesecon_torch_off " , param2 = node.param2 } )
mesecon.receptor_off ( pos , torch_get_output_rules ( node ) )
elseif node.name == " mesecons_torch:mesecon_torch_on_wall " then
minetest.set_node ( pos , { name = " mesecons_torch:mesecon_torch_off_wall " , param2 = node.param2 } )
mesecon.receptor_off ( pos , torch_get_output_rules ( node ) )
2018-01-22 21:32:07 +01:00
end
end
local torch_action_off = function ( pos , node )
if node.name == " mesecons_torch:mesecon_torch_off " then
2018-01-22 21:11:10 +01:00
minetest.set_node ( pos , { name = " mesecons_torch:mesecon_torch_on " , param2 = node.param2 } )
mesecon.receptor_on ( pos , torch_get_output_rules ( node ) )
elseif node.name == " mesecons_torch:mesecon_torch_off_wall " then
minetest.set_node ( pos , { name = " mesecons_torch:mesecon_torch_on_wall " , param2 = node.param2 } )
mesecon.receptor_on ( pos , torch_get_output_rules ( node ) )
end
end
2015-06-29 19:55:56 +02:00
minetest.register_craft ( {
2017-01-05 04:39:36 +01:00
output = ' mesecons_torch:mesecon_torch_on ' ,
2015-06-29 19:55:56 +02:00
recipe = {
2017-01-09 18:45:34 +01:00
{ " mesecons:redstone " } ,
2017-01-31 23:32:56 +01:00
{ " mcl_core:stick " } , }
2015-06-29 19:55:56 +02:00
} )
2017-03-11 22:00:06 +01:00
mcl_torches.register_torch ( " mesecon_torch_off " , " Redstone Torch (off) " ,
nil ,
nil ,
" jeija_torches_off.png " ,
2017-02-10 15:38:53 +01:00
" mcl_torches_torch_floor.obj " , " mcl_torches_torch_wall.obj " ,
{ " jeija_torches_off.png " } ,
0 ,
2018-01-22 21:49:20 +01:00
{ dig_immediate = 3 , dig_by_water = 1 , redstone_torch = 2 , not_in_creative_inventory = 1 } ,
2017-02-11 18:46:23 +01:00
mcl_sounds.node_sound_wood_defaults ( ) ,
2017-02-10 15:38:53 +01:00
{
2018-01-22 21:11:10 +01:00
mesecons = {
receptor = {
state = mesecon.state . off ,
rules = torch_get_output_rules ,
} ,
effector = {
state = mesecon.state . on ,
rules = torch_get_input_rules ,
2018-01-22 21:32:07 +01:00
action_off = torch_action_off ,
2018-01-22 21:11:10 +01:00
} ,
} ,
2017-02-10 15:38:53 +01:00
drop = " mesecons_torch:mesecon_torch_on " ,
2017-03-02 19:53:53 +01:00
_doc_items_create_entry = false ,
2017-02-10 15:38:53 +01:00
}
)
2015-06-29 19:55:56 +02:00
2017-03-11 22:00:06 +01:00
mcl_torches.register_torch ( " mesecon_torch_on " , " Redstone Torch " ,
2018-01-22 22:19:45 +01:00
" A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything. " ,
2017-03-11 22:00:06 +01:00
[ [ Redstone torches can generally be placed at the side and on the top of full solid opaque blocks . The following exceptions apply :
• Glass , fence , wall , hopper : Can only be placed on top
2017-06-05 21:44:44 +02:00
• Upside - down slab / stair : Can only be placed on top
2018-01-07 16:58:44 +01:00
• Soul sand , mob spawner : Placement possible
2017-03-11 22:00:06 +01:00
• Glowstone and pistons : No placement possible ] ] ,
2017-07-17 16:38:14 +02:00
" jeija_torches_on.png " ,
2017-02-10 15:38:53 +01:00
" mcl_torches_torch_floor.obj " , " mcl_torches_torch_wall.obj " ,
{ " jeija_torches_on.png " } ,
7 ,
2018-01-22 21:49:20 +01:00
{ dig_immediate = 3 , dig_by_water = 1 , redstone_torch = 1 } ,
2017-02-11 18:46:23 +01:00
mcl_sounds.node_sound_wood_defaults ( ) ,
2017-02-10 15:38:53 +01:00
{
2018-01-22 21:11:10 +01:00
mesecons = {
receptor = {
state = mesecon.state . on ,
rules = torch_get_output_rules
} ,
effector = {
state = mesecon.state . off ,
rules = torch_get_input_rules ,
2018-01-22 21:32:07 +01:00
action_on = torch_action_on ,
2018-01-22 21:11:10 +01:00
} ,
}
2017-02-10 15:38:53 +01:00
}
)
2015-06-29 19:55:56 +02:00
minetest.register_node ( " mesecons_torch:redstoneblock " , {
2017-01-04 06:20:13 +01:00
description = " Block of Redstone " ,
2017-03-11 03:56:29 +01:00
_doc_items_longdesc = " A block of redstone permanently supplies redstone power to its surrounding blocks. " ,
2017-02-13 14:52:37 +01:00
tiles = { " redstone_redstone_block.png " } ,
2015-06-29 19:55:56 +02:00
stack_max = 64 ,
2017-02-27 18:20:19 +01:00
groups = { pickaxey = 1 } ,
2017-02-11 18:46:23 +01:00
sounds = mcl_sounds.node_sound_stone_defaults ( ) ,
2017-01-04 22:36:51 +01:00
is_ground_content = false ,
2015-06-29 19:55:56 +02:00
mesecons = { receptor = {
state = mesecon.state . on ,
2018-01-13 01:49:28 +01:00
rules = mesecon.rules . alldirs ,
2015-06-29 19:55:56 +02:00
} } ,
2017-03-15 20:46:36 +01:00
_mcl_blast_resistance = 30 ,
_mcl_hardness = 5 ,
2015-06-29 19:55:56 +02:00
} )
minetest.register_craft ( {
output = " mesecons_torch:redstoneblock " ,
recipe = {
{ ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' } ,
{ ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' } ,
{ ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' , ' mesecons:wire_00000000_off ' } ,
}
} )
minetest.register_craft ( {
output = ' mesecons:wire_00000000_off 9 ' ,
recipe = {
{ ' mesecons_torch:redstoneblock ' } ,
}
} )
2017-03-21 04:27:50 +01:00
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mesecons_torch:mesecon_torch_on " , " nodes " , " mesecons_torch:mesecon_torch_off " )
doc.add_entry_alias ( " nodes " , " mesecons_torch:mesecon_torch_on " , " nodes " , " mesecons_torch:mesecon_torch_off_wall " )
end