cement mixer, concrete tweaks

master
Izzy 2019-04-22 23:59:53 -06:00
parent 9d2581c8ef
commit fdcc77edf2
7 changed files with 1745 additions and 549 deletions

View File

@ -51,16 +51,17 @@ bitumen.register_blueprint = function(def)
groups = {flammable = 3},
})
-- the actual constructor must be registered elsewhere
minetest.register_craft({
output = def.name..'_constructor',
recipe = {
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', name, 'default:steel_ingot'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
}
})
if not def.no_constructor_craft then
-- the actual constructor must be registered elsewhere
minetest.register_craft({
output = def.name..'_constructor',
recipe = {
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
{'default:steel_ingot', name, 'default:steel_ingot'},
{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
}
})
end
bitumen.registered_blueprints[name] = def
end

View File

@ -49,19 +49,19 @@ minetest.register_node("bitumen:curing_concrete", {
local level = minetest.get_node_level(pos)
if bnode and bnode.name == "bitumen:concrete_slab" then
if level > 48 then
if level > 42 then
minetest.set_node(bpos, {name="bitumen:concrete"})
minetest.set_node(pos, {name="bitumen:concrete_slab"})
elseif level > 16 then
elseif level > 10 then
minetest.set_node(bpos, {name="bitumen:concrete"})
minetest.set_node(pos, {name="air"})
else
minetest.set_node(pos, {name="air"})
end
else
if level > 48 then
if level > 42 then
minetest.set_node(pos, {name="bitumen:concrete"})
elseif level > 16 then
elseif level > 10 then
minetest.set_node(pos, {name="bitumen:concrete_slab"})
else
minetest.set_node(pos, {name="air"})
@ -80,7 +80,7 @@ minetest.register_abm({
action = function(pos)
local t = minetest.get_node_timer(pos)
if not t:is_started() then
t:start(10*60) -- concrete takes twenty to cure at best
t:start(15*60) -- concrete takes 30 minutes to cure at best
-- minetest.get_node_timer(pos):start(5) -- fast cure for debugging
end
end
@ -106,6 +106,18 @@ bitumen.register_fluid("bitumen", "wet_concrete", {
})
local cement_mixer_formspec =
"size[10,9;]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
"list[context;main;0,0.3;5,4;]" ..
"list[current_player;main;0,4.85;8,1;]" ..
"list[current_player;main;0,6.08;8,3;8]" ..
"listring[context;main]" ..
"listring[current_player;main]" ..
default.get_hotbar_bg(0, 4.85)
minetest.register_node("bitumen:cement_mixer", {
paramtype = "light",
@ -138,22 +150,88 @@ minetest.register_node("bitumen:cement_mixer", {
groups = {choppy=1, petroleum_fixture=1},
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 20)
meta:set_string("formspec", cement_mixer_formspec);
end,
on_timer = function(pos, elapsed)
local meta = minetest.get_meta(pos)
local cache = meta:get_int("cache") or 0
if cache < 32 then
local inv = meta:get_inventory();
if not inv:contains_item("main", "bitumen:lime 1") then
print("not enough lime")
return false
end
if not inv:contains_item("main", "default:gravel 3") then
print("not enough gravel")
return false
end
if not inv:contains_item("main", "bucket:bucket_water 2") then
print("not enough water")
return false
end
if not (
inv:contains_item("main", "default:sand 3")
) then
print("not enough sand")
return false
end
inv:remove_item("main", "default:sand 1")
inv:remove_item("main", "default:sand 1")
inv:remove_item("main", "default:sand 1")
inv:remove_item("main", "bitumen:lime 1")
inv:remove_item("main", "default:gravel 1")
inv:remove_item("main", "default:gravel 1")
inv:remove_item("main", "default:gravel 1")
cache = cache + (9 * 64)
end
local pushed = bitumen.pipes.push_fluid({x=pos.x, y=pos.y-1, z=pos.z}, "bitumen:wet_concrete", 32, 1)
meta:set_int("cache", cache - pushed)
return true
end,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory();
return inv:is_empty("main")
end,
-- spit out some concrete
on_punch = function(pos)
print("concrete mixer punched")
local take = bitumen.pipes.push_fluid({x=pos.x, y=pos.y-1, z=pos.z}, "bitumen:wet_concrete", 20, 5)
print("take ".. take)
local timer = minetest.get_node_timer(pos)
if timer:is_started() then
timer:stop()
else
timer:start(3.0)
end
end,
})
bitumen.register_blueprint({name="bitumen:cement_mixer"})
bitumen.register_blueprint({
name="bitumen:cement_mixer",
no_constructor_craft = true,
})

View File

@ -129,6 +129,15 @@ minetest.register_craft({
minetest.register_craft({
output = 'bitumen:cement_mixer',
recipe = {
{'bitumen:galv_steel_sheet', '', 'bitumen:galv_steel_sheet',},
{'bitumen:galv_steel_sheet', 'bitumen:cement_mixer_blueprint', 'bitumen:galv_steel_sheet',},
{'', 'bitumen:spout', ''},
}
})
-- concrete's recipe is:
-- ---------------------

View File

@ -85,7 +85,7 @@ dofile(modpath.."/magic_nodes.lua")
dofile(modpath.."/blueprints.lua")
dofile(modpath.."/pipes.lua")
dofile(modpath.."/burner.lua")
--dofile(modpath.."/pipeline.lua")
-- dofile(modpath.."/pipeline.lua")
-- next core nodes
dofile(modpath.."/fluids.lua")

File diff suppressed because it is too large Load Diff

View File

@ -5,22 +5,25 @@
local networks = {}
local net_members = {}
local storage = {}
local netname = 1
local mod_storage = minetest.get_mod_storage()
--local mod_storage = minetest.get_mod_storage()
local mod_storage = bitumen.mod_storage -- minetest.get_mod_storage()
networks = minetest.deserialize(mod_storage:get_string("pl_networks")) or {}
net_members = minetest.deserialize(mod_storage:get_string("pl_net_members")) or {}
storage = minetest.deserialize(mod_storage:get_string("pl_storage")) or {}
netname = mod_storage:get_int("pl_netname") or 1
local function save_data()
--print("saving")
mod_storage:set_string("pl_networks", minetest.serialize(networks))
mod_storage:set_string("pl_net_members", minetest.serialize(net_members))
mod_storage:set_string("pl_storage", minetest.serialize(storage))
mod_storage:set_int("pl_netname", netname)
end
@ -42,6 +45,12 @@ local function new_network(pos)
outputs = {},
buffer = 0,
in_pressure = -32000,
storage = {
--[[
[entry_hash] = < storage_center_hash >
]]
}
}
net_members[hash] = hash
@ -502,7 +511,7 @@ minetest.register_node("bitumen:storage_tank_constructor", {
)
if ret == false then
minetest.chat_send_player(player:get_player_name(), "Foundation is incomplete: 15x3x15")
minetest.chat_send_player(player:get_player_name(), "Foundation is incomplete: 30x3x30")
return
else
minetest.chat_send_player(player:get_player_name(), "Foundation is complete.")
@ -519,7 +528,7 @@ minetest.register_node("bitumen:storage_tank_constructor", {
)
if ret == false then
minetest.chat_send_player(player:get_player_name(), "Area is not clear: 16x12x16")
minetest.chat_send_player(player:get_player_name(), "Area is not clear: 32x12x32")
return
else
minetest.chat_send_player(player:get_player_name(), "Area is clear.")

View File

@ -5,8 +5,9 @@ local networks = {}
local net_members = {}
local netname = 1
local mod_storage = minetest.get_mod_storage()
bitumen.mod_storage = minetest.get_mod_storage()
local mod_storage = bitumen.mod_storage
networks = minetest.deserialize(mod_storage:get_string("networks")) or {}
@ -604,7 +605,7 @@ minetest.register_abm({
pos.y = pos.y - 1
local bnode = minetest.get_node(pos)
local avail = math.min(10, pnet.buffer) -- pnet.buffer / #pnet.outputs
local avail = math.min(16, pnet.buffer) -- pnet.buffer / #pnet.outputs
if bnode.name == pnet.fluid then
local blevel = minetest.get_node_level(pos)
local cap = 64 - blevel