VoxeLibre/mods/ITEMS/mcl_colorblocks/init.lua

137 lines
4.5 KiB
Lua

local init = os.clock()
local block = {}
block.dyes = {
{"white", "White", "white"},
{"grey", "Grey", "dark_grey"},
{"silver", "Light Grey", "grey"},
{"black", "Black", "black"},
{"red", "Red", "red"},
{"yellow", "Yellow", "yellow", true},
{"green", "Green", "dark_green"},
{"cyan", "Cyan", "cyan"},
{"blue", "Blue", "blue"},
{"magenta", "Magenta", "magenta", true},
{"orange", "Orange", "orange"},
{"purple", "Purple", "violet", true},
{"brown", "Brown", "brown"},
{"pink", "Pink", "pink"},
{"lime", "Lime", "green"},
{"light_blue", "Light Blue", "lightblue"},
}
minetest.register_node("mcl_colorblocks:hardened_clay", {
description = "Hardened Clay",
tiles = {"hardened_clay.png"},
stack_max = 64,
groups = {cracky=3,hardened_clay=1,building_block=1},
sounds = mcl_sounds.node_sound_stone_defaults(),
})
minetest.register_craft({
type = "cooking",
output = "mcl_colorblocks:hardened_clay",
recipe = "mcl_core:clay",
cooktime = 10,
})
for _, row in ipairs(block.dyes) do
local name = row[1]
local desc = row[2]
local craft_color_group = row[3]
-- TODO: Remove when all 16 terracotta textures are available
local terracotta = row[4]
-- Node Definition
minetest.register_node("mcl_colorblocks:hardened_clay_"..name, {
description = desc.." Hardened Clay",
tiles = {"hardened_clay_stained_"..name..".png"},
groups = {cracky=3,hardened_clay=1,building_block=1},
stack_max = 64,
sounds = mcl_sounds.node_sound_stone_defaults(),
})
minetest.register_node("mcl_colorblocks:concrete_powder_"..name, {
description = desc.." Concrete Powder",
tiles = {"mcl_colorblocks_concrete_powder_"..name..".png"},
groups = {crumbly=3,concrete_powder=1,building_block=1,falling_node=1},
stack_max = 64,
is_ground_content = false,
sounds = mcl_sounds.node_sound_sand_defaults(),
-- Specify the node to which this node will convert after getting in contact with water
_mcl_colorblocks_harden_to = "mcl_colorblocks:concrete_"..name,
})
minetest.register_node("mcl_colorblocks:concrete_"..name, {
description = desc.." Concrete",
tiles = {"mcl_colorblocks_concrete_"..name..".png"},
groups = {cracky=3,concrete=1,building_block=1},
stack_max = 64,
is_ground_content = false,
sounds = mcl_sounds.node_sound_stone_defaults(),
})
if terracotta then
local tex = "mcl_colorblocks_glazed_terracotta_"..name..".png"
local texes = { tex, tex, tex.."^[transformR180", tex, tex.."^[transformR270", tex.."^[transformR90" }
minetest.register_node("mcl_colorblocks:glazed_terracotta_"..name, {
description = desc.." Glazed Terracotta",
tiles = texes,
groups = {cracky=3,glazed_terracotta=1,building_block=1},
paramtype2 = "facedir",
stack_max = 64,
is_ground_content = false,
sounds = mcl_sounds.node_sound_stone_defaults(),
})
end
-- Crafting recipes
if craft_color_group then
minetest.register_craft({
output = 'mcl_colorblocks:hardened_clay_'..name..' 8',
recipe = {
{'mcl_colorblocks:hardened_clay', 'mcl_colorblocks:hardened_clay', 'mcl_colorblocks:hardened_clay'},
{'mcl_colorblocks:hardened_clay', 'mcl_dye:'..craft_color_group, 'mcl_colorblocks:hardened_clay'},
{'mcl_colorblocks:hardened_clay', 'mcl_colorblocks:hardened_clay', 'mcl_colorblocks:hardened_clay'},
},
})
minetest.register_craft({
type = "shapeless",
output = 'mcl_colorblocks:concrete_powder_'..name..' 8',
recipe = {
'mcl_core:sand', 'mcl_core:gravel', 'mcl_core:sand',
'mcl_core:gravel', 'mcl_dye:'..craft_color_group, 'mcl_core:gravel',
'mcl_core:sand', 'mcl_core:gravel', 'mcl_core:sand',
}
})
if terracotta then
minetest.register_craft({
type = "cooking",
output = "mcl_colorblocks:glazed_terracotta_"..name,
recipe = "mcl_colorblocks:hardened_clay_"..name,
cooktime = 10,
})
end
end
end
-- When water touches concrete powder, it turns into concrete of the same color
minetest.register_abm({
label = "Concrete powder hardening",
interval = 1,
chance = 1,
nodenames = {"group:concrete_powder"},
neighbors = {"group:water"},
action = function(pos, node)
local harden_to = minetest.registered_nodes[node.name]._mcl_colorblocks_harden_to
minetest.swap_node(pos, { name = harden_to, param = node.param, param2 = node.param2 })
end,
})
local time_to_load= os.clock() - init
print(string.format("[MOD] "..minetest.get_current_modname().." loaded in %.4f s", time_to_load))