This commit is contained in:
Lars Müller 2025-04-22 15:24:37 +00:00 committed by GitHub
commit 84c4ec093c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 5 deletions

View file

@ -9,6 +9,7 @@ read_globals = {
"DIR_DELIM", "DIR_DELIM",
"core", "core",
"minetest", "minetest",
"core",
"dump", "dump",
"vector", "vector",
"VoxelManip", "VoxelArea", "VoxelManip", "VoxelArea",

View file

@ -47,6 +47,7 @@ Beds API
* `beds.can_dig(bed_pos)` Returns a boolean whether the bed at `bed_pos` may be dug * `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.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.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.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 * `beds.day_interval` Is a table with keys "start" and "finish". Allows you

View file

@ -38,8 +38,15 @@ local function destruct_bed(pos, n)
beds.remove_spawns_at(pos) beds.remove_spawns_at(pos)
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) function beds.register_bed(name, def)
minetest.register_node(name .. "_bottom", { register_bed_node(name .. "_bottom", {
description = def.description, description = def.description,
inventory_image = def.inventory_image, inventory_image = def.inventory_image,
wield_image = def.wield_image, wield_image = def.wield_image,
@ -166,7 +173,7 @@ function beds.register_bed(name, def)
end, end,
}) })
minetest.register_node(name .. "_top", { register_bed_node(name .. "_top", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = def.tiles.top, tiles = def.tiles.top,
use_texture_alpha = "clip", use_texture_alpha = "clip",

View file

@ -170,13 +170,24 @@ end
-- Public functions -- Public functions
function beds.kick_players() function beds.kick(player)
for name, _ in pairs(beds.player) do
local player = minetest.get_player_by_name(name)
lay_down(player, nil, nil, false) lay_down(player, nil, nil, false)
end
function beds.kick_players()
for name in pairs(beds.player) do
beds.kick(core.get_player_by_name(name))
end end
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(core.get_player_by_name(name))
end
end
end)
function beds.skip_night() function beds.skip_night()
minetest.set_timeofday(0.23) minetest.set_timeofday(0.23)
end end