summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE24
-rw-r--r--README12
-rw-r--r--depends.txt1
-rw-r--r--init.lua96
4 files changed, 133 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..68a49da
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
diff --git a/README b/README
new file mode 100644
index 0000000..143c47c
--- /dev/null
+++ b/README
@@ -0,0 +1,12 @@
+Day/Night Mode Selector for Minetest
+====================================
+
+This is a mod for Minetest that adds a simple way to select "automatic" (normal) day/night cycling, always day, or always night. It works per-player, and settings are persistent across restarts.
+
+Usage (inventory button): Press the button in the inventory to open the menu, then select the desired mode. Use "automatic" to return to normal behavior.
+
+Usage (chat command): Use the /dayratio command by itself to open the menu, or specify a number from 0 to 1 after it to set a custom value. Custom values set the ratio between day and night - for example, a value of 0.25 will set your lighting to be 1/4 day and 3/4 night. The light level is then unaffected by the time of day. Use a value of "nil" to return to normal behavior.
+
+Dependencies: unified_inventory
+
+License: Unlicense, see the "LICENSE" file for full license text.
diff --git a/depends.txt b/depends.txt
new file mode 100644
index 0000000..7e882b3
--- /dev/null
+++ b/depends.txt
@@ -0,0 +1 @@
+unified_inventory
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..1079f93
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,96 @@
+local prefs = {}
+
+local path = minetest.get_worldpath()..DIR_DELIM.."daynight.txt"
+
+local file = io.open(path,"r")
+
+if file then
+ local data = file:read("*all")
+ prefs = minetest.deserialize(data)
+ file:close()
+end
+
+local function save()
+ local file = io.open(path,"w")
+ local data = minetest.serialize(prefs)
+ file:write(data)
+ file:close()
+end
+
+local form = "size[6,2.25]"..
+ "label[2,-0.25;Select a day/night mode:]"..
+ "image_button_exit[0,0.25;2,2;"..minetest.formspec_escape("[combine:128x128:16,16=ui_moon_icon.png:-16,-16=ui_sun_icon.png")..";normal;]"..
+ "image_button_exit[2,0.25;2,2;ui_sun_icon.png;day;]"..
+ "image_button_exit[4,0.25;2,2;ui_moon_icon.png;night;]"..
+ "label[0.5,2;Automatic]"..
+ "label[2.5,2;Always Day]"..
+ "label[4.5,2;Always Night]"
+
+minetest.register_chatcommand("dayratio",
+ {
+ params = "[ratio]",
+ description = "Sets your day/night ratio to the given value, or opens a GUI if a value is not given",
+ func = function(name,param)
+ if param ~= "" and param ~= "nil" then
+ if not tonumber(param) then
+ return false,minetest.colorize("#FF0000","ERROR")..": Invalid value. Valid range is 0-1 or nil."
+ elseif tonumber(param) > 1 then
+ return false,minetest.colorize("#FF0000","ERROR")..": Invalid value. Value must be nil or <= 1."
+ elseif tonumber(param) < 0 then
+ return false,minetest.colorize("#FF0000","ERROR")..": Invalid value. Only positive values are allowed."
+ end
+ end
+ local player = minetest.get_player_by_name(name)
+ if param == "nil" then
+ prefs[name] = nil
+ player:override_day_night_ratio(nil)
+ return true,minetest.colorize("#00FFFF","Success")..": Day/night ratio override cleared."
+ elseif tonumber(param) then
+ prefs[name] = tonumber(param)
+ player:override_day_night_ratio(tonumber(param))
+ return true,minetest.colorize("#00FFFF","Success")..": Day/night ratio set to "..param
+ else
+ minetest.show_formspec(name,"daynight:daynight",form)
+ end
+ save()
+ end
+ }
+)
+
+minetest.register_on_player_receive_fields(
+ function(player,formname,fields)
+ local name = player:get_player_name()
+ if formname ~= "daynight:daynight" then
+ return false
+ end
+ if fields.normal then
+ prefs[name] = nil
+ player:override_day_night_ratio(nil)
+ elseif fields.day then
+ prefs[name] = 1
+ player:override_day_night_ratio(1)
+ elseif fields.night then
+ prefs[name] = 0
+ player:override_day_night_ratio(0)
+ end
+ save()
+ end
+)
+
+minetest.register_on_joinplayer(
+ function(player)
+ local name = player:get_player_name()
+ player:override_day_night_ratio(prefs[name])
+ end
+)
+
+unified_inventory.register_button("daynight",
+ {
+ action = function(player)
+ minetest.show_formspec(player:get_player_name(),"daynight:daynight",form)
+ end,
+ tooltip = "Day/Night Options",
+ type = "image",
+ image = "[combine:128x128:16,16=ui_moon_icon.png:-16,-16=ui_sun_icon.png"
+ }
+)