From da95be53ec5703e808233d7b45fc42fb500863dd Mon Sep 17 00:00:00 2001
From: coil <51716565+coil0@users.noreply.github.com>
Date: Mon, 30 Dec 2019 21:02:01 +0100
Subject: [PATCH] Fix radiation protection when armor group is not set (#509)

---
 technic/machines/LV/solar_panel.lua |   95 +++++++++++++++++++++++------------------------
 1 files changed, 47 insertions(+), 48 deletions(-)

diff --git a/technic/machines/LV/solar_panel.lua b/technic/machines/LV/solar_panel.lua
index d49f609..6143fa9 100644
--- a/technic/machines/LV/solar_panel.lua
+++ b/technic/machines/LV/solar_panel.lua
@@ -4,16 +4,58 @@
 
 local S = technic.getter
 
+
+minetest.register_craft({
+	output = 'technic:solar_panel',
+	recipe = {
+		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
+		{'basic_materials:silver_wire',    'technic:lv_cable',            'mesecons_materials:glue'},
+	},
+	replacements = { {"basic_materials:silver_wire", "basic_materials:empty_spool"}, },
+})
+
+
+local run = function(pos, node)
+	-- The action here is to make the solar panel prodice power
+	-- Power is dependent on the light level and the height above ground
+	-- There are many ways to cheat by using other light sources like lamps.
+	-- As there is no way to determine if light is sunlight that is just a shame.
+	-- To take care of some of it solar panels do not work outside daylight hours or if
+	-- built below 0m
+	local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
+	local machine_name = S("Small Solar %s Generator"):format("LV")
+
+	local light = minetest.get_node_light(pos1, nil)
+	local time_of_day = minetest.get_timeofday()
+	local meta = minetest.get_meta(pos)
+	if light == nil then light = 0 end
+	-- turn on panel only during day time and if sufficient light
+        -- I know this is counter intuitive when cheating by using other light sources underground.
+	if light >= 12 and time_of_day >= 0.24 and time_of_day <= 0.76 and pos.y > -10 then
+		local charge_to_give = math.floor((light + pos1.y) * 3)
+		charge_to_give = math.max(charge_to_give, 0)
+		charge_to_give = math.min(charge_to_give, 200)
+		meta:set_string("infotext", S("@1 Active (@2)", machine_name,
+			technic.EU_string(charge_to_give)))
+		meta:set_int("LV_EU_supply", charge_to_give)
+	else
+		meta:set_string("infotext", S("%s Idle"):format(machine_name))
+		meta:set_int("LV_EU_supply", 0)
+	end
+end
+
 minetest.register_node("technic:solar_panel", {
 	tiles = {"technic_solar_panel_top.png",  "technic_solar_panel_bottom.png", "technic_solar_panel_side.png",
 	         "technic_solar_panel_side.png", "technic_solar_panel_side.png",   "technic_solar_panel_side.png"},
-	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
+		technic_machine=1, technic_lv=1},
+	connect_sides = {"bottom"},
 	sounds = default.node_sound_wood_defaults(),
-    	description = S("Solar Panel"),
+    	description = S("Small Solar %s Generator"):format("LV"),
 	active = false,
 	drawtype = "nodebox",
 	paramtype = "light",
-	is_ground_content = true,	
+	is_ground_content = true,
 	node_box = {
 		type = "fixed",
 		fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
@@ -21,53 +63,10 @@
 	on_construct = function(pos)
 		local meta = minetest.get_meta(pos)
 		meta:set_int("LV_EU_supply", 0)
-		meta:set_string("infotext", S("Solar Panel"))
+		meta:set_string("infotext", S("Small Solar %s Generator"):format("LV"))
 	end,
+	technic_run = run,
 })
-
-minetest.register_craft({
-	output = 'technic:solar_panel',
-	recipe = {
-		{'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer', 'technic:doped_silicon_wafer'},
-		{'default:steel_ingot',         'technic:lv_cable0',           'default:steel_ingot'},
-
-	}
-})
-
-minetest.register_abm({
-	nodenames = {"technic:solar_panel"},
-	interval   = 1,
-	chance     = 1,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		-- The action here is to make the solar panel prodice power
-		-- Power is dependent on the light level and the height above ground
-		-- 130m and above is optimal as it would be above cloud level.
-		-- Height gives 1/4 of the effect, light 3/4. Max. effect is 26EU.
-		-- There are many ways to cheat by using other light sources like lamps.
-		-- As there is no way to determine if light is sunlight that is just a shame.
-		-- To take care of some of it solar panels do not work outside daylight hours or if
-		-- built below -10m
-		local pos1 = {x=pos.x, y=pos.y+1, z=pos.z}
-		local machine_name = S("Solar Panel")
-
-		local light = minetest.get_node_light(pos1, nil)
-		local time_of_day = minetest.get_timeofday()
-		local meta = minetest.get_meta(pos)
-		if light == nil then light = 0 end
-		-- turn on panel only during day time and if sufficient light
-                -- I know this is counter intuitive when cheating by using other light sources underground.
-		if light >= 12 and time_of_day >= 0.24 and time_of_day <= 0.76 and pos.y > -10 then
-			local charge_to_give = math.floor((light + pos1.y) * 3)
-			charge_to_give = math.max(charge_to_give, 0)
-			charge_to_give = math.min(charge_to_give, 200)
-			meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..charge_to_give.."EU)")
-			meta:set_int("LV_EU_supply", charge_to_give)
-		else
-			meta:set_string("infotext", S("%s Idle"):format(machine_name))
-			meta:set_int("LV_EU_supply", 0)
-		end
-	end,
-}) 
 
 technic.register_machine("LV", "technic:solar_panel", technic.producer)
 

--
Gitblit v1.8.0