2019-03-08 00:07:41 +00:00
local S = minetest.get_translator ( " mesecons_solarpanel " )
2018-01-13 02:37:41 +00:00
local boxes = { - 8 / 16 , - 8 / 16 , - 8 / 16 , 8 / 16 , - 2 / 16 , 8 / 16 }
2015-06-29 17:55:56 +00:00
2018-01-13 02:37:41 +00:00
-- Daylight Sensor
2015-06-29 17:55:56 +00:00
minetest.register_node ( " mesecons_solarpanel:solar_panel_on " , {
drawtype = " nodebox " ,
tiles = { " jeija_solar_panel.png " , " jeija_solar_panel.png " , " jeija_solar_panel_side.png " ,
" jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , } ,
wield_image = " jeija_solar_panel.png " ,
2017-02-14 19:52:34 +00:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 17:55:56 +00:00
paramtype = " light " ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
2015-06-29 17:55:56 +00:00
selection_box = {
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
drop = " mesecons_solarpanel:solar_panel_off " ,
2017-03-02 18:53:53 +00:00
_doc_items_create_entry = false ,
2017-03-20 20:39:39 +00:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2017-02-11 17:46:23 +00:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2017-09-14 00:20:47 +00:00
state = mesecon.state . on ,
2018-01-13 02:37:41 +00:00
rules = mesecon.rules . pplate ,
2017-01-28 11:21:43 +00:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 20:59:01 +00:00
local protname = clicker : get_player_name ( )
if minetest.is_protected ( pos , protname ) then
minetest.record_protection_violation ( pos , protname )
return
end
2017-01-28 11:21:43 +00:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_off " } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2017-01-28 11:21:43 +00:00
end ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 1 ,
2017-03-20 20:39:39 +00:00
_mcl_hardness = 0.2 ,
2015-06-29 17:55:56 +00:00
} )
minetest.register_node ( " mesecons_solarpanel:solar_panel_off " , {
drawtype = " nodebox " ,
tiles = { " jeija_solar_panel.png " , " jeija_solar_panel.png " , " jeija_solar_panel_side.png " ,
" jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , } ,
wield_image = " jeija_solar_panel.png " ,
2017-02-14 19:52:34 +00:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 17:55:56 +00:00
paramtype = " light " ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
selection_box = {
2015-06-29 17:55:56 +00:00
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-03-20 20:39:39 +00:00
groups = { handy = 1 , axey = 1 , material_wood = 1 } ,
2019-03-08 00:07:41 +00:00
description = S ( " Daylight Sensor " ) ,
2020-02-19 03:54:17 +00:00
_tt_help = S ( " Provides redstone power when in sunlight " ) .. " \n " .. S ( " Can be inverted " ) ,
2019-03-25 11:15:37 +00:00
_doc_items_longdesc = S ( " Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted. " ) .. " \n " ..
S ( " In inverted state, they provide redstone power when they are not in sunlight and no power otherwise. " ) ,
_doc_items_usagehelp = S ( " Use the daylight sensor to toggle its state. " ) ,
2017-02-11 17:46:23 +00:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2017-09-14 00:20:47 +00:00
state = mesecon.state . off ,
2018-01-13 02:37:41 +00:00
rules = mesecon.rules . pplate ,
2017-01-28 11:21:43 +00:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 20:59:01 +00:00
local protname = clicker : get_player_name ( )
if minetest.is_protected ( pos , protname ) then
minetest.record_protection_violation ( pos , protname )
return
end
2017-01-28 11:21:43 +00:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_on " } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2017-01-28 11:21:43 +00:00
end ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 1 ,
2017-03-20 20:39:39 +00:00
_mcl_hardness = 0.2 ,
2015-06-29 17:55:56 +00:00
} )
minetest.register_craft ( {
2017-01-10 01:25:10 +00:00
output = ' mesecons_solarpanel:solar_panel_off ' ,
2015-06-29 17:55:56 +00:00
recipe = {
2017-01-31 22:32:56 +00:00
{ ' mcl_core:glass ' , ' mcl_core:glass ' , ' mcl_core:glass ' } ,
2017-02-08 17:54:56 +00:00
{ ' mcl_nether:quartz ' , ' mcl_nether:quartz ' , ' mcl_nether:quartz ' } ,
2017-01-10 01:25:10 +00:00
{ ' group:wood_slab ' , ' group:wood_slab ' , ' group:wood_slab ' } ,
2015-06-29 17:55:56 +00:00
}
} )
2017-05-14 22:45:54 +00:00
minetest.register_abm ( {
label = " Daylight turns on solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_off " } ,
2015-06-29 17:55:56 +00:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 17:21:46 +00:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 17:55:56 +00:00
if light >= 12 and minetest.get_timeofday ( ) > 0.2 and minetest.get_timeofday ( ) < 0.8 then
2017-01-11 17:21:46 +00:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_on " , param2 = node.param2 } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2015-06-29 17:55:56 +00:00
end
end ,
} )
2017-05-14 22:45:54 +00:00
minetest.register_abm ( {
label = " Darkness turns off solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_on " } ,
2015-06-29 17:55:56 +00:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 17:21:46 +00:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 17:55:56 +00:00
if light < 12 then
2017-01-11 17:21:46 +00:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_off " , param2 = node.param2 } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2015-06-29 17:55:56 +00:00
end
end ,
} )
2018-01-13 02:37:41 +00:00
--- Inverted Daylight Sensor
2015-06-29 17:55:56 +00:00
minetest.register_node ( " mesecons_solarpanel:solar_panel_inverted_on " , {
drawtype = " nodebox " ,
tiles = { " jeija_solar_panel_inverted.png " , " jeija_solar_panel_inverted.png " , " jeija_solar_panel_side.png " ,
" jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , } ,
wield_image = " jeija_solar_panel_inverted.png " ,
2017-02-14 19:52:34 +00:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 17:55:56 +00:00
paramtype = " light " ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
2015-06-29 17:55:56 +00:00
selection_box = {
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-01-28 11:21:43 +00:00
drop = " mesecons_solarpanel:solar_panel_off " ,
2017-03-20 20:39:39 +00:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2017-03-02 18:53:53 +00:00
_doc_items_create_entry = false ,
2017-02-11 17:46:23 +00:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2018-01-13 02:37:41 +00:00
state = mesecon.state . on ,
rules = mesecon.rules . pplate ,
2017-01-28 11:21:43 +00:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 20:59:01 +00:00
local protname = clicker : get_player_name ( )
if minetest.is_protected ( pos , protname ) then
minetest.record_protection_violation ( pos , protname )
return
end
2017-01-28 11:21:43 +00:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_off " } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2017-01-28 11:21:43 +00:00
end ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 1 ,
2017-03-20 20:39:39 +00:00
_mcl_hardness = 0.2 ,
2015-06-29 17:55:56 +00:00
} )
minetest.register_node ( " mesecons_solarpanel:solar_panel_inverted_off " , {
drawtype = " nodebox " ,
tiles = { " jeija_solar_panel_inverted.png " , " jeija_solar_panel_inverted.png " , " jeija_solar_panel_side.png " ,
" jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , " jeija_solar_panel_side.png " , } ,
wield_image = " jeija_solar_panel_inverted.png " ,
2017-02-14 19:52:34 +00:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 17:55:56 +00:00
paramtype = " light " ,
2017-01-04 21:36:51 +00:00
is_ground_content = false ,
selection_box = {
2015-06-29 17:55:56 +00:00
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-01-28 11:21:43 +00:00
drop = " mesecons_solarpanel:solar_panel_off " ,
2017-03-20 20:39:39 +00:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2019-03-08 00:07:41 +00:00
description = S ( " Inverted Daylight Sensor " ) ,
2019-03-25 11:15:37 +00:00
_doc_items_create_entry = false ,
2017-02-11 17:46:23 +00:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 17:55:56 +00:00
mesecons = { receptor = {
2018-01-13 02:37:41 +00:00
state = mesecon.state . off ,
rules = mesecon.rules . pplate ,
2017-01-28 11:21:43 +00:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 20:59:01 +00:00
local protname = clicker : get_player_name ( )
if minetest.is_protected ( pos , protname ) then
minetest.record_protection_violation ( pos , protname )
return
end
2017-01-28 11:21:43 +00:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_on " } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2017-01-28 11:21:43 +00:00
end ,
2017-02-22 15:22:28 +00:00
_mcl_blast_resistance = 1 ,
2017-03-20 20:39:39 +00:00
_mcl_hardness = 0.2 ,
2015-06-29 17:55:56 +00:00
} )
2017-05-14 22:45:54 +00:00
minetest.register_abm ( {
label = " Darkness turns on inverted solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_inverted_off " } ,
2015-06-29 17:55:56 +00:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 17:21:46 +00:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 17:55:56 +00:00
if light < 12 then
2017-01-11 17:21:46 +00:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_on " , param2 = node.param2 } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2015-06-29 17:55:56 +00:00
end
end ,
} )
2017-05-14 22:45:54 +00:00
minetest.register_abm ( {
label = " Daylight turns off inverted solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_inverted_on " } ,
2015-06-29 17:55:56 +00:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 17:21:46 +00:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 17:55:56 +00:00
if light >= 12 and minetest.get_timeofday ( ) > 0.8 and minetest.get_timeofday ( ) < 0.2 then
2017-01-11 17:21:46 +00:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_off " , param2 = node.param2 } )
2018-01-13 02:37:41 +00:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2015-06-29 17:55:56 +00:00
end
end ,
} )
2017-01-10 05:43:07 +00:00
minetest.register_craft ( {
type = " fuel " ,
recipe = " mesecons_solarpanel:solar_panel_off " ,
burntime = 15
} )
2017-03-21 03:27:50 +00:00
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_off " , " nodes " , " mesecons_solarpanel:solar_panel_on " )
2019-03-25 11:15:37 +00:00
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_off " , " nodes " , " mesecons_solarpanel:solar_panel_inverted_off " )
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_off " , " nodes " , " mesecons_solarpanel:solar_panel_inverted_off " )
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_off " , " nodes " , " mesecons_solarpanel:solar_panel_inverted_on " )
2017-03-21 03:27:50 +00:00
end