From dd65a68ce9f494717faffc98c45814f9a9d67fa4 Mon Sep 17 00:00:00 2001
From: Zefram <zefram@fysh.org>
Date: Sat, 26 Jul 2014 19:01:05 +0200
Subject: [PATCH] Add centrifuge

---
 technic/textures/technic_mv_centrifuge_side.png         |    0 
 technic/machines/MV/init.lua                            |    1 
 technic/machines/register/grinder_recipes.lua           |    2 
 technic/machines/register/machine_base.lua              |   28 +++++++--
 technic/textures/technic_mv_centrifuge_front.png        |    0 
 technic/machines/register/compressor_recipes.lua        |    2 
 technic/machines/register/alloy_recipes.lua             |    5 +
 technic/machines/register/centrifuge.lua                |    8 ++
 technic/machines/register/init.lua                      |    3 
 technic/machines/register/recipes.lua                   |   28 ++++++---
 technic/textures/technic_mv_centrifuge_top.png          |    0 
 technic/machines/MV/centrifuge.lua                      |   16 +++++
 technic/textures/technic_mv_centrifuge_bottom.png       |    0 
 technic/machines/register/extractor_recipes.lua         |    2 
 technic/locale/template.txt                             |    2 
 technic/machines/register/centrifuge_recipes.lua        |   31 ++++++++++
 technic/textures/technic_mv_centrifuge_front_active.png |    0 
 17 files changed, 108 insertions(+), 20 deletions(-)

diff --git a/technic/locale/template.txt b/technic/locale/template.txt
index 43090df..3d18f3b 100644
--- a/technic/locale/template.txt
+++ b/technic/locale/template.txt
@@ -64,6 +64,7 @@
 %s Battery Box = 
 %s Cable =
 %s CNC Machine =
+%s Centrifuge =
 %s Compressor =
 %s Extractor =
 %s Forcefield Emitter =
@@ -190,3 +191,4 @@
 Grinding =
 Compressing =
 Extracting =
+Separating =
diff --git a/technic/machines/MV/centrifuge.lua b/technic/machines/MV/centrifuge.lua
new file mode 100644
index 0000000..5bf24bf
--- /dev/null
+++ b/technic/machines/MV/centrifuge.lua
@@ -0,0 +1,16 @@
+minetest.register_craft({
+	output = "technic:mv_centrifuge",
+	recipe = {
+		{ "technic:motor",          "technic:copper_plate",   "technic:diamond_drill_head" },
+		{ "technic:copper_plate",   "technic:machine_casing", "technic:copper_plate"       },
+		{ "pipeworks:one_way_tube", "technic:mv_cable0",      "pipeworks:mese_filter"      },
+	}
+})
+
+technic.register_centrifuge({
+	tier = "MV",
+	demand = { 8000, 7000, 6000 },
+	speed = 2,
+	upgrade = 1,
+	tube = 1,
+})
diff --git a/technic/machines/MV/init.lua b/technic/machines/MV/init.lua
index 74eb631..72a98b6 100644
--- a/technic/machines/MV/init.lua
+++ b/technic/machines/MV/init.lua
@@ -20,6 +20,7 @@
 dofile(path.."/grinder.lua")
 dofile(path.."/extractor.lua")
 dofile(path.."/compressor.lua")
+dofile(path.."/centrifuge.lua")
 
 dofile(path.."/tool_workshop.lua")
 
diff --git a/technic/machines/register/alloy_recipes.lua b/technic/machines/register/alloy_recipes.lua
index 3227739..6f2fc94 100644
--- a/technic/machines/register/alloy_recipes.lua
+++ b/technic/machines/register/alloy_recipes.lua
@@ -1,7 +1,10 @@
 
 local S = technic.getter
 
-technic.register_recipe_type("alloy", S("Alloy cooking"), 2)
+technic.register_recipe_type("alloy", {
+	description = S("Alloy cooking"),
+	input_size = 2,
+})
 
 function technic.register_alloy_recipe(data)
 	data.time = data.time or 6
