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/battery_box_mv.lua |  108 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 62 insertions(+), 46 deletions(-)

diff --git a/technic/battery_box_mv.lua b/technic/battery_box_mv.lua
index ab51e94..8fc6dc7 100644
--- a/technic/battery_box_mv.lua
+++ b/technic/battery_box_mv.lua
@@ -85,7 +85,7 @@
 		battery_charge = 0
 		max_charge = 300000
 		last_side_shown=0
-		end,	
+		end,
 	can_dig = function(pos,player)
 		local meta = minetest.env:get_meta(pos);
 		local inv = meta:get_inventory()
@@ -122,51 +122,73 @@
 	meta:set_float("last_side_shown",i)
 	end
 
---loading registered power tools	
+--loading registered power tools
 	local inv = meta:get_inventory()
 	if inv:is_empty("src")==false  then 
-		srcstack = inv:get_stack("src", 1)
-		src_item=srcstack:to_table()
-		item_meta=srcstack:get_metadata()
-		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+		local srcstack = inv:get_stack("src", 1)
+		local src_item=srcstack:to_table()
+		local src_meta=get_item_meta(src_item["metadata"])
 
-	local item_max_charge = nil
-	local counter=registered_power_tools_count-1
-	for i=1, counter,1 do
-		if power_tools[i].tool_name==src_item["name"] then
-		item_max_charge=power_tools[i].max_charge	
+		local item_max_charge=nil
+		for i=1,registered_power_tools_count,1 do
+			if power_tools[i].tool_name==src_item["name"] then
+				src_meta=get_item_meta(src_item["metadata"])
+				if src_meta==nil then 
+					src_meta={}
+					src_meta["technic_power_tool"]=true
+					src_meta["charge"]=0
+				else 
+					if src_meta["technic_power_tool"]==nil then
+						src_meta["technic_power_tool"]=true
+						src_meta["charge"]=0
+					end
+				end
+				item_max_charge=power_tools[i].max_charge
+			end
 		end
-		end
-	if item_max_charge then
-		load1=tonumber((src_item["metadata"])) 
-		load_step=4000
-		if load1<item_max_charge and charge>0 then 
-		 if charge-load_step<0 then load_step=charge end
-		 if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
-		load1=load1+load_step
-		charge=charge-load_step
-		set_RE_wear(src_item,load1,item_max_charge)
-		src_item["metadata"]=tostring(load1)
-		inv:set_stack("src", 1, src_item)
-		end
-		meta:set_int("battery_charge",charge)
-	end	
+		
+		if item_max_charge then
+			load1=src_meta["charge"] 
+			load_step=4000
+			if load1<item_max_charge and charge>0 then 
+				if charge-load_step<0 then load_step=charge end
+				if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+				load1=load1+load_step
+				charge=charge-load_step
+				set_RE_wear(src_item,load1,item_max_charge)
+				src_meta["charge"]=load1
+				src_item["metadata"]=set_item_meta(src_meta)
+				inv:set_stack("src", 1, src_item)
+			end
+			meta:set_int("battery_charge",charge)
+		end	
 	end
 	
 -- dischargin registered power tools
 		if inv:is_empty("dst") == false then 
 		srcstack = inv:get_stack("dst", 1)
 		src_item=srcstack:to_table()
-		local item_max_charge = nil
-		local counter=registered_power_tools_count-1
-		for i=1, counter,1 do
-		if power_tools[i].tool_name==src_item["name"] then
-		item_max_charge=power_tools[i].max_charge	
+		local src_meta=get_item_meta(src_item["metadata"])
+		local item_max_charge=nil
+		for i=1,registered_power_tools_count,1 do
+			if power_tools[i].tool_name==src_item["name"] then
+				src_meta=get_item_meta(src_item["metadata"])
+				if src_meta==nil then 
+					src_meta={}
+					src_meta["technic_power_tool"]=true
+					src_meta["charge"]=0
+				else 
+					if src_meta["technic_power_tool"]==nil then
+						src_meta["technic_power_tool"]=true
+						src_meta["charge"]=0
+					end
+				end
+				item_max_charge=power_tools[i].max_charge
+			end
 		end
-		end
+
 		if item_max_charge then
-		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
-		local load1=tonumber((src_item["metadata"])) 
+		local load1=src_meta["charge"] 
 		load_step=4000
 		if load1>0 and charge<max_charge then 
 			 if charge+load_step>max_charge then load_step=max_charge-charge end
@@ -174,7 +196,8 @@
 		load1=load1-load_step
 		charge=charge+load_step
 		set_RE_wear(src_item,load1,item_max_charge)
-		src_item["metadata"]=tostring(load1)	
+		src_meta["charge"]=load1
+		src_item["metadata"]=set_item_meta(src_meta)
 		inv:set_stack("dst", 1, src_item)
 		end		
 		end
@@ -182,19 +205,12 @@
 		
 	meta:set_int("battery_charge",charge)
 
-	local load = math.floor(charge/300000 * 100)
+	local load = math.floor((charge/300000) * 100)
 	meta:set_string("formspec",
-				"invsize[8,9;]"..
+				mv_battery_box_formspec..
 				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
-						(load)..":technic_power_meter_fg.png]"..
-				"list[current_name;src;3,1;1,1;]"..
-				"image[4,1;1,1;technic_battery_reload.png]"..
-				"list[current_name;dst;5,1;1,1;]"..
-				"label[0,0;MV Battery box]"..
-				"label[3,0;Charge]"..
-				"label[5,0;Discharge]"..
-				"label[1,3;Power level]"..
-				"list[current_player;main;0,5;8,4;]")
+						(load)..":technic_power_meter_fg.png]"
+				)
 		
 	local pos1={}
 

--
Gitblit v1.8.0