2019-03-08 02:07:41 +02:00
local S = minetest.get_translator ( " mesecons_solarpanel " )
2018-01-13 04:37:41 +02:00
local boxes = { - 8 / 16 , - 8 / 16 , - 8 / 16 , 8 / 16 , - 2 / 16 , 8 / 16 }
2015-06-29 20:55:56 +03:00
2018-01-13 04:37:41 +02:00
-- Daylight Sensor
2015-06-29 20:55:56 +03: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 21:52:34 +02:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 20:55:56 +03:00
paramtype = " light " ,
2017-01-04 23:36:51 +02:00
is_ground_content = false ,
2015-06-29 20:55:56 +03:00
selection_box = {
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
drop = " mesecons_solarpanel:solar_panel_off " ,
2019-03-08 02:07:41 +02:00
description = S ( " Daylight Sensor " ) ,
2017-03-02 20:53:53 +02:00
_doc_items_create_entry = false ,
2017-03-20 22:39:39 +02:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2017-02-11 19:46:23 +02:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 20:55:56 +03:00
mesecons = { receptor = {
2017-09-14 03:20:47 +03:00
state = mesecon.state . on ,
2018-01-13 04:37:41 +02:00
rules = mesecon.rules . pplate ,
2017-01-28 13:21:43 +02:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 22:59:01 +02: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 13:21:43 +02:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_off " } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2017-01-28 13:21:43 +02:00
end ,
2017-02-22 17:22:28 +02:00
_mcl_blast_resistance = 1 ,
2017-03-20 22:39:39 +02:00
_mcl_hardness = 0.2 ,
2015-06-29 20:55:56 +03: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 21:52:34 +02:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 20:55:56 +03:00
paramtype = " light " ,
2017-01-04 23:36:51 +02:00
is_ground_content = false ,
selection_box = {
2015-06-29 20:55:56 +03:00
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-03-20 22:39:39 +02:00
groups = { handy = 1 , axey = 1 , material_wood = 1 } ,
2019-03-08 02:07:41 +02:00
description = S ( " Daylight Sensor " ) ,
_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. " ) ,
2017-03-11 04:51:36 +02:00
_doc_items_usagehelp = " Rightclick the daylight sensor to turn it into an inverted daylight sensor, which supplies redstone energy when it is in moonlight. " ,
2017-02-11 19:46:23 +02:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 20:55:56 +03:00
mesecons = { receptor = {
2017-09-14 03:20:47 +03:00
state = mesecon.state . off ,
2018-01-13 04:37:41 +02:00
rules = mesecon.rules . pplate ,
2017-01-28 13:21:43 +02:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 22:59:01 +02: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 13:21:43 +02:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_on " } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2017-01-28 13:21:43 +02:00
end ,
2017-02-22 17:22:28 +02:00
_mcl_blast_resistance = 1 ,
2017-03-20 22:39:39 +02:00
_mcl_hardness = 0.2 ,
2015-06-29 20:55:56 +03:00
} )
minetest.register_craft ( {
2017-01-10 03:25:10 +02:00
output = ' mesecons_solarpanel:solar_panel_off ' ,
2015-06-29 20:55:56 +03:00
recipe = {
2017-02-01 00:32:56 +02:00
{ ' mcl_core:glass ' , ' mcl_core:glass ' , ' mcl_core:glass ' } ,
2017-02-08 19:54:56 +02:00
{ ' mcl_nether:quartz ' , ' mcl_nether:quartz ' , ' mcl_nether:quartz ' } ,
2017-01-10 03:25:10 +02:00
{ ' group:wood_slab ' , ' group:wood_slab ' , ' group:wood_slab ' } ,
2015-06-29 20:55:56 +03:00
}
} )
2017-05-15 01:45:54 +03:00
minetest.register_abm ( {
label = " Daylight turns on solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_off " } ,
2015-06-29 20:55:56 +03:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 19:21:46 +02:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 20:55:56 +03:00
if light >= 12 and minetest.get_timeofday ( ) > 0.2 and minetest.get_timeofday ( ) < 0.8 then
2017-01-11 19:21:46 +02:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_on " , param2 = node.param2 } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2015-06-29 20:55:56 +03:00
end
end ,
} )
2017-05-15 01:45:54 +03:00
minetest.register_abm ( {
label = " Darkness turns off solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_on " } ,
2015-06-29 20:55:56 +03:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 19:21:46 +02:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 20:55:56 +03:00
if light < 12 then
2017-01-11 19:21:46 +02:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_off " , param2 = node.param2 } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2015-06-29 20:55:56 +03:00
end
end ,
} )
2018-01-13 04:37:41 +02:00
--- Inverted Daylight Sensor
2015-06-29 20:55:56 +03: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 21:52:34 +02:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 20:55:56 +03:00
paramtype = " light " ,
2017-01-04 23:36:51 +02:00
is_ground_content = false ,
2015-06-29 20:55:56 +03:00
selection_box = {
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-01-28 13:21:43 +02:00
drop = " mesecons_solarpanel:solar_panel_off " ,
2017-03-20 22:39:39 +02:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2019-03-08 02:07:41 +02:00
description = S ( " Inverted Daylight Sensor " ) ,
2017-03-02 20:53:53 +02:00
_doc_items_create_entry = false ,
2017-02-11 19:46:23 +02:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 20:55:56 +03:00
mesecons = { receptor = {
2018-01-13 04:37:41 +02:00
state = mesecon.state . on ,
rules = mesecon.rules . pplate ,
2017-01-28 13:21:43 +02:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 22:59:01 +02: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 13:21:43 +02:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_off " } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2017-01-28 13:21:43 +02:00
end ,
2017-02-22 17:22:28 +02:00
_mcl_blast_resistance = 1 ,
2017-03-20 22:39:39 +02:00
_mcl_hardness = 0.2 ,
2015-06-29 20:55:56 +03: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 21:52:34 +02:00
wield_scale = { x = 1 , y = 1 , z = 3 } ,
2015-06-29 20:55:56 +03:00
paramtype = " light " ,
2017-01-04 23:36:51 +02:00
is_ground_content = false ,
selection_box = {
2015-06-29 20:55:56 +03:00
type = " fixed " ,
fixed = boxes
} ,
node_box = {
type = " fixed " ,
fixed = boxes
} ,
2017-01-28 13:21:43 +02:00
drop = " mesecons_solarpanel:solar_panel_off " ,
2017-03-20 22:39:39 +02:00
groups = { handy = 1 , axey = 1 , not_in_creative_inventory = 1 , material_wood = 1 } ,
2019-03-08 02:07:41 +02:00
description = S ( " Inverted Daylight Sensor " ) ,
_doc_items_longdesc = S ( " An inverted daylight sensor is a variant of the daylight sensor. It is a redstone component which provides redstone power when it in moonlight and no power otherwise. It can turned back into an ordinary daylight sensor. " ) ,
2017-03-11 04:51:36 +02:00
_doc_items_usagehelp = " Rightclick the daylight sensor to turn it into a daylight sensor. " ,
2017-02-11 19:46:23 +02:00
sounds = mcl_sounds.node_sound_glass_defaults ( ) ,
2015-06-29 20:55:56 +03:00
mesecons = { receptor = {
2018-01-13 04:37:41 +02:00
state = mesecon.state . off ,
rules = mesecon.rules . pplate ,
2017-01-28 13:21:43 +02:00
} } ,
on_rightclick = function ( pos , node , clicker , pointed_thing )
2019-02-08 22:59:01 +02: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 13:21:43 +02:00
minetest.swap_node ( pos , { name = " mesecons_solarpanel:solar_panel_on " } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2017-01-28 13:21:43 +02:00
end ,
2017-02-22 17:22:28 +02:00
_mcl_blast_resistance = 1 ,
2017-03-20 22:39:39 +02:00
_mcl_hardness = 0.2 ,
2015-06-29 20:55:56 +03:00
} )
2017-05-15 01:45:54 +03:00
minetest.register_abm ( {
label = " Darkness turns on inverted solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_inverted_off " } ,
2015-06-29 20:55:56 +03:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 19:21:46 +02:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 20:55:56 +03:00
if light < 12 then
2017-01-11 19:21:46 +02:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_on " , param2 = node.param2 } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_on ( pos , mesecon.rules . pplate )
2015-06-29 20:55:56 +03:00
end
end ,
} )
2017-05-15 01:45:54 +03:00
minetest.register_abm ( {
label = " Daylight turns off inverted solar panels " ,
nodenames = { " mesecons_solarpanel:solar_panel_inverted_on " } ,
2015-06-29 20:55:56 +03:00
interval = 1 ,
chance = 1 ,
action = function ( pos , node , active_object_count , active_object_count_wider )
2017-01-11 19:21:46 +02:00
local light = minetest.get_node_light ( pos , nil )
2015-06-29 20:55:56 +03:00
if light >= 12 and minetest.get_timeofday ( ) > 0.8 and minetest.get_timeofday ( ) < 0.2 then
2017-01-11 19:21:46 +02:00
minetest.set_node ( pos , { name = " mesecons_solarpanel:solar_panel_inverted_off " , param2 = node.param2 } )
2018-01-13 04:37:41 +02:00
mesecon.receptor_off ( pos , mesecon.rules . pplate )
2015-06-29 20:55:56 +03:00
end
end ,
} )
2017-01-10 07:43:07 +02:00
minetest.register_craft ( {
type = " fuel " ,
recipe = " mesecons_solarpanel:solar_panel_off " ,
burntime = 15
} )
2017-03-21 05:27:50 +02:00
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_off " , " nodes " , " mesecons_solarpanel:solar_panel_on " )
doc.add_entry_alias ( " nodes " , " mesecons_solarpanel:solar_panel_inverted_off " , " nodes " , " mesecons_solarpanel:solar_panel_inverted_on " )
end