diff --git a/technic/machines/register/centrifuge.lua b/technic/machines/register/centrifuge.lua
new file mode 100644
index 0000000..dd05977
--- /dev/null
+++ b/technic/machines/register/centrifuge.lua
@@ -0,0 +1,8 @@
+local S = technic.getter
+
+function technic.register_centrifuge(data)
+	data.typename = "separating"
+	data.machine_name = "centrifuge"
+	data.machine_desc = S("%s Centrifuge")
+	technic.register_base_machine(data)
+end
diff --git a/technic/machines/register/centrifuge_recipes.lua b/technic/machines/register/centrifuge_recipes.lua
new file mode 100644
index 0000000..0f33c66
--- /dev/null
+++ b/technic/machines/register/centrifuge_recipes.lua
@@ -0,0 +1,31 @@
+local S = technic.getter
+
+technic.register_recipe_type("separating", {
+	description = S("Separating"),
+	output_size = 2,
+})
+
+function technic.register_separating_recipe(data)
+	data.time = data.time or 10
+	technic.register_recipe("separating", data)
+end
+
+local rubber_tree_planks = minetest.get_modpath("moretrees") and "moretrees:rubber_tree_planks" or "default:wood"
+
+local recipes = {
+	{ "technic:bronze_dust 4",             "technic:copper_dust 3",       "technic:tin_dust"      },
+	{ "technic:stainless_steel_dust 4",    "technic:wrought_iron_dust 3", "technic:chromium_dust" },
+	{ "technic:brass_dust 3",              "technic:copper_dust 2",       "technic:zinc_dust"     },
+	{ "moretrees:rubber_tree_trunk_empty", rubber_tree_planks.." 4",      "technic:raw_latex"     },
+	{ "moretrees:rubber_tree_trunk",       rubber_tree_planks.." 4",      "technic:raw_latex"     },
+}
+
+if minetest.get_modpath("bushes_classic") then
+	for _, berry in ipairs({ "blackberry", "blueberry", "gooseberry", "raspberry", "strawberry" }) do
+		table.insert(recipes, { "bushes:"..berry.."_bush", "default:stick 20", "bushes:"..berry.." 4" })
+	end
+end
+
+for _, data in pairs(recipes) do
+	technic.register_separating_recipe({ input = { data[1] }, output = { data[2], data[3] } })
+end
diff --git a/technic/machines/register/compressor_recipes.lua b/technic/machines/register/compressor_recipes.lua
index 73282cf..5c5fe91 100644
--- a/technic/machines/register/compressor_recipes.lua
+++ b/technic/machines/register/compressor_recipes.lua
@@ -1,7 +1,7 @@
 
 local S = technic.getter
 
-technic.register_recipe_type("compressing", S("Compressing"))
+technic.register_recipe_type("compressing", { description = S("Compressing") })
 
 function technic.register_compressor_recipe(data)
 	data.time = data.time or 4
diff --git a/technic/machines/register/extractor_recipes.lua b/technic/machines/register/extractor_recipes.lua
index d4f8269..41cf56d 100644
--- a/technic/machines/register/extractor_recipes.lua
+++ b/technic/machines/register/extractor_recipes.lua
@@ -1,7 +1,7 @@
 
 local S = technic.getter
 
-technic.register_recipe_type("extracting", S("Extracting"))
+technic.register_recipe_type("extracting", { description = S("Extracting") })
 
 function technic.register_extractor_recipe(data)
 	data.time = data.time or 4
diff --git a/technic/machines/register/grinder_recipes.lua b/technic/machines/register/grinder_recipes.lua
index 4426f5c..df69665 100644
--- a/technic/machines/register/grinder_recipes.lua
+++ b/technic/machines/register/grinder_recipes.lua
@@ -1,7 +1,7 @@
 
 local S = technic.getter
 
-technic.register_recipe_type("grinding", S("Grinding"))
+technic.register_recipe_type("grinding", { description = S("Grinding") })
 
 function technic.register_grinder_recipe(data)
 	data.time = data.time or 3
diff --git a/technic/machines/register/init.lua b/technic/machines/register/init.lua
index 55c1f8b..3cf373d 100644
--- a/technic/machines/register/init.lua
+++ b/technic/machines/register/init.lua
@@ -19,6 +19,7 @@
 dofile(path.."/grinder_recipes.lua")
 dofile(path.."/extractor_recipes.lua")
 dofile(path.."/compressor_recipes.lua")
+dofile(path.."/centrifuge_recipes.lua")
 
 -- Machines
 dofile(path.."/alloy_furnace.lua")
@@ -26,4 +27,4 @@
 dofile(path.."/grinder.lua")
 dofile(path.."/extractor.lua")
 dofile(path.."/compressor.lua")
-
+dofile(path.."/centrifuge.lua")
diff --git a/technic/machines/register/machine_base.lua b/technic/machines/register/machine_base.lua
index 83c8740..6972b9c 100644
--- a/technic/machines/register/machine_base.lua
+++ b/technic/machines/register/machine_base.lua
@@ -17,7 +17,7 @@
 
 function technic.register_base_machine(data)
 	local typename = data.typename
-	local numitems = technic.recipes[typename].numitems
+	local input_size = technic.recipes[typename].input_size
 	local machine_name = data.machine_name
 	local machine_desc = data.machine_desc
 	local tier = data.tier
@@ -35,7 +35,7 @@
 
 	local formspec =
 		"invsize[8,9;]"..
-		"list[current_name;src;"..(4-numitems)..",1;"..numitems..",1;]"..
+		"list[current_name;src;"..(4-input_size)..",1;"..input_size..",1;]"..
 		"list[current_name;dst;5,1;2,2;]"..
 		"list[current_player;main;0,5;8,4;]"..
 		"label[0,0;"..machine_desc:format(tier).."]"
@@ -91,10 +91,26 @@
 			meta:set_int("src_time", meta:get_int("src_time") + 1)
 			if meta:get_int("src_time") >= result.time / data.speed then
 				meta:set_int("src_time", 0)
