unifiedbricks/init.lua
Vanessa Ezekowitz a1a187d220 Use param2-based colorization wherever possible
for brick blocks and clay blocks.

Also, this gets rid of the tons and tons of single bricks
and lumps of clay, and gets rid of the related crafts,
replacing them with a simple place-and-paint scheme
for the clay blocks and single-color brick block.

Place a default brick block or default clay block, then
right-click on it with a dye color to paint it.

Digging one of these will return a default brick or clay
block and the dye you painted it with.

For the multi-color brick blocks, craft them using a single
default brick block and three portions of dye.  Digging one
returns a default brick block and three portions of dye.

Multi-color brick blocks are now in the creative inventory.
2017-01-25 13:20:27 -05:00

321 lines
8.6 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)
print(dump(color))
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)
print(dump(color))
end
end
})
print("[UnifiedBricks] Loaded!")