diff options
author | Zefram <zefram@fysh.org> | 2014-07-15 18:29:36 +0100 |
---|---|---|
committer | Zefram <zefram@fysh.org> | 2014-07-26 18:01:05 +0100 |
commit | dd65a68ce9f494717faffc98c45814f9a9d67fa4 (patch) | |
tree | 3989f84e43cf30ddb0304bc864923d301d462b30 | |
parent | 84cf6504c5068b8debd21dcb67246e45cfea700f (diff) |
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.
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 @@ Controlled by Mesecon Signal = %s Battery Box = %s Cable = %s CNC Machine = +%s Centrifuge = %s Compressor = %s Extractor = %s Forcefield Emitter = @@ -190,3 +191,4 @@ Alloy cooking = 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.."/electric_furnace.lua") 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.."/alloy_recipes.lua") 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.."/electric_furnace.lua") 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 @@ local tube = { 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 @@ function technic.register_base_machine(data) 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 @@ function technic.register_base_machine(data) 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 @@ function technic.register_base_machine(data) 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 @@ 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, diff --git a/technic/textures/technic_mv_centrifuge_bottom.png b/technic/textures/technic_mv_centrifuge_bottom.png Binary files differnew file mode 100644 index 0000000..6dcd40f --- /dev/null +++ b/technic/textures/technic_mv_centrifuge_bottom.png diff --git a/technic/textures/technic_mv_centrifuge_front.png b/technic/textures/technic_mv_centrifuge_front.png Binary files differnew file mode 100644 index 0000000..e278a33 --- /dev/null +++ b/technic/textures/technic_mv_centrifuge_front.png diff --git a/technic/textures/technic_mv_centrifuge_front_active.png b/technic/textures/technic_mv_centrifuge_front_active.png Binary files differnew file mode 100644 index 0000000..4cef912 --- /dev/null +++ b/technic/textures/technic_mv_centrifuge_front_active.png diff --git a/technic/textures/technic_mv_centrifuge_side.png b/technic/textures/technic_mv_centrifuge_side.png Binary files differnew file mode 100644 index 0000000..eeef44a --- /dev/null +++ b/technic/textures/technic_mv_centrifuge_side.png diff --git a/technic/textures/technic_mv_centrifuge_top.png b/technic/textures/technic_mv_centrifuge_top.png Binary files differnew file mode 100644 index 0000000..813bbf8 --- /dev/null +++ b/technic/textures/technic_mv_centrifuge_top.png |