2018-01-08 16:45:30 +00:00
local lever_get_output_rules = function ( node )
local rules = {
{ x = - 1 , y = 0 , z = 0 } ,
{ 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 } ,
}
local dir = minetest.facedir_to_dir ( node.param2 )
dir = vector.multiply ( dir , 2 )
table.insert ( rules , dir )
return rules
end
-- LEVER
2015-06-29 17:55:56 +00:00
minetest.register_node ( " mesecons_walllever:wall_lever_off " , {
2017-07-31 03:35:55 +00:00
drawtype = " mesh " ,
2015-06-29 17:55:56 +00:00
tiles = {
2017-07-31 03:35:55 +00:00
" jeija_wall_lever_lever_light_on.png " ,
2015-06-29 17:55:56 +00:00
} ,
inventory_image = " jeija_wall_lever.png " ,
wield_image = " jeija_wall_lever.png " ,
paramtype = " light " ,
paramtype2 = " facedir " ,
2017-07-31 03:35:55 +00:00
drawtype = " mesh " ,
mesh = " jeija_wall_lever_off.obj " ,
2015-06-29 17:55:56 +00:00
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " fixed " ,
2018-01-08 19:11:33 +00:00
fixed = { - 3 / 16 , - 4 / 16 , 2 / 16 , 3 / 16 , 4 / 16 , 8 / 16 } ,
2015-06-29 17:55:56 +00:00
} ,
2018-01-08 19:11:33 +00:00
groups = { handy = 1 , dig_by_water = 1 , destroy_by_lava_flow = 1 , dig_by_piston = 1 , attached_node_facedir = 1 } ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
2015-06-29 17:55:56 +00:00
description = " Lever " ,
2017-03-11 02:56:29 +00:00
_doc_items_longdesc = " A lever is a redstone component which can be flipped on and off. It supplies redstone power to the blocks behind while it is in the “on” state. " ,
_doc_items_usagehelp = " Right-click the lever to flip it on or off. " ,
2017-02-05 16:57:33 +00:00
on_rightclick = function ( pos , node )
2017-07-30 22:12:21 +00:00
minetest.swap_node ( pos , { name = " mesecons_walllever:wall_lever_on " , param2 = node.param2 } )
2018-01-08 20:00:36 +00:00
mesecon.receptor_on ( pos , lever_get_output_rules ( node ) )
2015-06-29 17:55:56 +00:00
minetest.sound_play ( " mesecons_lever " , { pos = pos } )
end ,
2018-01-08 16:45:30 +00:00
node_placement_prediction = " " ,
on_place = function ( itemstack , placer , pointed_thing )
if pointed_thing.type ~= " node " then
-- no interaction possible with entities
return itemstack
end
local under = pointed_thing.under
local node = minetest.get_node ( under )
local def = minetest.registered_nodes [ node.name ]
if not def then return end
local groups = def.groups
-- Check special rightclick action of pointed node
if def and def.on_rightclick then
if not placer : get_player_control ( ) . sneak then
return def.on_rightclick ( under , node , placer , itemstack ,
pointed_thing ) or itemstack , false
end
end
-- If the pointed node is buildable, let's look at the node *behind* that node
if def.buildable_to then
local dir = vector.subtract ( pointed_thing.above , pointed_thing.under )
local actual = vector.subtract ( under , dir )
local actualnode = minetest.get_node ( actual )
def = minetest.registered_nodes [ actualnode.name ]
groups = def.groups
end
-- Only allow placement on full-cube solid opaque nodes
if ( not groups ) or ( not groups.solid ) or ( not groups.opaque ) or ( def.node_box and def.node_box . type ~= " regular " ) then
return itemstack
end
local above = pointed_thing.above
2018-01-08 19:11:33 +00:00
local dir = vector.subtract ( under , above )
2018-01-08 16:45:30 +00:00
local tau = math.pi * 2
2018-01-08 19:11:33 +00:00
local wdir = minetest.dir_to_facedir ( dir , true )
if dir.y ~= 0 then
2018-01-08 16:45:30 +00:00
local yaw = placer : get_look_horizontal ( )
if ( yaw > tau / 8 and yaw < ( tau / 8 ) * 3 ) or ( yaw < ( tau / 8 ) * 7 and yaw > ( tau / 8 ) * 5 ) then
if dir.y == - 1 then
2018-01-08 19:11:33 +00:00
wdir = 13
2018-01-08 16:45:30 +00:00
else
2018-01-08 19:11:33 +00:00
wdir = 15
2018-01-08 16:45:30 +00:00
end
else
if dir.y == - 1 then
2018-01-08 19:11:33 +00:00
wdir = 10
2018-01-08 16:45:30 +00:00
else
2018-01-08 19:11:33 +00:00
wdir = 8
2018-01-08 16:45:30 +00:00
end
end
end
local idef = itemstack : get_definition ( )
local itemstack , success = minetest.item_place_node ( itemstack , placer , pointed_thing , wdir )
if success then
if idef.sounds and idef.sounds . place then
minetest.sound_play ( idef.sounds . place , { pos = above , gain = 1 } )
end
end
return itemstack
end ,
2017-07-31 03:35:55 +00:00
sounds = mcl_sounds.node_sound_stone_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2018-01-08 16:45:30 +00:00
rules = lever_get_output_rules ,
2015-06-29 17:55:56 +00:00
state = mesecon.state . off
2017-02-22 15:22:28 +00:00
} } ,
2018-01-08 16:45:30 +00:00
on_rotate = false ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 2.5 ,
2017-02-27 16:20:51 +00:00
_mcl_hardness = 0.5 ,
2015-06-29 17:55:56 +00:00
} )
minetest.register_node ( " mesecons_walllever:wall_lever_on " , {
2017-07-31 03:35:55 +00:00
drawtype = " mesh " ,
2015-06-29 17:55:56 +00:00
tiles = {
2017-07-31 03:35:55 +00:00
" jeija_wall_lever_lever_light_on.png " ,
2015-06-29 17:55:56 +00:00
} ,
inventory_image = " jeija_wall_lever.png " ,
paramtype = " light " ,
paramtype2 = " facedir " ,
2017-07-31 03:35:55 +00:00
mesh = " jeija_wall_lever_on.obj " ,
2015-06-29 17:55:56 +00:00
sunlight_propagates = true ,
walkable = false ,
selection_box = {
type = " fixed " ,
2018-01-08 19:11:33 +00:00
fixed = { - 3 / 16 , - 4 / 16 , 2 / 16 , 3 / 16 , 4 / 16 , 8 / 16 } ,
2015-06-29 17:55:56 +00:00
} ,
2018-01-08 19:11:33 +00:00
groups = { handy = 1 , not_in_creative_inventory = 1 , dig_by_water = 1 , destroy_by_lava_flow = 1 , dig_by_piston = 1 , attached_node_facedir = 1 } ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
2015-06-29 17:55:56 +00:00
drop = ' "mesecons_walllever:wall_lever_off" 1 ' ,
description = " Lever " ,
2017-03-11 02:56:29 +00:00
_doc_items_create_entry = false ,
2017-02-05 16:57:33 +00:00
on_rightclick = function ( pos , node )
2017-07-30 22:12:21 +00:00
minetest.swap_node ( pos , { name = " mesecons_walllever:wall_lever_off " , param2 = node.param2 } )
2018-01-08 20:00:36 +00:00
mesecon.receptor_off ( pos , lever_get_output_rules ( node ) )
2015-06-29 17:55:56 +00:00
minetest.sound_play ( " mesecons_lever " , { pos = pos } )
end ,
2017-07-31 03:35:55 +00:00
sounds = mcl_sounds.node_sound_stone_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2018-01-08 16:45:30 +00:00
rules = lever_get_output_rules ,
2015-06-29 17:55:56 +00:00
state = mesecon.state . on
2017-02-22 15:22:28 +00:00
} } ,
2018-01-08 16:45:30 +00:00
on_rotate = false ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 2.5 ,
2017-02-27 16:20:51 +00:00
_mcl_hardness = 0.5 ,
2015-06-29 17:55:56 +00:00
} )
minetest.register_craft ( {
output = ' mesecons_walllever:wall_lever_off ' ,
recipe = {
2017-01-31 22:32:56 +00:00
{ ' mcl_core:stick ' } ,
{ ' mcl_core:cobble ' } ,
2015-06-29 17:55:56 +00:00
}
} )
2017-03-21 03:27:50 +00:00
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mesecons_walllever:wall_lever_off " , " nodes " , " mesecons_walllever:wall_lever_on " )
end