InsaneProtestor/mods/ip_terumet/material/concrete.lua
2022-11-22 00:44:34 -05:00

152 lines
4.3 KiB
Lua

local CONCRETE_COLORS = {
'#FFF',--white
'#AAA',--grey
'#666',--dark grey
'#333',--black
'#722ed4',--violet
'#2e56d4',--blue
'#5484ac',--cyan
'#135918',--dark green
'#3ad42e',--green
'#d4c12e',--yellow
'#592e13',--brown
'#d4652e',--orange
'#d42e2e',--red
'#d80481',--magenta
'#ff7272',--pink
}
local mix_base = terumet.id('block_conmix')
local block_base = terumet.id('block_con')
local FMT = string.format
local function mix_id(dye_index)
return FMT("%s_%s", mix_base, dye.dyes[dye_index][1])
end
function terumet.concrete_block_id(dye_index)
return FMT("%s_%s", block_base, dye.dyes[dye_index][1])
end
local NAMEFORMATS = {
mix="%s Concrete Mix",
block="%s Concrete Block",
door="%s Concrete Door",
wall="%s Concrete Wall",
stair="%s Concrete Stair",
slab="%s Concrete Slab"
}
local function make_name(name, dye_index)
return FMT(NAMEFORMATS[name], dye.dyes[dye_index][2])
end
local function texture(base, dye_index)
return FMT("%s^[multiply:%s", base, CONCRETE_COLORS[dye_index])
end
local function mix_texture(dye_index)
return texture(terumet.tex('block_conmix'), dye_index)
end
local function block_texture(dye_index)
return texture(terumet.tex('block_con'), dye_index)
end
local function door_texture(dye_index)
return texture(terumet.tex('door_con'), dye_index)
end
local function door_item_texture(dye_index)
return texture(terumet.tex('dinv_con'), dye_index)
end
local HARDEN_LIST = {}
local MIXES_LIST = {}
for index,dye_info in ipairs(dye.dyes) do
local con_id = 'con_'..dye_info[1]
minetest.register_node(mix_id(index), {
description = make_name('mix', index),
tiles = {mix_texture(index)},
is_ground_content = false,
groups = {crumbly=2},
--sounds = default.node_sound_sand_defaults(),
})
local block_id = terumet.concrete_block_id(index)
minetest.register_node(block_id, {
description = make_name('block', index),
tiles = {block_texture(index)},
is_ground_content = false,
groups = {cracky = 2, level = 1},
sounds = default.node_sound_stone_defaults(),
})
if index ~= 1 then
local dye_id = "group:dye,color_"..dye_info[1]
local basic_powder = mix_id(1)
minetest.register_craft{
output = mix_id(index)..' 8',
recipe = terumet.recipe_box(basic_powder, dye_id)
}
minetest.register_craft{
output = mix_id(index)..' 8',
recipe = terumet.recipe_box(basic_powder, 'dye:'..dye_info[1])
}
end
HARDEN_LIST[mix_id(index)] = block_id
table.insert(MIXES_LIST, mix_id(index))
walls.register(terumet.id('wall_'..con_id), make_name('wall', index), block_texture(index), block_id, default.node_sound_stone_defaults())
doors.register(terumet.id('door_'..con_id), {
tiles = {{name = door_texture(index), backface_culling = true}},
description = make_name('door', index),
inventory_image = door_item_texture(index),
protected = true,
groups = {cracky = 2, level = 1},
sounds = default.node_sound_stone_defaults(),
sound_open = 'doors_steel_door_open',
sound_close = 'doors_steel_door_close',
recipe = {
{block_id},
{'doors:door_steel'},
{block_id},
}
})
stairs.register_stair_and_slab(con_id, block_id,
{cracky = 2, level = 1},
{block_texture(index)},
make_name('stair',index), make_name('slab', index),
default.node_sound_stone_defaults(),
false
)
end
minetest.register_abm{
label = 'Concrete mix hardening',
nodenames = MIXES_LIST,
neighbors = {'default:water_source', 'default:water_flowing'},
interval = 3.0, -- Run every 3 seconds
chance = 1, -- always
action = function(pos, node, active_object_count, active_object_count_wider)
local harden_id = HARDEN_LIST[node.name]
if harden_id then
minetest.set_node(pos, {name = harden_id})
end
end
}
local gravel_id = 'default:gravel'
local any_sand = 'group:sand'
minetest.register_craft{
output = mix_id(1)..' 8',
recipe = {
{any_sand, gravel_id, any_sand},
{gravel_id, '', gravel_id},
{any_sand, gravel_id, any_sand}
}
}