mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-25 10:20:37 +01: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:
parent
84cf6504c5
commit
dd65a68ce9
@ -64,6 +64,7 @@ Controlled by Mesecon Signal =
|
|||||||
%s Battery Box =
|
%s Battery Box =
|
||||||
%s Cable =
|
%s Cable =
|
||||||
%s CNC Machine =
|
%s CNC Machine =
|
||||||
|
%s Centrifuge =
|
||||||
%s Compressor =
|
%s Compressor =
|
||||||
%s Extractor =
|
%s Extractor =
|
||||||
%s Forcefield Emitter =
|
%s Forcefield Emitter =
|
||||||
@ -190,3 +191,4 @@ Alloy cooking =
|
|||||||
Grinding =
|
Grinding =
|
||||||
Compressing =
|
Compressing =
|
||||||
Extracting =
|
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.."/grinder.lua")
|
||||||
dofile(path.."/extractor.lua")
|
dofile(path.."/extractor.lua")
|
||||||
dofile(path.."/compressor.lua")
|
dofile(path.."/compressor.lua")
|
||||||
|
dofile(path.."/centrifuge.lua")
|
||||||
|
|
||||||
dofile(path.."/tool_workshop.lua")
|
dofile(path.."/tool_workshop.lua")
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
|
|
||||||
local S = technic.getter
|
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)
|
function technic.register_alloy_recipe(data)
|
||||||
data.time = data.time or 6
|
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
|
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)
|
function technic.register_compressor_recipe(data)
|
||||||
data.time = data.time or 4
|
data.time = data.time or 4
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
local S = technic.getter
|
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)
|
function technic.register_extractor_recipe(data)
|
||||||
data.time = data.time or 4
|
data.time = data.time or 4
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
local S = technic.getter
|
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)
|
function technic.register_grinder_recipe(data)
|
||||||
data.time = data.time or 3
|
data.time = data.time or 3
|
||||||
|
@ -19,6 +19,7 @@ dofile(path.."/alloy_recipes.lua")
|
|||||||
dofile(path.."/grinder_recipes.lua")
|
dofile(path.."/grinder_recipes.lua")
|
||||||
dofile(path.."/extractor_recipes.lua")
|
dofile(path.."/extractor_recipes.lua")
|
||||||
dofile(path.."/compressor_recipes.lua")
|
dofile(path.."/compressor_recipes.lua")
|
||||||
|
dofile(path.."/centrifuge_recipes.lua")
|
||||||
|
|
||||||
-- Machines
|
-- Machines
|
||||||
dofile(path.."/alloy_furnace.lua")
|
dofile(path.."/alloy_furnace.lua")
|
||||||
@ -26,4 +27,4 @@ dofile(path.."/electric_furnace.lua")
|
|||||||
dofile(path.."/grinder.lua")
|
dofile(path.."/grinder.lua")
|
||||||
dofile(path.."/extractor.lua")
|
dofile(path.."/extractor.lua")
|
||||||
dofile(path.."/compressor.lua")
|
dofile(path.."/compressor.lua")
|
||||||
|
dofile(path.."/centrifuge.lua")
|
||||||
|
@ -17,7 +17,7 @@ local tube = {
|
|||||||
|
|
||||||
function technic.register_base_machine(data)
|
function technic.register_base_machine(data)
|
||||||
local typename = data.typename
|
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_name = data.machine_name
|
||||||
local machine_desc = data.machine_desc
|
local machine_desc = data.machine_desc
|
||||||
local tier = data.tier
|
local tier = data.tier
|
||||||
@ -35,7 +35,7 @@ function technic.register_base_machine(data)
|
|||||||
|
|
||||||
local formspec =
|
local formspec =
|
||||||
"invsize[8,9;]"..
|
"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_name;dst;5,1;2,2;]"..
|
||||||
"list[current_player;main;0,5;8,4;]"..
|
"list[current_player;main;0,5;8,4;]"..
|
||||||
"label[0,0;"..machine_desc:format(tier).."]"
|
"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)
|
meta:set_int("src_time", meta:get_int("src_time") + 1)
|
||||||
if meta:get_int("src_time") >= result.time / data.speed then
|
if meta:get_int("src_time") >= result.time / data.speed then
|
||||||
meta:set_int("src_time", 0)
|
meta:set_int("src_time", 0)
|
||||||
local result_stack = ItemStack(result.output)
|
local output = result.output
|
||||||
if inv:room_for_item("dst", result_stack) then
|
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: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
|
end
|
||||||
end
|
end
|
||||||
@ -121,7 +137,7 @@ function technic.register_base_machine(data)
|
|||||||
meta:set_int("tube_time", 0)
|
meta:set_int("tube_time", 0)
|
||||||
meta:set_string("formspec", formspec)
|
meta:set_string("formspec", formspec)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("src", numitems)
|
inv:set_size("src", input_size)
|
||||||
inv:set_size("dst", 4)
|
inv:set_size("dst", 4)
|
||||||
inv:set_size("upgrade1", 1)
|
inv:set_size("upgrade1", 1)
|
||||||
inv:set_size("upgrade2", 1)
|
inv:set_size("upgrade2", 1)
|
||||||
|
@ -1,15 +1,19 @@
|
|||||||
|
|
||||||
technic.recipes = {cooking = {numitems = 1}}
|
technic.recipes = { cooking = { input_size = 1, output_size = 1 } }
|
||||||
function technic.register_recipe_type(typename, desc, numitems)
|
function technic.register_recipe_type(typename, origdata)
|
||||||
numitems = numitems or 1
|
local data = {}
|
||||||
if unified_inventory and unified_inventory.register_craft_type then
|
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, {
|
unified_inventory.register_craft_type(typename, {
|
||||||
description = desc,
|
description = data.description,
|
||||||
height = numitems,
|
height = data.input_size,
|
||||||
width = 1,
|
width = 1,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
technic.recipes[typename] = {numitems = numitems, recipes = {}}
|
data.recipes = {}
|
||||||
|
technic.recipes[typename] = data
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_recipe_index(items)
|
local function get_recipe_index(items)
|
||||||
@ -26,7 +30,13 @@ local function register_recipe(typename, data)
|
|||||||
for i, stack in ipairs(data.input) do
|
for i, stack in ipairs(data.input) do
|
||||||
data.input[i] = ItemStack(stack):to_string()
|
data.input[i] = ItemStack(stack):to_string()
|
||||||
end
|
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 recipe = {time = data.time, input = {}, output = data.output}
|
||||||
local index = get_recipe_index(data.input)
|
local index = get_recipe_index(data.input)
|
||||||
@ -35,7 +45,7 @@ local function register_recipe(typename, data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
technic.recipes[typename].recipes[index] = recipe
|
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({
|
unified_inventory.register_craft({
|
||||||
type = typename,
|
type = typename,
|
||||||
output = data.output,
|
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