mirror of
https://github.com/minetest-mods/technic.git
synced 2025-07-07 18:50:41 +02:00
Change the recipe code to be able to handle recipes with more than one input, and use it for the alloy furnace.
Reorganize the init.lua files.
This commit is contained in:
@ -1,63 +1,88 @@
|
||||
|
||||
technic.recipes = {}
|
||||
function technic.register_recipe_type(typename, desc)
|
||||
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
|
||||
unified_inventory.register_craft_type(typename, {
|
||||
description = desc,
|
||||
height = 1,
|
||||
height = numtiems,
|
||||
width = 1,
|
||||
})
|
||||
end
|
||||
technic.recipes[typename] = {}
|
||||
technic.recipes[typename] = {numitems = numitems, recipes = {}}
|
||||
end
|
||||
|
||||
function technic.register_recipe(typename, data)
|
||||
local src = ItemStack(data.input):get_name()
|
||||
technic.recipes[typename][src] = data
|
||||
local function get_recipe_index(items)
|
||||
local l = {}
|
||||
for i, stack in ipairs(items) do
|
||||
l[i] = ItemStack(stack):get_name()
|
||||
end
|
||||
table.sort(l)
|
||||
return table.concat(l, "/")
|
||||
end
|
||||
|
||||
local function register_recipe(typename, data)
|
||||
-- Handle aliases
|
||||
for i, stack in ipairs(data.input) do
|
||||
data.input[i] = ItemStack(stack):to_string()
|
||||
end
|
||||
data.output = ItemStack(data.output):to_string()
|
||||
|
||||
local recipe = {time = data.time, input = {}, output = data.output}
|
||||
local index = get_recipe_index(data.input)
|
||||
for _, stack in ipairs(data.input) do
|
||||
recipe.input[ItemStack(stack):get_name()] = ItemStack(stack):get_count()
|
||||
end
|
||||
|
||||
technic.recipes[typename].recipes[index] = recipe
|
||||
if unified_inventory then
|
||||
unified_inventory.register_craft({
|
||||
type = typename,
|
||||
output = data.output,
|
||||
items = {data.input},
|
||||
items = data.input,
|
||||
width = 0,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
function technic.get_recipe(typename, item)
|
||||
function technic.register_recipe(typename, data)
|
||||
minetest.after(0.01, register_recipe, typename, data) -- Handle aliases
|
||||
end
|
||||
|
||||
function technic.get_recipe(typename, items)
|
||||
if typename == "cooking" then -- Already builtin in Minetest, so use that
|
||||
local result = minetest.get_craft_result({
|
||||
local result, new_input = minetest.get_craft_result({
|
||||
method = "cooking",
|
||||
width = 1,
|
||||
items = {item}})
|
||||
items = items})
|
||||
-- Compatibility layer
|
||||
if not result or result.time == 0 then
|
||||
return nil
|
||||
else
|
||||
return {time = result.time,
|
||||
input = item:get_name(),
|
||||
output = result.item:to_string()}
|
||||
new_input = new_input.items,
|
||||
output = result.item}
|
||||
end
|
||||
end
|
||||
local recipe = technic.recipes[typename][item:get_name()]
|
||||
if recipe and item:get_count() >= ItemStack(recipe.input):get_count() then
|
||||
return recipe
|
||||
local index = get_recipe_index(items)
|
||||
local recipe = technic.recipes[typename].recipes[index]
|
||||
if recipe then
|
||||
local new_input = {}
|
||||
for i, stack in ipairs(items) do
|
||||
if stack:get_count() < recipe.input[stack:get_name()] then
|
||||
print(stack:get_name())
|
||||
return nil
|
||||
else
|
||||
new_input[i] = ItemStack(stack)
|
||||
new_input[i]:take_item(recipe.input[stack:get_name()])
|
||||
end
|
||||
end
|
||||
return {time = recipe.time,
|
||||
new_input = new_input,
|
||||
output = recipe.output}
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Handle aliases
|
||||
minetest.after(0.01, function ()
|
||||
for _, recipes_list in pairs(technic.recipes) do
|
||||
for ingredient, recipe in pairs(recipes_list) do
|
||||
ingredient = minetest.registered_aliases[ingredient]
|
||||
while ingredient do
|
||||
recipes_list[ingredient] = recipe
|
||||
ingredient = minetest.registered_aliases[ingredient]
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user