mirror of
https://github.com/minetest-mods/technic.git
synced 2025-07-07 02:30:36 +02:00
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:
@ -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,
|
||||
|
Reference in New Issue
Block a user