From a8f7a89dacc14f3e6d49f901745a36d8d32eb87d Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Fri, 15 Nov 2024 01:26:01 +0100 Subject: [PATCH 1/3] Add `core` to `.luacheckrc` --- .luacheckrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.luacheckrc b/.luacheckrc index cc54a3ce74..26a90db912 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -8,6 +8,7 @@ globals = { read_globals = { "DIR_DELIM", "minetest", + "core", "dump", "vector", "VoxelManip", "VoxelArea", From 49d874a4a15fc203d2364c3c8d16a7c799f2e974 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Fri, 15 Nov 2024 01:19:52 +0100 Subject: [PATCH 2/3] Kick players from beds that have ceased existing --- mods/beds/api.lua | 11 +++++++++-- mods/beds/functions.lua | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/mods/beds/api.lua b/mods/beds/api.lua index 6873c1a9ad..d7b5743fd7 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 c3e2a2c969..cdae827407 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 From f317a8943a4b737e06c2e314c6056bf2497afeaa Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Mon, 18 Nov 2024 15:19:44 +0100 Subject: [PATCH 3/3] kick --- game_api.txt | 1 + mods/beds/functions.lua | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/game_api.txt b/game_api.txt index cc50f453e2..c36cfe4b22 100644 --- a/game_api.txt +++ b/game_api.txt @@ -47,6 +47,7 @@ Beds API * `beds.can_dig(bed_pos)` Returns a boolean whether the bed at `bed_pos` may be dug * `beds.read_spawns() ` Returns a table containing players respawn positions + * `beds.kick(player)` Forces `player` to leave bed * `beds.kick_players()` Forces all players to leave bed * `beds.skip_night()` Sets world time to morning and saves respawn position of all players currently sleeping * `beds.day_interval` Is a table with keys "start" and "finish". Allows you diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index cdae827407..823c3bd577 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -170,20 +170,20 @@ end -- Public functions -function beds.kick_player(player) +function beds.kick(player) lay_down(player, nil, nil, false) end function beds.kick_players() for name in pairs(beds.player) do - beds.kick_players(core.get_player_by_name(name)) + beds.kick(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)) + beds.kick(core.get_player_by_name(name)) end end end)