Add option to disable bed's night skip - Solve second point of #512 by adding a setti...
authorLeMagnesium <mg.minetest@gmail.com>
Thu, 14 May 2015 16:57:41 +0000 (18:57 +0200)
committerparamat <mat.gregory@virginmedia.com>
Tue, 29 Sep 2015 00:25:40 +0000 (01:25 +0100)
minetest.conf.example
mods/beds/README.txt
mods/beds/functions.lua

index 47d03b00db68c1ca6673c05cddc6f62f83f32066..c81040c7c7371f5443a0cb8782da5fce16103aab 100644 (file)
 # 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
index 21d4433f382143da651e84996a1c753869958b45..cb76628ae6ea8ecf2ca2d89ab1b6c976c8613c00 100644 (file)
@@ -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
index 4c5c7d16fea08d5d7ca1e3fa29e72aebd5d38087..59b2248001593e16b5bccd8c0f2a937b9fd3fa60 100644 (file)
@@ -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)