diff --git a/mods/beds/api.lua b/mods/beds/api.lua index 6873c1a9..d7b5743f 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -25,8 +25,15 @@ local function destruct_bed(pos, n) end end +beds.is_bed_node = {} + +local function register_bed_node(name, def) + beds.is_bed_node[name] = true + core.register_node(name, def) +end + function beds.register_bed(name, def) - minetest.register_node(name .. "_bottom", { + register_bed_node(name .. "_bottom", { description = def.description, inventory_image = def.inventory_image, wield_image = def.wield_image, @@ -150,7 +157,7 @@ function beds.register_bed(name, def) end, }) - minetest.register_node(name .. "_top", { + register_bed_node(name .. "_top", { drawtype = "nodebox", tiles = def.tiles.top, use_texture_alpha = "clip", diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index c3e2a2c9..cdae8274 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -170,13 +170,24 @@ end -- Public functions +function beds.kick_player(player) + lay_down(player, nil, nil, false) +end + function beds.kick_players() - for name, _ in pairs(beds.player) do - local player = minetest.get_player_by_name(name) - lay_down(player, nil, nil, false) + for name in pairs(beds.player) do + beds.kick_players(core.get_player_by_name(name)) end end +core.register_globalstep(function() + for name, bed_pos in pairs(beds.bed_position) do + if not beds.is_bed_node[core.get_node(bed_pos).name] then + beds.kick_player(core.get_player_by_name(name)) + end + end +end) + function beds.skip_night() minetest.set_timeofday(0.23) end