From cbf778c1bfd470482b5b4423c3b7b3b92ecac109 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Wed, 10 Feb 2021 08:22:14 +0100 Subject: [PATCH] No-op if state is already correct --- mods/beds/functions.lua | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 3640a5f1..f0ddae7a 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -60,16 +60,16 @@ local function lay_down(player, pos, bed_pos, state, skip) -- stand up if state ~= nil and not state then - assert(beds.player[name], "player " .. name .. " not in bed") - local p = beds.pos[name] or nil + if not beds.player[name] then + -- player not in bed, do nothing + return false + end beds.bed_position[name] = nil -- skip here to prevent sending player specific changes (used for leaving players) if skip then return end - if p then - player:set_pos(p) - end + player:set_pos(beds.pos[name]) -- physics, eye_offset, etc local physics_override = beds.player[name].physics_override @@ -102,6 +102,11 @@ local function lay_down(player, pos, bed_pos, state, skip) return false end + if beds.player[name] then + -- player already in bed, do nothing + return false + end + beds.pos[name] = pos beds.bed_position[name] = bed_pos beds.player[name] = {physics_override = player:get_physics_override()} @@ -275,10 +280,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local last_player_in_bed = get_player_in_bed_count() if fields.quit or fields.leave then - if beds.player[player:get_player_name()] then - -- make player stand up only if they were in bed - lay_down(player, nil, nil, false) - end + lay_down(player, nil, nil, false) update_formspecs(false) end