276 lines
6.0 KiB
Lua
276 lines
6.0 KiB
Lua
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_node("bitumen:concrete", {
|
|
description = "Foundation Concrete",
|
|
drawtype = "normal",
|
|
tiles = {"default_silver_sand.png^[colorize:black:120"},
|
|
groups = {cracky = 1},
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("bitumen:concrete_slab", {
|
|
description = "Foundation Concrete Slab",
|
|
drawtype = "nodebox",
|
|
tiles = {"default_silver_sand.png^[colorize:black:120"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {cracky = 1},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
|
},
|
|
},
|
|
})
|
|
|
|
minetest.register_node("bitumen:curing_concrete", {
|
|
description = "Foundation Concrete Slab",
|
|
drawtype = "nodebox",
|
|
tiles = {"default_silver_sand.png^[colorize:black:160"},
|
|
paramtype = "light",
|
|
groups = {cracky=1},
|
|
leveled = 64,
|
|
node_box = {
|
|
type = "leveled",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
}
|
|
},
|
|
drop = "",
|
|
|
|
on_timer = function(pos)
|
|
local bpos = {x=pos.x, y=pos.y-1, z=pos.z}
|
|
local bnode = minetest.get_node(bpos)
|
|
|
|
local level = minetest.get_node_level(pos)
|
|
if bnode and bnode.name == "bitumen:concrete_slab" then
|
|
if level > 42 then
|
|
minetest.set_node(bpos, {name="bitumen:concrete"})
|
|
minetest.set_node(pos, {name="bitumen:concrete_slab"})
|
|
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 > 42 then
|
|
minetest.set_node(pos, {name="bitumen:concrete"})
|
|
elseif level > 10 then
|
|
minetest.set_node(pos, {name="bitumen:concrete_slab"})
|
|
else
|
|
minetest.set_node(pos, {name="air"})
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"bitumen:wet_concrete", "bitumen:wet_concrete_full", "bitumen:curing_concrete"},
|
|
interval = 2,
|
|
chance = 5,
|
|
catch_up = true,
|
|
action = function(pos)
|
|
local t = minetest.get_node_timer(pos)
|
|
if not t:is_started() then
|
|
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
|
|
})
|
|
|
|
bitumen.register_fluid("bitumen", "wet_concrete", {
|
|
desc = "Wet Concrete",
|
|
groups = {flammable=1, petroleum=1},
|
|
|
|
colorize = "^[colorize:gray:230",
|
|
post_effect_color = {a = 10, r = 30, g = 20, b = 10},
|
|
|
|
no_default_soak = true,
|
|
evap_chance = 0,
|
|
|
|
def = {
|
|
on_timer = function(pos)
|
|
local level = minetest.get_node_level(pos)
|
|
minetest.set_node(pos, {name="bitumen:curing_concrete"})
|
|
minetest.set_node_level(pos, level)
|
|
end
|
|
},
|
|
})
|
|
|
|
|
|
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",
|
|
drawtype = "mesh",
|
|
mesh = "cement_mixer.obj",
|
|
description = "Cement Mixer",
|
|
inventory_image = "bitumen_cement_mixer_invimg.png",
|
|
tiles = {
|
|
"default_snow.png",
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -.5, -.5, -.5, .5, 1.5, .5 },
|
|
{ 1.5, 1.5, 1.5, -1.5, 4.5, -1.5 },
|
|
},
|
|
},
|
|
collision_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -.5, -.5, -.5, .5, 1.5, .5 },
|
|
{ -1.5, -1.5, -1.5, -1.4, 3, -1.4 },
|
|
{ 1.5, -1.5, -1.5, 1.4, 3, -1.4 },
|
|
{ -1.5, -1.5, 1.5, -1.4, 3, 1.4 },
|
|
{ 1.5, -1.5, 1.5, 1.4, 3, 1.4 },
|
|
{ 1.5, 1.5, 1.5, -1.5, 4.5, -1.5 },
|
|
}
|
|
},
|
|
paramtype2 = "facedir",
|
|
groups = {cracky=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)
|
|
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",
|
|
no_constructor_craft = true,
|
|
})
|
|
|
|
|
|
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"bitumen:concrete_mixer"},
|
|
interval = 2,
|
|
chance = 1,
|
|
action = function(pos)
|
|
minetest.get_node_timer(pos):start(30*60) -- concrete takes half an hour to cure at best
|
|
end
|
|
})
|
|
|
|
|
|
|
|
|
|
minetest.register_node("bitumen:chalk", {
|
|
description = "Chalk",
|
|
drawtype = "normal",
|
|
tiles = {"default_clay.png^[colorize:white:80"},
|
|
groups = {crumbly = 3, cracky = 3},
|
|
})
|
|
|
|
minetest.register_node("bitumen:lime", {
|
|
description = "Lime",
|
|
drawtype = "normal",
|
|
tiles = {"default_clay.png^[colorize:white:160"},
|
|
groups = {crumbly = 3},
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 1 part cement
|
|
-- 2 parts water
|
|
-- 3 parts sand
|
|
-- 3 parts gravel
|
|
|
|
|