mirror of
https://github.com/Sokomine/cottages.git
synced 2024-11-05 10:00:21 +01:00
379 lines
11 KiB
Lua
379 lines
11 KiB
Lua
---------------------------------------------------------------------------------------
|
|
-- furniture
|
|
---------------------------------------------------------------------------------------
|
|
-- contains:
|
|
-- * a bed seperated into foot and head reagion so that it can be placed manually; it has
|
|
-- no other functionality than decoration!
|
|
-- * a sleeping mat - mostly for NPC that cannot afford a bet yet
|
|
-- * bench - if you don't have 3dforniture:chair, then this is the next best thing
|
|
-- * table - very simple one
|
|
-- * shelf - for stroring things; this one is 3d
|
|
-- * stovepipe - so that the smoke from the furnace can get away
|
|
-- * washing place - put it over a water source and you can 'wash' yourshelf
|
|
---------------------------------------------------------------------------------------
|
|
-- TODO: change the textures of the bed (make the clothing white, foot path not entirely covered with cloth)
|
|
|
|
-- Boilerplate to support localized strings if intllib mod is installed.
|
|
local S
|
|
if intllib then
|
|
S = intllib.Getter()
|
|
else
|
|
S = function(s) return s end
|
|
end
|
|
|
|
-- a bed without functionality - just decoration
|
|
minetest.register_node("cottages:bed_foot", {
|
|
description = S("Bed (foot region)"),
|
|
drawtype = "nodebox",
|
|
tiles = {"cottages_beds_bed_top_bottom.png", "default_wood.png", "cottages_beds_bed_side.png", "cottages_beds_bed_side.png", "cottages_beds_bed_side.png", "cottages_beds_bed_side.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
-- bed
|
|
{-0.5, 0.0, -0.5, 0.5, 0.3, 0.5},
|
|
|
|
-- stützen
|
|
{-0.5, -0.5, -0.5, -0.4, 0.5, -0.4},
|
|
{ 0.4,-0.5, -0.5, 0.5, 0.5, -0.4},
|
|
|
|
-- Querstrebe
|
|
{-0.4, 0.3, -0.5, 0.4, 0.5, -0.4}
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.3, 0.5},
|
|
}
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
-- the bed is split up in two parts to avoid destruction of blocks on placement
|
|
minetest.register_node("cottages:bed_head", {
|
|
description = S("Bed (head region)"),
|
|
drawtype = "nodebox",
|
|
tiles = {"cottages_beds_bed_top_top.png", "default_wood.png", "cottages_beds_bed_side_top_r.png", "cottages_beds_bed_side_top_l.png", "default_wood.png", "cottages_beds_bed_side.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
-- bed
|
|
{-0.5, 0.0, -0.5, 0.5, 0.3, 0.5},
|
|
|
|
-- stützen
|
|
{-0.5,-0.5, 0.4, -0.4, 0.5, 0.5},
|
|
{ 0.4,-0.5, 0.4, 0.5, 0.5, 0.5},
|
|
|
|
-- Querstrebe
|
|
{-0.4, 0.3, 0.4, 0.4, 0.5, 0.5}
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.3, 0.5},
|
|
}
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
|
|
-- the basic version of a bed - a sleeping mat
|
|
-- to facilitate upgrade path straw mat -> sleeping mat -> bed, this uses a nodebox
|
|
minetest.register_node("cottages:sleeping_mat", {
|
|
description = S("sleeping mat"),
|
|
drawtype = 'nodebox',
|
|
tiles = { 'cottages_sleepingmat.png' }, -- done by VanessaE
|
|
wield_image = 'cottages_sleepingmat.png',
|
|
inventory_image = 'cottages_sleepingmat.png',
|
|
sunlight_propagates = true,
|
|
paramtype = 'light',
|
|
paramtype2 = "facedir",
|
|
walkable = false,
|
|
groups = { snappy = 3 },
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "wallmounted",
|
|
},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.48, -0.5,-0.48, 0.48, -0.45, 0.48},
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.48, -0.5,-0.48, 0.48, -0.25, 0.48},
|
|
}
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
|
|
|
|
-- furniture; possible replacement: 3dforniture:chair
|
|
minetest.register_node("cottages:bench", {
|
|
drawtype = "nodebox",
|
|
description = S("simple wooden bench"),
|
|
tiles = {"cottages_minimal_wood.png", "cottages_minimal_wood.png", "cottages_minimal_wood.png", "cottages_minimal_wood.png", "cottages_minimal_wood.png", "cottages_minimal_wood.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
sounds = default.node_sound_wood_defaults(),
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
-- sitting area
|
|
{-0.5, -0.15, 0.1, 0.5, -0.05, 0.5},
|
|
|
|
-- stützen
|
|
{-0.4, -0.5, 0.2, -0.3, -0.15, 0.4},
|
|
{ 0.3, -0.5, 0.2, 0.4, -0.15, 0.4},
|
|
}
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, 0, 0.5, 0, 0.5},
|
|
}
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
|
|
-- a simple table; possible replacement: 3dforniture:table
|
|
minetest.register_node("cottages:table", {
|
|
description = S("table"),
|
|
drawtype = "nodebox",
|
|
-- top, bottom, side1, side2, inner, outer
|
|
tiles = {"cottages_minimal_wood.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.1, -0.5, -0.1, 0.1, 0.3, 0.1},
|
|
{ -0.5, 0.3, -0.5, 0.5, 0.4, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, -0.5, 0.5, 0.4, 0.5},
|
|
},
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
|
|
-- looks better than two slabs impersonating a shelf; also more 3d than a bookshelf
|
|
-- the infotext shows if it's empty or not
|
|
minetest.register_node("cottages:shelf", {
|
|
description = S("open storage shelf"),
|
|
drawtype = "nodebox",
|
|
-- top, bottom, side1, side2, inner, outer
|
|
tiles = {"cottages_minimal_wood.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
|
|
{ -0.5, -0.5, -0.3, -0.4, 0.5, 0.5},
|
|
{ 0.4, -0.5, -0.3, 0.5, 0.5, 0.5},
|
|
|
|
{ -0.5, -0.2, -0.3, 0.5, -0.1, 0.5},
|
|
{ -0.5, 0.3, -0.3, 0.5, 0.4, 0.5},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
|
|
on_construct = function(pos)
|
|
|
|
local meta = minetest.get_meta(pos);
|
|
|
|
meta:set_string("formspec",
|
|
"size[8,8]"..
|
|
"list[current_name;main;0,0;8,3;]"..
|
|
"list[current_player;main;0,4;8,4;]")
|
|
meta:set_string("infotext", S("open storage shelf"))
|
|
local inv = meta:get_inventory();
|
|
inv:set_size("main", 24);
|
|
end,
|
|
|
|
can_dig = function( pos,player )
|
|
local meta = minetest.get_meta( pos );
|
|
local inv = meta:get_inventory();
|
|
return inv:is_empty("main");
|
|
end,
|
|
|
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
local meta = minetest.get_meta( pos );
|
|
meta:set_string('infotext', S('open storage shelf (in use)'));
|
|
end,
|
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
local meta = minetest.get_meta( pos );
|
|
local inv = meta:get_inventory();
|
|
if( inv:is_empty("main")) then
|
|
meta:set_string('infotext', S('open storage shelf (empty)'));
|
|
end
|
|
end,
|
|
is_ground_content = false,
|
|
|
|
|
|
})
|
|
|
|
-- so that the smoke from a furnace can get out of a building
|
|
minetest.register_node("cottages:stovepipe", {
|
|
description = S("stovepipe"),
|
|
drawtype = "nodebox",
|
|
tiles = {"default_steel_block.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ 0.20, -0.5, 0.20, 0.45, 0.5, 0.45},
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ 0.20, -0.5, 0.20, 0.45, 0.5, 0.45},
|
|
},
|
|
},
|
|
is_ground_content = false,
|
|
})
|
|
|
|
|
|
-- this washing place can be put over a water source (it is open at the bottom)
|
|
minetest.register_node("cottages:washing", {
|
|
description = S("washing place"),
|
|
drawtype = "nodebox",
|
|
-- top, bottom, side1, side2, inner, outer
|
|
tiles = {"default_clay.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, -0.5, 0.5, -0.2, -0.2},
|
|
|
|
{ -0.5, -0.5, -0.2, -0.4, 0.2, 0.5},
|
|
{ 0.4, -0.5, -0.2, 0.5, 0.2, 0.5},
|
|
|
|
{ -0.4, -0.5, 0.4, 0.4, 0.2, 0.5},
|
|
{ -0.4, -0.5, -0.2, 0.4, 0.2, -0.1},
|
|
|
|
},
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, -0.5, 0.5, 0.2, 0.5},
|
|
},
|
|
},
|
|
on_rightclick = function(pos, node, player)
|
|
-- works only with water beneath
|
|
local node_under = minetest.get_node( {x=pos.x, y=(pos.y-1), z=pos.z} );
|
|
if( not( node_under ) or node_under.name == "ignore" or (node_under.name ~= 'default:water_source' and node_under.name ~= 'default:water_flowing')) then
|
|
minetest.chat_send_player( player:get_player_name(), S("Sorry. This washing place is out of water. Please place it above water!"));
|
|
else
|
|
minetest.chat_send_player( player:get_player_name(), S("You feel much cleaner after some washing."));
|
|
end
|
|
end,
|
|
is_ground_content = false,
|
|
|
|
})
|
|
|
|
|
|
|
|
---------------------------------------------------------------------------------------
|
|
-- crafting receipes
|
|
---------------------------------------------------------------------------------------
|
|
minetest.register_craft({
|
|
output = "cottages:bed_foot",
|
|
recipe = {
|
|
{"wool:white", "", "", },
|
|
{"default:wood", "", "", },
|
|
{"default:stick", "", "", }
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:bed_head",
|
|
recipe = {
|
|
{"", "", "wool:white", },
|
|
{"", "default:stick", "default:wood", },
|
|
{"", "", "default:stick", }
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:sleeping_mat",
|
|
recipe = {
|
|
{"wool:white", "cottages:straw_mat","cottages:straw_mat" }
|
|
}
|
|
})
|
|
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:table",
|
|
recipe = {
|
|
{"", "stairs:slab_wood", "", },
|
|
{"", "default:stick", "" }
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:bench",
|
|
recipe = {
|
|
{"", "default:wood", "", },
|
|
{"default:stick", "", "default:stick", }
|
|
}
|
|
})
|
|
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:shelf",
|
|
recipe = {
|
|
{"default:stick", "default:wood", "default:stick", },
|
|
{"default:stick", "default:wood", "default:stick", },
|
|
{"default:stick", "", "default:stick"}
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:washing 2",
|
|
recipe = {
|
|
{"default:stick", },
|
|
{"default:clay", },
|
|
}
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "cottages:stovepipe 2",
|
|
recipe = {
|
|
{'default:steel_ingot', '', 'default:steel_ingot'},
|
|
}
|
|
})
|
|
|