forked from minetest-mods/technic
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:
parent
84cf6504c5
commit
dd65a68ce9
|
@ -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 =
|
||||
|
|
16
technic/machines/MV/centrifuge.lua
Normal file
16
technic/machines/MV/centrifuge.lua
Normal file
|
@ -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,
|
||||
})
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
8
technic/machines/register/centrifuge.lua
Normal file
8
technic/machines/register/centrifuge.lua
Normal file
|
@ -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
|
31
technic/machines/register/centrifuge_recipes.lua
Normal file
31
technic/machines/register/centrifuge_recipes.lua
Normal file
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
BIN
technic/textures/technic_mv_centrifuge_bottom.png
Normal file
BIN
technic/textures/technic_mv_centrifuge_bottom.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 674 B |
BIN
technic/textures/technic_mv_centrifuge_front.png
Normal file
BIN
technic/textures/technic_mv_centrifuge_front.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 686 B |
BIN
technic/textures/technic_mv_centrifuge_front_active.png
Normal file
BIN
technic/textures/technic_mv_centrifuge_front_active.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 686 B |
BIN
technic/textures/technic_mv_centrifuge_side.png
Normal file
BIN
technic/textures/technic_mv_centrifuge_side.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 636 B |
BIN
technic/textures/technic_mv_centrifuge_top.png
Normal file
BIN
technic/textures/technic_mv_centrifuge_top.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 814 B |
Loading…
Reference in New Issue
Block a user