Add centrifuge

The centrifuge, currently only existing in an MV variety, is a machine
that separates a mixed substance into its constituents.  Currently the
main use is to reverse alloying of metals.  The alloy separation recipes
intentionally only operate on the dust form of metals, making this less
convenient than the original alloying.  It also only recovers metal
constituents, not the carbon that went into cast iron or carbon steel.

This change incidentally generalises the technic recipe and
machine infrastructure to handle recipes with multiple outputs.
As unified_inventory's craft guide can't yet handle that, these recipes
are not registered there.
This commit is contained in:
Zefram
2014-07-15 18:29:36 +01:00
parent 84cf6504c5
commit dd65a68ce9
17 changed files with 108 additions and 20 deletions

View File

@ -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 @@ local function register_recipe(typename, data)
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 @@ local function register_recipe(typename, data)
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,