From 2d68498dc10bc74a35a5cc0ff4e81b6640807511 Mon Sep 17 00:00:00 2001
From: kpoppel <poulsen.kim@gmail.com>
Date: Wed, 08 May 2013 01:42:22 +0200
Subject: [PATCH] Massive change to the way CNC programs are registered. Now the API is open for adding new nodes and inhibiting some nodes for some materials. No more recipes outside of the CNC machine.

---
 technic/geothermal.lua |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 138 insertions(+), 0 deletions(-)

diff --git a/technic/geothermal.lua b/technic/geothermal.lua
new file mode 100644
index 0000000..dccabf4
--- /dev/null
+++ b/technic/geothermal.lua
@@ -0,0 +1,138 @@
+minetest.register_alias("geothermal", "technic:geothermal")
+
+minetest.register_craft({
+	output = 'technic:geothermal',
+	recipe = {
+		{'default:stone', 'default:stone', 'default:stone'},
+		{'default:copper_ingot', 'default:diamond', 'default:copper_ingot'},
+		{'default:stone', 'default:copper_ingot', 'default:stone'},
+	}
+})
+
+minetest.register_craftitem("technic:geothermal", {
+	description = "Geothermal Generator",
+	stack_max = 99,
+}) 
+
+geothermal_formspec =
+	"invsize[8,4;]"..
+	"image[1,1;1,2;technic_power_meter_bg.png]"..
+	"label[0,0;Geothermal Generator]"..
+	"label[1,3;Power level]"..
+	"list[current_player;main;0,5;8,4;]"
+	
+
+minetest.register_node("technic:geothermal", {
+	description = "Geothermal Generator",
+	tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+		"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	burn_time=0;
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("infotext", "Geothermal Generator")
+		meta:set_float("technic_power_machine", 1)
+		meta:set_float("internal_EU_buffer", 0)
+		meta:set_float("internal_EU_buffer_size", 2000)
+		meta:set_string("formspec", geothermal_formspec)	
+		end,	
+
+})
+
+minetest.register_node("technic:geothermal_active", {
+	description = "Geothermal Generator",
+	tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png",
+		"technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"},
+	paramtype2 = "facedir",
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1},
+	legacy_facedir_simple = true,
+	sounds = default.node_sound_wood_defaults(),
+	drop="technic:geothermal",
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=0;
+})
+
+minetest.register_abm({
+	nodenames = {"technic:geothermal","technic:geothermal_active"},
+	interval = 1,
+	chance = 1,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+
+	local meta = minetest.env:get_meta(pos)
+	local charge= meta:get_float("internal_EU_buffer")
+	local max_charge= meta:get_float("internal_EU_buffer_size")
+	local water_nodes = 0
+	local lava_nodes = 0
+	local production_level=0
+	local load_step=0
+
+	pos.x=pos.x+1
+	local check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.x=pos.x-2
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.x=pos.x+1
+	pos.z=pos.z+1
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.z=pos.z-2
+	check=check_node_around (pos)
+	if check==1 then water_nodes=water_nodes+1 end
+	if check==2 then lava_nodes=lava_nodes+1 end
+	pos.z=pos.z+1
+	
+	if water_nodes==1 and lava_nodes==1 then production_level=50 load_step=30 end
+	if water_nodes==2 and lava_nodes==1 then production_level=75 load_step=45 end
+	if water_nodes==1 and lava_nodes==2 then production_level=75 load_step=45 end
+	if water_nodes==2 and lava_nodes==2 then production_level=100 load_step=60 end
+	if water_nodes==3 and lava_nodes==1 then production_level=25 load_step=15 end
+	if water_nodes==1 and lava_nodes==3 then production_level=25 load_step=15 end
+
+        if production_level>0 then
+		if charge+load_step>max_charge then
+		load_step=max_charge-charge
+		end
+		if load_step>0 then 
+		charge=charge+load_step
+		meta:set_float("internal_EU_buffer",charge)
+		end
+	end
+
+	local load = math.floor((charge/max_charge)*100)
+	meta:set_string("formspec",
+				"invsize[8,4;]"..
+				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
+						(load)..":technic_power_meter_fg.png]"..
+				"label[0,0;Geothermal Generator]"..
+				"label[1,3;Power level]"..
+				"label[4,0;Production at "..tostring(production_level).."%]"
+				)
+				
+	if production_level>0 and minetest.env:get_node(pos).name=="technic:geothermal" then
+		hacky_swap_node (pos,"technic:geothermal_active")
+		return
+	end
+	if production_level==0 then hacky_swap_node (pos,"technic:geothermal") end
+end
+}) 
+
+function check_node_around (pos)
+local node=minetest.env:get_node(pos)
+if node.name=="default:water_source" or node.name=="default:water_flowing"  then return 1 end
+if node.name=="default:lava_source" or node.name=="default:lava_flowing"  then return 2 end	
+return 0
+end
+
+register_LV_machine ("technic:geothermal","PR")
+register_LV_machine ("technic:geothermal_active","PR")

--
Gitblit v1.8.0