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/deployer.lua |  108 ++++++++++++++++++++++++++++++++---------------------
 1 files changed, 65 insertions(+), 43 deletions(-)

diff --git a/technic/deployer.lua b/technic/deployer.lua
index ce3b735..c5dba2a 100644
--- a/technic/deployer.lua
+++ b/technic/deployer.lua
@@ -8,13 +8,64 @@
 	}
 })
 
+deployer_signal_on = function(pos, node)
+	local pos1={}
+	pos1.x=pos.x
+	pos1.y=pos.y
+	pos1.z=pos.z
+	if node.param2==3 then pos1.x=pos1.x+1 end
+	if node.param2==2 then pos1.z=pos1.z+1 end
+	if node.param2==1 then pos1.x=pos1.x-1 end
+	if node.param2==0 then pos1.z=pos1.z-1 end
+
+	if node.name == "technic:deployer_off" then
+		local node1=minetest.env:get_node(pos1)
+		if node1.name == "air" then 
+			hacky_swap_node(pos,"technic:deployer_on")
+			nodeupdate(pos)
+			local meta = minetest.env:get_meta(pos);
+			local inv = meta:get_inventory()
+			local i=0
+			for _,stack in ipairs(inv:get_list("main")) do
+			i=i+1
+			if stack:get_name() ~=nil and minetest.registered_nodes[stack:get_name()]~=nil then 
+				node1={name=stack:get_name(), param1=0, param2=node.param2}
+				minetest.env:place_node(pos1,node1)
+				stack:take_item(1);
+				inv:set_stack("main", i, stack)
+				return
+				end
+			end
+	end
+	end
+end
+
+deployer_signal_off = function(pos, node)
+	if node.name == "technic:deployer_on" then
+		hacky_swap_node(pos,"technic:deployer_off")
+		nodeupdate(pos)
+	end
+end
+
 minetest.register_node("technic:deployer_off", {
 	description = "Deployer",
 	tile_images = {"technic_deployer_top.png","technic_deployer_bottom.png","technic_deployer_side2.png","technic_deployer_side1.png",
 			"technic_deployer_back.png","technic_deployer_front_off.png"},
 	is_ground_content = true,
 	paramtype2 = "facedir",
-	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1},
+	mesecons = {effector={action_on=deployer_signal_on}},
+	tube={insert_object=function(pos,node,stack,direction)
+			local meta=minetest.env:get_meta(pos)
+			local inv=meta:get_inventory()
+			return inv:add_item("main",stack)
+		end,
+		can_insert=function(pos,node,stack,direction)
+			local meta=minetest.env:get_meta(pos)
+			local inv=meta:get_inventory()
+			return inv:room_for_item("main",stack)
+		end,
+		input_inventory="main"},
 	sounds = default.node_sound_stone_defaults(),
 	on_construct = function(pos)
 	local meta = minetest.env:get_meta(pos)
@@ -45,47 +96,18 @@
 			"technic_deployer_back.png","technic_deployer_front_on.png"},
 	is_ground_content = true,
 	paramtype2 = "facedir",
-	tubelike=1,
-	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2,tubedevice=1,not_in_creative_inventory=1},
+	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, tubedevice_receiver=1,not_in_creative_inventory=1},
+	mesecons = {effector={action_off=deployer_signal_off}},
+		tube={insert_object=function(pos,node,stack,direction)
+			local meta=minetest.env:get_meta(pos)
+			local inv=meta:get_inventory()
+			return inv:add_item("main",stack)
+		end,
+		can_insert=function(pos,node,stack,direction)
+			local meta=minetest.env:get_meta(pos)
+			local inv=meta:get_inventory()
+			return inv:room_for_item("main",stack)
+		end,
+		input_inventory="main"},
 	sounds = default.node_sound_stone_defaults(),
 })
-
-mesecon:register_on_signal_on(function(pos, node)
-	local pos1={}
-	pos1.x=pos.x
-	pos1.y=pos.y
-	pos1.z=pos.z
-	if node.param2==3 then pos1.x=pos1.x+1 end
-	if node.param2==2 then pos1.z=pos1.z+1 end
-	if node.param2==1 then pos1.x=pos1.x-1 end
-	if node.param2==0 then pos1.z=pos1.z-1 end
-
-	if node.name == "technic:deployer_off" then
-		hacky_swap_node(pos,"technic:deployer_on")
-		nodeupdate(pos)
-			local meta = minetest.env:get_meta(pos);
-		
-		local inv = meta:get_inventory()
-		print (dump(inv))
-		for _,stack in ipairs(inv:get_list("main")) do
-		print (dump(stack:get_name()))
-
-		if stack:get_name() ~=nil then 
-			node1={name=stack:get_name(), param1=0, param2=node.param2}
-			minetest.env:place_node(pos1,node1)
-			return
-			end
-	end
-	end
-end)
-
-mesecon:register_on_signal_off(function(pos, node)
-	if node.name == "technic:deployer_on" then
-		hacky_swap_node(pos,"technic:deployer_off")
-		nodeupdate(pos)
-	end
-end)
-
-mesecon:register_effector("technic:deployer_on", "technic:deployer_off")
-
-

--
Gitblit v1.8.0