%s Battery Box =
%s Cable =
%s CNC Machine =
+%s Centrifuge =
%s Compressor =
%s Extractor =
%s Forcefield Emitter =
Grinding =
Compressing =
Extracting =
+Separating =
--- /dev/null
+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,
+})
dofile(path.."/grinder.lua")
dofile(path.."/extractor.lua")
dofile(path.."/compressor.lua")
+dofile(path.."/centrifuge.lua")
dofile(path.."/tool_workshop.lua")
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
--- /dev/null
+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
--- /dev/null
+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
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
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
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
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")
dofile(path.."/grinder.lua")
dofile(path.."/extractor.lua")
dofile(path.."/compressor.lua")
-
+dofile(path.."/centrifuge.lua")
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
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).."]"
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
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)
-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)
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)
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,