From 018b248d5184ea80d43181b2d98ba096d58af624 Mon Sep 17 00:00:00 2001
From: Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
Date: Sat, 21 Dec 2013 02:26:09 -0500
Subject: fix crash in constructor

---
 technic/machines/other/constructor.lua | 142 ++++++++++++++++-----------------
 1 file changed, 71 insertions(+), 71 deletions(-)

diff --git a/technic/machines/other/constructor.lua b/technic/machines/other/constructor.lua
index 1210c5b..b330b15 100644
--- a/technic/machines/other/constructor.lua
+++ b/technic/machines/other/constructor.lua
@@ -1,6 +1,77 @@
 
 local S = technic.getter
 
+local function deploy_node(inv, slot_name, pos1, node1, node)
+	if node1.name == "air" then 
+		if not inv:is_empty(slot_name) then
+			stack1=inv:get_list(slot_name)
+			local def = stack1[1]:get_definition()
+			if def.type == "node" then
+				node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
+				minetest.set_node(pos1,node_to_be_placed)
+				stack1[1]:take_item()
+				inv:set_stack(slot_name, 1, stack1[1])
+			elseif def.type == "craft" then
+				if def.on_place then
+					-- print("deploy_node: item has on_place. trying...")
+					local ok, stk = pcall(def.on_place, stack1[1], nil, {
+						-- Fake pointed_thing
+						type = "node",
+						above = pos1,
+						under = { x=pos1.x, y=pos1.y-1, z=pos1.z },
+					})
+					if ok then
+						-- print("deploy_node: on_place succeeded!")
+						inv:set_stack(slot_name, 1, stk or stack1[1])
+						return
+					-- else
+						-- print("deploy_node: WARNING: error while running on_place: "..tostring(stk))
+					end
+				end
+				minetest.item_place_object(stack1[1], nil, {
+					-- Fake pointed_thing
+					type = "node",
+					above = pos1,
+					under = pos1,
+				})
+				inv:set_stack(slot_name, 1, nil)
+			end
+		end
+		return 
+	end
+	if node1.name == "ignore" or
+	   node1.name == "default:lava_source" or
+	   node1.name == "default:lava_flowing" or
+	   node1.name == "default:water_source" or
+	   node1.name == "default:water_flowing" 
+	   then return end
+	if inv:room_for_item(slot_name,node1) then
+		local def = minetest.registered_nodes[node1.name]
+		if not def then return end
+		local drop = def.drop or node1.name
+		if type(drop) == "table" then
+			local pr = PseudoRandom(math.random())
+			local c = 0
+			local loop = 0 -- Prevent infinite loop
+			while (c < (drop.max_items or 1)) and (loop < 1000) do
+				local i = math.floor(pr:next(1, #drop.items))
+				if pr:next(1, drop.items[i].rarity or 1) == 1 then
+					for _,item in ipairs(drop.items[i].items) do
+						inv:add_item(slot_name,item)
+					end
+					c = c + 1
+				end
+				loop = loop + 1
+			end
+			minetest.remove_node(pos1)
+		elseif type(drop) == "string" then
+			inv:add_item(slot_name,drop)
+			minetest.remove_node(pos1)
+		end
+	end
+
+end
+
 minetest.register_craft({
 	type = "shapeless",
 	output = 'technic:constructor_mk1_off 1',
@@ -288,74 +359,3 @@ minetest.register_node("technic:constructor_mk3_on", {
 	allow_metadata_inventory_move = technic.machine_inventory_move,
 })
 
-
-local function deploy_node(inv, slot_name, pos1, node1, node)
-	if node1.name == "air" then 
-		if not inv:is_empty(slot_name) then
-			stack1=inv:get_list(slot_name)
-			local def = stack1[1]:get_definition()
-			if def.type == "node" then
-				node_to_be_placed={name=stack1[1]:get_name(), param1=0, param2=node.param2}
-				minetest.set_node(pos1,node_to_be_placed)
-				stack1[1]:take_item()
-				inv:set_stack(slot_name, 1, stack1[1])
-			elseif def.type == "craft" then
-				if def.on_place then
-					-- print("deploy_node: item has on_place. trying...")
-					local ok, stk = pcall(def.on_place, stack1[1], nil, {
-						-- Fake pointed_thing
-						type = "node",
-						above = pos1,
-						under = { x=pos1.x, y=pos1.y-1, z=pos1.z },
-					})
-					if ok then
-						-- print("deploy_node: on_place succeeded!")
-						inv:set_stack(slot_name, 1, stk or stack1[1])
-						return
-					-- else
-						-- print("deploy_node: WARNING: error while running on_place: "..tostring(stk))
-					end
-				end
-				minetest.item_place_object(stack1[1], nil, {
-					-- Fake pointed_thing
-					type = "node",
-					above = pos1,
-					under = pos1,
-				})
-				inv:set_stack(slot_name, 1, nil)
-			end
-		end
-		return 
-	end
-	if node1.name == "ignore" or
-	   node1.name == "default:lava_source" or
-	   node1.name == "default:lava_flowing" or
-	   node1.name == "default:water_source" or
-	   node1.name == "default:water_flowing" 
-	   then return end
-	if inv:room_for_item(slot_name,node1) then
-		local def = minetest.registered_nodes[node1.name]
-		if not def then return end
-		local drop = def.drop or node1.name
-		if type(drop) == "table" then
-			local pr = PseudoRandom(math.random())
-			local c = 0
-			local loop = 0 -- Prevent infinite loop
-			while (c < (drop.max_items or 1)) and (loop < 1000) do
-				local i = math.floor(pr:next(1, #drop.items))
-				if pr:next(1, drop.items[i].rarity or 1) == 1 then
-					for _,item in ipairs(drop.items[i].items) do
-						inv:add_item(slot_name,item)
-					end
-					c = c + 1
-				end
-				loop = loop + 1
-			end
-			minetest.remove_node(pos1)
-		elseif type(drop) == "string" then
-			inv:add_item(slot_name,drop)
-			minetest.remove_node(pos1)
-		end
-	end
-
-end
-- 
cgit v1.2.3