From f5fa45f7b709cfe7c8b44dcd20963e5abb3edfbd Mon Sep 17 00:00:00 2001
From: Sokomine <wegwerf@anarres.dyndns.org>
Date: Fri, 30 Jun 2017 00:02:32 +0200
Subject: added sleeping mat with pillow

---
 nodes_furniture.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/nodes_furniture.lua b/nodes_furniture.lua
index 7098ab4..62ab626 100644
--- a/nodes_furniture.lua
+++ b/nodes_furniture.lua
@@ -122,6 +122,37 @@ minetest.register_node("cottages:sleeping_mat", {
 })
 
 
+-- this one has a pillow for the head; thus, param2 becomes visible to the builder, and mobs may use it as a bed
+minetest.register_node("cottages:sleeping_mat_head", {
+        description = S("sleeping mat with pillow"),
+        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",
+        groups = { snappy = 3 },
+        sounds = default.node_sound_leaves_defaults(),
+        node_box = {
+                type = "fixed",
+                fixed = {
+                                        {-0.48, -0.5,-0.48,  0.48, -0.5+1/16, 0.48},
+                                        {-0.34, -0.5+1/16,-0.12,  0.34, -0.5+2/16, 0.34},
+                        }
+        },
+        selection_box = {
+                type = "fixed",
+                fixed = {
+                                        {-0.48, -0.5,-0.48,  0.48, -0.5+2/16, 0.48},
+                        }
+        },
+	is_ground_content = false,
+	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+				return cottages.sleep_in_bed( pos, node, clicker, itemstack, pointed_thing );
+			end
+})
+
 
 -- furniture; possible replacement: 3dforniture:chair
 minetest.register_node("cottages:bench", {
@@ -395,6 +426,12 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
 	local animation = default.player_get_animation( clicker );
 	local pname = clicker:get_player_name();
 
+	local p_above = minetest.get_node( {x=pos.x, y=pos.y+1, z=pos.z});
+	if( not( p_above) or not( p_above.name ) or p_above.name ~= 'air' ) then
+		minetest.chat_send_player( pname, "This place is too narrow for sleeping. At least for you!");
+		return;
+	end
+
 	local place_name = 'place';
 	-- if only one node is present, the player can only sit;
 	-- sleeping requires a bed head+foot or two sleeping mats
@@ -462,7 +499,7 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
 		end
 		place_name = 'bed';
 
-	elseif( node.name=='cottages:sleeping_mat' or node.name=='cottages:straw_mat') then
+	elseif( node.name=='cottages:sleeping_mat' or node.name=='cottages:straw_mat' or node.name=='cottages:sleeping_mat_head') then
 		place_name = 'mat';
 		dir = node.param2;
 		allow_sleep = false;
@@ -470,7 +507,7 @@ cottages.sleep_in_bed = function( pos, node, clicker, itemstack, pointed_thing )
 		local offset = {{x=0,z=-1}, {x=-1,z=0}, {x=0,z=1}, {x=1,z=0}};
 		for i,off in ipairs( offset ) do
 			node2 = minetest.get_node( {x=pos.x+off.x, y=pos.y, z=pos.z+off.z} );
-			if( node2.name == 'cottages:sleeping_mat' or node2.name=='cottages:straw_mat' ) then
+			if( node2.name == 'cottages:sleeping_mat' or node2.name=='cottages:straw_mat' or node.name=='cottages:sleeping_mat_head' ) then
 				-- if a second mat is found, sleeping is possible
 				allow_sleep = true;
 				dir = i-1;
@@ -557,6 +594,13 @@ minetest.register_craft({
 })
 
 
+minetest.register_craft({
+	output = "cottages:sleeping_mat_head",
+	recipe = {
+		{"cottages:sleeping_mat","cottages:straw_mat" }
+	}
+})
+
 minetest.register_craft({
 	output = "cottages:table",
 	recipe = {
-- 
cgit v1.2.3