unifiedbricks/init.lua

319 lines
8.5 KiB
Lua

--Unified Bricks by Vsevolod Borislav (wowiamdiamonds)
--
--License: WTFPL
--
--Depends: default, bucket, unifieddyes, vessels
--
--Obviously, offers the same colors in unifieddyes.
--Thanks go to VanessaE for making unifieddyes, gentextures.sh, etc.
unifiedbricks = {}
unifiedbricks.old_static_list = {}
unifiedbricks.old_static_list_formals = {}
minetest.register_alias("unifieddyes:white","unifieddyes:white_paint")
minetest.register_alias("unifieddyes:lightgrey","unifieddyes:lightgrey_paint")
minetest.register_alias("unifieddyes:grey","unifieddyes:grey_paint")
minetest.register_alias("unifieddyes:darkgrey","unifieddyes:darkgrey_paint")
HUES = {
"red",
"orange",
"yellow",
"lime",
"green",
"aqua",
"cyan",
"skyblue",
"blue",
"violet",
"magenta",
"redviolet",
"black",
"darkgrey",
"grey",
"lightgrey",
"white"
}
TYPES = {
"clayblock_",
"clay_",
"brick_",
"brickblock_",
"multicolor_"
}
SATURATION = {
"_s50",
""
}
DARKNESS = {
"dark_",
"medium_",
"",
"light_"
}
--formal versions
FORMALHUES = {
"Red",
"Orange",
"Yellow",
"Lime",
"Green",
"Aqua",
"Cyan",
"Sky blue",
"Blue",
"Violet",
"Magenta",
"Red violet",
"Black",
"Dark grey",
"Grey",
"Light grey",
"White"
}
FORMALTYPES = {
" clay",
" clay lump",
" brick",
" bricks",
" multicolor bricks"
}
FORMALSATURATION = {
" (low saturation)",
""
}
FORMALDARKNESS = {
"Dark ",
"Medium ",
"Bright ",
"Light "
}
-- param2-coloring-enabled nodes
minetest.register_node("unifiedbricks:brickblock", {
description = "Brick Block",
tiles = {
"unifiedbricks_brickblock.png",
{ name = "unifiedbricks_mortar.png", color = 0xffffffff },
},
drawtype = "mesh",
mesh = "unifiedbricks_brick_block.obj",
paramtype2 = "color",
palette = "unifiedbricks_ud_palette.png",
is_ground_content = true,
groups = {cracky=3, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(),
on_destruct = function(pos)
unifieddyes.on_destruct(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "unifiedbricks:brickblock")
end,
drop = "default:brick"
})
minetest.override_item("default:brick", {
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "unifiedbricks:brickblock")
end
})
minetest.register_node("unifiedbricks:clayblock", {
description = "Clay Block",
tiles = {
"unifiedbricks_clayblock.png",
},
paramtype2 = "color",
palette = "unifiedbricks_ud_palette.png",
is_ground_content = true,
groups = {crumbly=3, not_in_creative_inventory=1},
sounds = default.node_sound_dirt_defaults({
footstep = "",
}),
on_destruct = function(pos)
unifieddyes.on_destruct(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "unifiedbricks:clayblock")
end,
drop = "default:clay"
})
minetest.override_item("default:clay", {
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
unifieddyes.on_rightclick(pos, node, clicker,
itemstack, pointed_thing, "unifiedbricks:clayblock")
end
})
-- static nodes
unifiedbricks.register_old_static_block = function(name, formalname, blocktype)
table.insert(unifiedbricks.old_static_list, "unifiedbricks:"..blocktype.."_"..name)
table.insert(unifiedbricks.old_static_list_formals, formalname)
end
unifiedbricks.register_multicolor = function(name, formalname, drop_one, drop_two, drop_three)
minetest.register_node("unifiedbricks:" .. TYPES[5] .. name, {
description = formalname .. FORMALTYPES[5],
tiles = {"unifiedbricks_" .. TYPES[5] .. name .. ".png"},
is_ground_content = true,
groups = {cracky=3},
drop = {
max_items = 4,
items = {
items = {
{ "default:brick",
"unifieddyes:"..drop_one,
"unifieddyes:"..drop_two,
"unifieddyes:"..drop_three,
rarity = 1 }
}
}
},
sounds = default.node_sound_stone_defaults(),
})
end
unifiedbricks.register_multicolor_craft = function(name, dye_one, dye_two, dye_three)
minetest.register_craft( {
type = "shapeless",
output = "unifiedbricks:multicolor_" .. name,
recipe = {
"default:brick",
"unifieddyes:"..dye_one,
"unifieddyes:"..dye_two,
"unifieddyes:"..dye_three
},
})
end
--REGISTERS ALL STATIC NODES EXCEPT MULTICOLOR BRICK BLOCKS
for i = 1,17 do
for j = 1,4 do
if i > 12 then
formalname = FORMALHUES[i]
name = HUES[i]
if j == 1 then
unifiedbricks.register_old_static_block(name, formalname, "clayblock")
elseif j == 4 then
unifiedbricks.register_old_static_block(name, formalname, "brickblock")
end
else
for k = 1,4 do
if k == 4 then
formalname = FORMALDARKNESS[k] .. FORMALHUES[i]
name = DARKNESS[k] .. HUES[i]
if j == 1 then
unifiedbricks.register_old_static_block(name, formalname, "clayblock")
elseif j == 4 then
unifiedbricks.register_old_static_block(name, formalname, "brickblock")
end
else
for l = 1,2 do
formalname = FORMALDARKNESS[k] .. FORMALHUES[i] .. FORMALSATURATION[l]
name = DARKNESS[k] .. HUES[i] .. SATURATION[l]
if j == 1 then
unifiedbricks.register_old_static_block(name, formalname, "clayblock")
elseif j == 4 then
unifiedbricks.register_old_static_block(name, formalname, "brickblock")
end
end
end
end
end
end
end
--REGISTERS ALL MULTICOLOR EVERYTHING
for i = 1,13 do
if i == 13 then
name = HUES[14]
formalname = FORMALHUES[14]
brick_one = HUES[14]
brick_two = HUES[15]
brick_three = HUES[16]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
name = HUES[15]
formalname = FORMALHUES[15]
brick_one = HUES[15]
brick_two = HUES[14]
brick_three = HUES[16]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
name = HUES[16]
formalname = FORMALHUES[16]
brick_one = HUES[16]
brick_two = HUES[14]
brick_three = HUES[15]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
else
name = DARKNESS[1] .. HUES[i]
formalname = FORMALDARKNESS[1] .. FORMALHUES[i]
brick_one = DARKNESS[1] .. HUES[i]
brick_two = DARKNESS[2] .. HUES[i]
brick_three = DARKNESS[2] .. HUES[i] .. SATURATION[1]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
name = DARKNESS[2] .. HUES[i]
formalname = FORMALDARKNESS[2] .. FORMALHUES[i]
brick_one = DARKNESS[2] .. HUES[i]
brick_two = DARKNESS[1] .. HUES[i]
brick_three = DARKNESS[3] .. HUES[i] .. SATURATION[1]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
name = DARKNESS[4] .. HUES[i]
formalname = FORMALDARKNESS[4] .. FORMALHUES[i]
brick_one = DARKNESS[3] .. HUES[i]
brick_two = DARKNESS[4] .. HUES[i]
brick_three = DARKNESS[2] .. HUES[i] .. SATURATION[1]
unifiedbricks.register_multicolor(name, formalname, brick_one, brick_two, brick_three)
unifiedbricks.register_multicolor_craft(name, brick_one, brick_two, brick_three)
end
end
-- convert in-map static nodes to use param2 coloring
minetest.register_lbm({
name = "unifiedbricks:convert_brickblocks",
label = "Convert clay blocks and single-color brick blocks to use param2 color",
run_at_every_load = true,
nodenames = unifiedbricks.old_static_list,
action = function(pos, node)
local name = node.name
local t = string.find(name, "_")
local type = string.sub(name, 1, t - 1)
local color1 = string.sub(name, t + 1)
local color2 = string.gsub(color1, "grey", "_grey")
if color2 == "_grey" then color2 = "grey" end
local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color2)
if string.find(type, "brickblock") then
minetest.set_node(pos, { name = "unifiedbricks:brickblock", param2 = paletteidx })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..color1)
elseif string.find(type, "clayblock") then
minetest.set_node(pos, { name = "unifiedbricks:clayblock", param2 = paletteidx })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..color1)
end
end
})
print("[UnifiedBricks] Loaded!")