diff --git a/minetest.conf.example b/minetest.conf.example index 47d03b00..c81040c7 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -26,3 +26,11 @@ # Enable the stairs mod ABM that replaces the old 'upside down' # stair and slab nodes in old maps with the new param2 versions. #enable_stairs_replace_abm = false + +# Whether you allow respawning in beds +# Default value is true +#enable_bed_respawn = true + +# Whether players can skip night by sleeping +# Default value is true +#enable_bed_night_skip = true diff --git a/mods/beds/README.txt b/mods/beds/README.txt index 21d4433f..cb76628a 100644 --- a/mods/beds/README.txt +++ b/mods/beds/README.txt @@ -14,7 +14,8 @@ if more than 50% of the players are lying in bed and use this option. Another feature is a controled respawning. If you have slept in bed (not just lying in it) your respawn point is set to the beds location and you will respawn there after death. You can disable the respawn at beds by setting "enable_bed_respawn = false" in minetest.conf - +You can also disable the night skip feature by setting "enable_bed_night_skip = false" in minetest.conf or by using +the /set command ingame. License of source code, textures: WTFPL diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 4c5c7d16..59b22480 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -21,6 +21,14 @@ local function get_look_yaw(pos) end end +local function is_night_skip_enabled() + local enable_night_skip = minetest.setting_getbool("enable_bed_night_skip") + if enable_night_skip == nil then + enable_night_skip = true + end + return enable_night_skip +end + local function check_in_beds(players) local in_bed = beds.player if not players then @@ -56,7 +64,7 @@ local function lay_down(player, pos, bed_pos, state, skip) if skip then return end - if p then + if p then player:setpos(p) end @@ -100,8 +108,8 @@ local function update_formspecs(finished) "label[2.7,11; Good morning.]" else form_n = beds.formspec .. - "label[2.2,11;"..tostring(player_in_bed).." of "..tostring(ges).." players are in bed]" - if is_majority then + "label[2.2,11;"..tostring(player_in_bed).." of "..tostring(ges).." players are in bed]" + if is_majority and is_night_skip_enabled() then form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]" end @@ -154,11 +162,13 @@ function beds.on_rightclick(pos, player) -- skip the night and let all players stand up if check_in_beds() then minetest.after(2, function() - beds.skip_night() if not is_sp then - update_formspecs(true) + update_formspecs(is_night_skip_enabled()) + end + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() end - beds.kick_players() end) end end @@ -189,9 +199,11 @@ minetest.register_on_leaveplayer(function(player) beds.player[name] = nil if check_in_beds() then minetest.after(2, function() - beds.skip_night() - update_formspecs(true) - beds.kick_players() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end end) end end) @@ -206,8 +218,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.force then - beds.skip_night() - update_formspecs(true) - beds.kick_players() + update_formspecs(is_night_skip_enabled()) + if is_night_skip_enabled() then + beds.skip_night() + beds.kick_players() + end end end)