-				local result_stack = ItemStack(result.output)
-				if inv:room_for_item("dst", result_stack) then
+				local output = result.output
+				if type(output) ~= "table" then output = { output } end
+				local output_stacks = {}
+				for _, o in ipairs(output) do
+					table.insert(output_stacks, ItemStack(o))
+				end
+				local room_for_output = true
+				inv:set_size("dst_tmp", inv:get_size("dst"))
+				inv:set_list("dst_tmp", inv:get_list("dst"))
+				for _, o in ipairs(output_stacks) do
+					if not inv:room_for_item("dst_tmp", o) then
+						room_for_output = false
+						break
+					end
+					inv:add_item("dst_tmp", o)
+				end
+				if room_for_output then
 					inv:set_list("src", result.new_input)
-					inv:add_item("dst", result_stack)
+					inv:set_list("dst", inv:get_list("dst_tmp"))
+				else
 				end
 			end
 		end
@@ -121,7 +137,7 @@
 			meta:set_int("tube_time",  0)
 			meta:set_string("formspec", formspec)
 			local inv = meta:get_inventory()
-			inv:set_size("src", numitems)
+			inv:set_size("src", input_size)
 			inv:set_size("dst", 4)
 			inv:set_size("upgrade1", 1)
 			inv:set_size("upgrade2", 1)
diff --git a/technic/machines/register/recipes.lua b/technic/machines/register/recipes.lua
index cff8ca1..1aba96b 100644
--- a/technic/machines/register/recipes.lua
+++ b/technic/machines/register/recipes.lua
@@ -1,15 +1,19 @@
 
-technic.recipes = {cooking = {numitems = 1}}
-function technic.register_recipe_type(typename, desc, numitems)
-	numitems = numitems or 1
-	if unified_inventory and unified_inventory.register_craft_type then
+technic.recipes = { cooking = { input_size = 1, output_size = 1 } }
+function technic.register_recipe_type(typename, origdata)
+	local data = {}
+	for k, v in pairs(origdata) do data[k] = v end
+	data.input_size = data.input_size or 1
+	data.output_size = data.output_size or 1
+	if unified_inventory and unified_inventory.register_craft_type and data.output_size == 1 then
 		unified_inventory.register_craft_type(typename, {
-			description = desc,
-			height = numitems,
+			description = data.description,
+			height = data.input_size,
 			width = 1,
 		})
 	end
-	technic.recipes[typename] = {numitems = numitems, recipes = {}}
+	data.recipes = {}
+	technic.recipes[typename] = data
 end
 
 local function get_recipe_index(items)
@@ -26,7 +30,13 @@
 	for i, stack in ipairs(data.input) do
 		data.input[i] = ItemStack(stack):to_string()
 	end
-	data.output = ItemStack(data.output):to_string()
+	if type(data.output) == "table" then
+		for i, v in ipairs(data.output) do
+			data.output[i] = ItemStack(data.output[i]):to_string()
+		end
+	else
+		data.output = ItemStack(data.output):to_string()
+	end
 	
 	local recipe = {time = data.time, input = {}, output = data.output}
 	local index = get_recipe_index(data.input)
@@ -35,7 +45,7 @@
 	end
 	
 	technic.recipes[typename].recipes[index] = recipe
-	if unified_inventory then
+	if unified_inventory and technic.recipes[typename].output_size == 1 then
 		unified_inventory.register_craft({
 			type = typename,
 			output = data.output,
diff --git a/technic/textures/technic_mv_centrifuge_bottom.png b/technic/textures/technic_mv_centrifuge_bottom.png
new file mode 100644
index 0000000..6dcd40f
--- /dev/null
+++ b/technic/textures/technic_mv_centrifuge_bottom.png
Binary files differ
diff --git a/technic/textures/technic_mv_centrifuge_front.png b/technic/textures/technic_mv_centrifuge_front.png
new file mode 100644
index 0000000..e278a33
--- /dev/null
+++ b/technic/textures/technic_mv_centrifuge_front.png
Binary files differ
diff --git a/technic/textures/technic_mv_centrifuge_front_active.png b/technic/textures/technic_mv_centrifuge_front_active.png
new file mode 100644
index 0000000..4cef912
--- /dev/null
+++ b/technic/textures/technic_mv_centrifuge_front_active.png
Binary files differ
diff --git a/technic/textures/technic_mv_centrifuge_side.png b/technic/textures/technic_mv_centrifuge_side.png
new file mode 100644
index 0000000..eeef44a
--- /dev/null
+++ b/technic/textures/technic_mv_centrifuge_side.png
Binary files differ
diff --git a/technic/textures/technic_mv_centrifuge_top.png b/technic/textures/technic_mv_centrifuge_top.png
new file mode 100644
index 0000000..813bbf8
--- /dev/null
+++ b/technic/textures/technic_mv_centrifuge_top.png
Binary files differ

--
Gitblit v1.8.0