homedecor_modpack/homedecor_bedroom/init.lua

411 lines
11 KiB
Lua

local S = minetest.get_translator("homedecor_bedroom")
local sc_disallow = minetest.get_modpath("screwdriver") and screwdriver.disallow or nil
local wood_tex, wool_tex = homedecor.textures.wood.apple.planks, homedecor.textures.wool.white
local bed_sbox = {
type = "wallmounted",
wall_side = { -0.5, -0.5, -0.5, 0.5, 0.5, 1.5 }
}
local bed_cbox = {
type = "wallmounted",
wall_side = {
{ -0.5, -0.5, -0.5, 0.5, -0.05, 1.5 },
{ -0.5, -0.5, 1.44, 0.5, 0.5, 1.5 },
{ -0.5, -0.5, -0.5, 0.5, 0.18, -0.44 },
}
}
local kbed_sbox = {
type = "wallmounted",
wall_side = { -0.5, -0.5, -0.5, 1.5, 0.5, 1.5 }
}
local kbed_cbox = {
type = "wallmounted",
wall_side = {
{ -0.5, -0.5, -0.5, 1.5, -0.05, 1.5 },
{ -0.5, -0.5, 1.44, 1.5, 0.5, 1.5 },
{ -0.5, -0.5, -0.5, 1.5, 0.18, -0.44 },
}
}
local bed_def = minetest.registered_nodes["beds:bed"]
local bed_on_rightclick = bed_def and bed_def.on_rightclick or nil
homedecor.register("bed_regular", {
mesh = "homedecor_bed_regular.obj",
tiles = {
{ name = "homedecor_bed_frame.png", color = 0xffffffff },
{ name = wood_tex, color = 0xffffffff },
{ name = wool_tex, color = 0xffffffff },
wool_tex,
{ name = "homedecor_bed_bottom.png", color = 0xffffffff },
wool_tex.."^[brighten", -- pillow
},
inventory_image = "homedecor_bed_inv.png",
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
description = S("Bed"),
groups = {snappy=3, ud_param2_colorable = 1, dig_generic=2},
selection_box = bed_sbox,
node_box = bed_cbox,
_sound_def = {
key = "node_sound_wood_defaults",
},
on_rotate = sc_disallow or nil,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
if not placer:get_player_control().sneak then
return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing)
end
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
homedecor.unextend_bed(pos)
end,
on_dig = unifieddyes.on_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local itemname = itemstack:get_name()
if itemname == "homedecor:bed_regular" then
homedecor.bed_expansion(pos, clicker, itemstack, pointed_thing, true)
elseif bed_on_rightclick then
bed_on_rightclick(pos, node, clicker)
end
return itemstack
end,
crafts = {
{
recipe = {
{ "group:stick", "", "group:stick" },
{ "wool_white", "wool_white", "wool_white" },
{ "group:wood", "", "group:wood" },
},
}
}
})
homedecor.register("bed_extended", {
mesh = "homedecor_bed_extended.obj",
tiles = {
{ name = "homedecor_bed_frame.png", color = 0xffffffff },
{ name = wood_tex, color = 0xffffffff },
{ name = wool_tex, color = 0xffffffff },
wool_tex,
{ name = "homedecor_bed_bottom.png", color = 0xffffffff },
wool_tex.."^[brighten",
},
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
selection_box = bed_sbox,
node_box = bed_cbox,
groups = {snappy=3, ud_param2_colorable = 1, dig_generic=2, not_in_creative_inventory=1},
_sound_def = {
key = "node_sound_wood_defaults",
},
expand = { forward = "air" },
on_rotate = sc_disallow or nil,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
homedecor.unextend_bed(pos)
end,
on_dig = unifieddyes.on_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if bed_on_rightclick then
bed_on_rightclick(pos, node, clicker)
end
return itemstack
end,
drop = "homedecor:bed_regular"
})
homedecor.register("bed_kingsize", {
mesh = "homedecor_bed_kingsize.obj",
tiles = {
{ name = "homedecor_bed_frame.png", color = 0xffffffff },
{ name = wood_tex, color = 0xffffffff },
{ name = wool_tex, color = 0xffffffff },
wool_tex,
{ name = "homedecor_bed_bottom.png", color = 0xffffffff },
wool_tex.."^[brighten",
},
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
inventory_image = "homedecor_bed_kingsize_inv.png",
description = S("Bed (king sized)"),
groups = {snappy=3, ud_param2_colorable = 1, dig_generic=2},
selection_box = kbed_sbox,
node_box = kbed_cbox,
_sound_def = {
key = "node_sound_wood_defaults",
},
on_rotate = sc_disallow or nil,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
local inv = digger:get_inventory()
if digger:get_player_control().sneak and inv:room_for_item("main", "homedecor:bed_regular 2") then
inv:remove_item("main", "homedecor:bed_kingsize 1")
inv:add_item("main", "homedecor:bed_regular 2")
end
end,
on_dig = unifieddyes.on_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if bed_on_rightclick then
bed_on_rightclick(pos, node, clicker)
end
return itemstack
end,
crafts = {
{
recipe = {
{ "homedecor:bed_regular", "homedecor:bed_regular" }
},
}
}
})
for w, d in pairs({ ["mahogany"] = S("mahogany"), ["oak"] = S("oak") }) do
homedecor.register("nightstand_"..w.."_one_drawer", {
description = S("Nightstand with One Drawer (@1)", d),
tiles = { 'homedecor_nightstand_'..w..'_tb.png',
'homedecor_nightstand_'..w..'_tb.png^[transformFY',
'homedecor_nightstand_'..w..'_lr.png^[transformFX',
'homedecor_nightstand_'..w..'_lr.png',
'homedecor_nightstand_'..w..'_back.png',
'homedecor_nightstand_'..w..'_1_drawer_front.png'},
node_box = {
type = "fixed",
fixed = {
{ -8/16, 0, -30/64, 8/16, 8/16, 8/16 }, -- top half
{ -7/16, 1/16, -32/64, 7/16, 7/16, -29/64}, -- drawer face
{ -8/16, -8/16, -30/64, -7/16, 0, 8/16 }, -- left
{ 7/16, -8/16, -30/64, 8/16, 0, 8/16 }, -- right
{ -8/16, -8/16, 7/16, 8/16, 0, 8/16 }, -- back
{ -8/16, -8/16, -30/64, 8/16, -7/16, 8/16 } -- bottom
}
},
groups = { snappy = 3, dig_tree = 2 },
_sound_def = {
key = "node_sound_wood_defaults",
},
selection_box = { type = "regular" },
infotext=S("One-drawer Nightstand"),
inventory = {
size=8,
lockable=true,
},
})
homedecor.register("nightstand_"..w.."_two_drawers", {
description = S("Nightstand with Two Drawers (@1)", d),
tiles = { 'homedecor_nightstand_'..w..'_tb.png',
'homedecor_nightstand_'..w..'_tb.png^[transformFY',
'homedecor_nightstand_'..w..'_lr.png^[transformFX',
'homedecor_nightstand_'..w..'_lr.png',
'homedecor_nightstand_'..w..'_back.png',
'homedecor_nightstand_'..w..'_2_drawer_front.png'},
node_box = {
type = "fixed",
fixed = {
{ -8/16, -8/16, -30/64, 8/16, 8/16, 8/16 }, -- main body
{ -7/16, 1/16, -32/64, 7/16, 7/16, -29/64 }, -- top drawer face
{ -7/16, -7/16, -32/64, 7/16, -1/16, -29/64 }, -- bottom drawer face
}
},
groups = { snappy = 3, dig_tree = 2 },
_sound_def = {
key = "node_sound_wood_defaults",
},
selection_box = { type = "regular" },
infotext=S("Two-drawer Nightstand"),
inventory = {
size=16,
lockable=true,
},
})
end
-- convert to param2 colorization
local bedcolors = {
"black",
"brown",
"blue",
"cyan",
"darkgrey",
"dark_green",
"green",
"grey",
"magenta",
"orange",
"pink",
"red",
"violet",
"white",
"yellow"
}
local old_bed_nodes = {}
for _, color in ipairs(bedcolors) do
table.insert(old_bed_nodes, "homedecor:bed_"..color.."_regular")
table.insert(old_bed_nodes, "homedecor:bed_"..color.."_extended")
table.insert(old_bed_nodes, "homedecor:bed_"..color.."_kingsize")
end
minetest.register_lbm({
name = ":homedecor:convert_beds",
label = "Convert homedecor static bed nodes to use param2 color",
run_at_every_load = false,
nodenames = old_bed_nodes,
action = function(pos, node)
local name = node.name
local color = string.sub(name, string.find(name, "_") + 1)
-- -10 puts us near the end of the color field
color = string.sub(color, 1, string.find(color, "_", -10) - 1)
if color == "darkgrey" then
color = "dark_grey"
end
local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
local old_fdir = math.floor(node.param2 % 32)
local new_fdir = 3
local new_name
if old_fdir == 0 then
new_fdir = 3
elseif old_fdir == 1 then
new_fdir = 4
elseif old_fdir == 2 then
new_fdir = 2
elseif old_fdir == 3 then
new_fdir = 5
end
local param2 = paletteidx + new_fdir
if string.find(name, "regular") then
new_name = "homedecor:bed_regular"
elseif string.find(name, "extended") then
new_name = "homedecor:bed_extended"
else
new_name = "homedecor:bed_kingsize"
end
minetest.set_node(pos, { name = new_name, param2 = param2 })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..color)
end
})
-- crafting
minetest.register_craft( {
output = "homedecor:nightstand_oak_one_drawer",
recipe = {
{ "homedecor:drawer_small" },
{ "group:wood" },
},
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:nightstand_oak_one_drawer",
burntime = 30,
})
minetest.register_craft( {
output = "homedecor:nightstand_oak_two_drawers",
recipe = {
{ "homedecor:drawer_small" },
{ "homedecor:drawer_small" },
{ "group:wood" },
},
})
minetest.register_craft( {
output = "homedecor:nightstand_oak_two_drawers",
recipe = {
{ "homedecor:nightstand_oak_one_drawer" },
{ "homedecor:drawer_small" },
},
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:nightstand_oak_two_drawers",
burntime = 30,
})
--
minetest.register_craft( {
type = "shapeless",
output = "homedecor:nightstand_mahogany_one_drawer",
recipe = {
"homedecor:nightstand_oak_one_drawer",
homedecor.materials.dye_brown,
},
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:nightstand_mahogany_one_drawer",
burntime = 30,
})
minetest.register_craft( {
type = "shapeless",
output = "homedecor:nightstand_mahogany_two_drawers",
recipe = {
"homedecor:nightstand_oak_two_drawers",
homedecor.materials.dye_brown,
},
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:nightstand_mahogany_two_drawers",
burntime = 30,
})
unifieddyes.register_color_craft({
output = "homedecor:bed_regular",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_regular",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "homedecor:bed_kingsize",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_kingsize",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "homedecor:bed_kingsize",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_regular",
recipe = {
"NEUTRAL_NODE",
"NEUTRAL_NODE",
"MAIN_DYE"
}
})