Merge remote-tracking branch 'zefram/zefram/centrifuge'

This commit is contained in:
Vanessa Ezekowitz
2014-07-30 15:36:27 -04:00
46 changed files with 273 additions and 64 deletions

View File

@ -493,7 +493,6 @@ local default_radiation_resistance_per_node = {
["technic:mineral_uranium"] = 71,
["technic:mineral_zinc"] = 19,
["technic:stainless_steel_block"] = 40,
["technic:uranium_block"] = 500,
["technic:zinc_block"] = 36,
["tnt:tnt"] = 11,
["tnt:tnt_burning"] = 11,
@ -501,6 +500,7 @@ local default_radiation_resistance_per_node = {
local default_radiation_resistance_per_group = {
concrete = 16,
tree = 3.4,
uranium_block = 500,
wood = 1.7,
}
local cache_radiation_resistance = {}

View 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,
})

View File

@ -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")

View File

@ -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

View 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

View File

@ -0,0 +1,46 @@
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" },
}
-- Refining uranium via centrifuge is intended to make it a practical
-- necessity to set up an automated cascade of centrifuges. Once the
-- cascade has been primed, production of one 3.5%-fissile dust requires
-- input of five 0.7%-fissile dust and 490 centrifuge operations, and
-- produces four 0.0%-fissile dust as a byproduct. The busiest stage
-- of the cascade is the one taking 0.7%-fissile dust, which performs 28
-- of the 490 operations. The least busy is the one taking 3.4%-fissile
-- dust, which performs 1 of the 490 operations.
local function uranium_dust(p)
return "technic:uranium"..(p == 7 and "" or p).."_dust"
end
for p = 1, 34 do
table.insert(recipes, { uranium_dust(p).." 2", uranium_dust(p-1), uranium_dust(p+1) })
end
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

View File

@ -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
@ -15,7 +15,7 @@ local recipes = {
{"default:copper_ingot 5", "technic:copper_plate"},
{"technic:coal_dust 4", "technic:graphite"},
{"technic:carbon_cloth", "technic:carbon_plate"},
{"technic:enriched_uranium 4", "technic:uranium_fuel"},
{"technic:uranium35_ingot 5", "technic:uranium_fuel"},
}
for _, data in pairs(recipes) do

View File

@ -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
@ -24,9 +24,6 @@ local recipes = {
{"technic:raw_latex", "technic:rubber 3"},
{"moretrees:rubber_tree_trunk_empty", "technic:rubber"},
{"moretrees:rubber_tree_trunk", "technic:rubber"},
-- Other
{"technic:uranium 5", "technic:enriched_uranium"},
}
for _, data in pairs(recipes) do

View File

@ -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
@ -16,6 +16,7 @@ local recipes = {
{"default:gold_lump", "technic:gold_dust 2"},
{"default:iron_lump", "technic:wrought_iron_dust 2"},
{"technic:chromium_lump", "technic:chromium_dust 2"},
{"technic:uranium_lump", "technic:uranium_dust 2"},
{"technic:zinc_lump", "technic:zinc_dust 2"},
-- Other
@ -87,6 +88,41 @@ if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
register_dust("Talinite", "glooptest:talinite_ingot")
end
for p = 0, 35 do
local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
local psuffix = p == 7 and "" or p
local ingot = "technic:uranium"..psuffix.."_ingot"
local dust = "technic:uranium"..psuffix.."_dust"
minetest.register_craftitem(dust, {
description = S("%s Dust"):format(string.format(S("%.1f%%-Fissile Uranium"), p/10)),
inventory_image = "technic_uranium_dust.png",
on_place_on_ground = minetest.craftitem_place_item,
groups = {uranium_dust=1, not_in_creative_inventory=nici},
})
minetest.register_craft({
type = "cooking",
recipe = dust,
output = ingot,
})
technic.register_grinder_recipe({ input = {ingot}, output = dust })
end
local function uranium_dust(p)
return "technic:uranium"..(p == 7 and "" or p).."_dust"
end
for pa = 0, 34 do
for pb = pa+1, 35 do
local pc = (pa+pb)/2
if pc == math.floor(pc) then
minetest.register_craft({
type = "shapeless",
recipe = { uranium_dust(pa), uranium_dust(pb) },
output = uranium_dust(pc).." 2",
})
end
end
end
minetest.register_craft({
type = "fuel",
recipe = "technic:coal_dust",

View File

@ -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")

View File

@ -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)

View File

@ -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,
@ -70,7 +80,6 @@ function technic.get_recipe(typename, items)
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)