greeknodes/marble.lua
2021-04-11 22:04:51 -07:00

238 lines
7.5 KiB
Lua

-- Polished marble nodes
greek.marble_groups = {cracky = 2}
greek.marble_sounds = greek.default_sounds("node_sound_stone_defaults")
greek.register_node_and_stairs("greek:marble_polished", {
description = "Polished Marble",
tiles = {"greek_marble_polished.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
for _, item in pairs(greek.settings_list("marble")) do
greek.add_group(item, "marble")
end
minetest.register_craft({
output = "greek:marble_polished 9",
recipe = {
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
{"group:greek:marble", "group:greek:marble", "group:greek:marble"},
},
})
minetest.register_craft({
output = "greek:marble_polished",
recipe = "greek:marble_cobble",
type = "cooking",
cooktime = 5,
})
greek.register_node_and_stairs("greek:marble_polished_block", {
description = "Polished Marble Block",
tiles = {"greek_marble_polished_block.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:marble_polished_block 4",
recipe = {
{"greek:marble_polished", "greek:marble_polished"},
{"greek:marble_polished", "greek:marble_polished"},
}
})
greek.register_node_and_stairs("greek:marble_cobble", {
description = "Marble Cobble",
tiles = {"greek_marble_cobble.png"},
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
minetest.register_craft({
output = "greek:marble_cobble 5",
recipe = {
{"greek:marble_polished", "", "greek:marble_polished"},
{"", "greek:marble_polished", ""},
{"greek:marble_polished", "", "greek:marble_polished"},
},
})
-- Marble pillars
greek.register_node_and_stairs("greek:marble_pillar", {
description = "Marble Pillar",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_side.png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
minetest.register_craft({
output = "greek:marble_pillar 2",
recipe = {
{"greek:marble_polished"},
{"greek:marble_polished"},
},
})
local pillar_heads = {"doric", "ionic", "corinthian"}
for _, head in pairs(pillar_heads) do
minetest.register_node("greek:marble_pillar_head_" .. head, {
description = head:gsub("^%l", string.upper) .. " Marble Pillar Head",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_head_" .. head .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
minetest.register_node("greek:marble_pillar_base_" .. head, {
description = head:gsub("^%l", string.upper) .. " Marble Pillar Base",
tiles = {"greek_marble_pillar_top.png", "greek_marble_pillar_top.png", "greek_marble_pillar_base_" .. head .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_place = minetest.rotate_node,
})
end
-- Ionic pillar head has some special side tiles
minetest.override_item("greek:marble_pillar_head_ionic", {
tiles = {
"greek_marble_pillar_top.png", "greek_marble_pillar_top.png",
"greek_marble_pillar_head_ionic_side.png", "greek_marble_pillar_head_ionic_side.png",
"greek_marble_pillar_head_ionic.png", "greek_marble_pillar_head_ionic.png",
},
})
greek.register_craftring("greek:marble_pillar_head_%s", pillar_heads)
greek.register_craftring("greek:marble_pillar_base_%s", pillar_heads)
minetest.register_craft({
output = "greek:marble_pillar_head_" .. pillar_heads[1] .. " 4",
recipe = {
{"greek:marble_pillar", "greek:marble_polished", "greek:marble_pillar"},
{"", "greek:marble_pillar", ""},
},
})
minetest.register_craft({
output = "greek:marble_pillar_base_" .. pillar_heads[1] .. " 4",
recipe = {
{"", "greek:marble_pillar", ""},
{"greek:marble_pillar", "greek:marble_polished", "greek:marble_pillar"},
},
})
-- Carved marble tiles
local tile_total = 6
for i = 1, tile_total do
greek.register_node_and_stairs("greek:marble_tile_" .. i, {
description = "Marble Tile " .. i,
tiles = {"greek_marble_tile_" .. i .. ".png"},
paramtype2 = "facedir",
groups = greek.marble_groups,
sounds = greek.marble_sounds,
})
end
greek.register_craftring("greek:marble_tile_%s", tile_total)
minetest.register_craft({
output = "greek:marble_tile_1 4",
recipe = {
{"greek:marble_polished_block", "greek:marble_polished_block"},
{"greek:marble_polished_block", "greek:marble_polished_block"},
}
})
-- Painted marble tiles
-- type name = {total, list of recipe shapes}
local types = {
center = {12, {{
{0, 1, 0},
{1, 1, 1},
{0, 1, 0},
}}},
corner = {12, {
{{1, 0, 0}, {1, 0, 0}, {1, 1, 1}},
{{0, 0, 1}, {0, 0, 1}, {1, 1, 1}},
{{1, 1, 1}, {0, 0, 1}, {0, 0, 1}},
{{1, 1, 1}, {1, 0, 0}, {1, 0, 0}}
}},
edge = {12, {{
{1, 0, 1},
{0, 1, 0},
{1, 0, 1},
}}}
}
-- Palette colors and corresponding dyes
local palette = {[0] = "#0058af", "#ffdf7e", "#040404", "#fd294d", "#fa8a2d", "#067f23", "#8f54f5", "#f39ae4"}
local dyes = {["dye:blue"] = 0, ["dye:yellow"] = 1, ["dye:black"] = 2, ["dye:red"] = 3, ["dye:orange"] = 4, ["dye:green"] = 5, ["dye:violet"] = 6, ["dye:pink"] = 7}
local dye_punch = function(pos, node, puncher, pointed)
if not minetest.is_protected(pos, puncher:get_player_name()) then
local stack = puncher:get_wielded_item():get_name()
if dyes[stack] then
minetest.swap_node(pos, {name = node.name, param2 = (dyes[stack] * 32) + (node.param2 % 32)})
end
end
return minetest.node_punch(pos, node, puncher, pointed)
end
for type, data in pairs(types) do
local total = data[1]
for i = 1, total do
local name = ("greek:marble_painted_%s_%s"):format(type, i)
local tile = ("greek_marble_painted_%s_%s.png"):format(type, i)
greek.register_node_and_stairs(name, {
description = ("Painted %s Marble %s"):format(type:gsub("^%l", string.upper), i),
tiles = {{name = "greek_marble_polished.png", color = "white"}},
overlay_tiles = {tile, tile .. "^[transformFX", tile, tile .. "^[transformFY", tile .. "^[transformFX", tile .. "^[transformR180"},
paramtype2 = "colorfacedir",
palette = "greek_marble_painted_palette.png",
color = palette[0], -- This is used for inventory color
use_texture_alpha = true,
groups = greek.marble_groups,
sounds = greek.marble_sounds,
on_punch = dye_punch,
})
for dye, color in pairs(dyes) do
minetest.register_craft({
output = minetest.itemstring_with_color(name, palette[color]),
recipe = {name, dye},
replacements = {{dye, dye}},
type = "shapeless",
})
end
end
greek.register_craftring("greek:marble_painted_" .. type .. "_%s", total)
-- Fill recipe template with items
local items = {[0] = "greek:marble_polished", "group:dye"}
for _, recipe in pairs(data[2]) do
local filled = {}
for row in pairs(recipe) do
filled[row] = {}
for col in pairs(recipe[row]) do
filled[row][col] = items[recipe[row][col]]
end
end
minetest.register_craft({
output = ("greek:marble_painted_%s_1 4"):format(type),
recipe = filled,
})
end
end