diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 019c123..1e12a7d 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -81,6 +81,21 @@ local function lay_down(player, pos, bed_pos, state, skip) -- lay down else + + -- Check if bed is occupied + for _, other_pos in pairs(beds.bed_position) do + if vector.distance(bed_pos, other_pos) < 0.1 then + minetest.chat_send_player(name, S("This bed is already occupied!")) + return false + end + end + + -- Check if player is moving + if vector.length(player:get_player_velocity()) > 0.001 then + minetest.chat_send_player(name, S("You have to stop moving before going to bed!")) + return false + end + beds.pos[name] = pos beds.bed_position[name] = bed_pos beds.player[name] = 1 @@ -230,6 +245,19 @@ minetest.register_on_leaveplayer(function(player) end end) +minetest.register_on_dieplayer(function(player) + local name = player:get_player_name() + local in_bed = beds.player + local pos = player:get_pos() + local yaw = get_look_yaw(pos) + + if in_bed[name] then + lay_down(player, nil, pos, false) + player:set_look_horizontal(yaw) + player:set_pos(pos) + end +end) + minetest.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "beds_form" then return @@ -256,3 +284,4 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) +