From b2ad6b79bd1fd4b5086a1aaf6c90aff7040924b0 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 19 Aug 2020 10:39:44 +0200 Subject: [PATCH] Fix night vision conflicting with weather skycolor --- mods/ENVIRONMENT/mcl_weather/skycolor.lua | 30 ++++++++++++++++++----- mods/ITEMS/mcl_potions/functions.lua | 12 +++++---- mods/ITEMS/mcl_potions/mod.conf | 2 +- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index a7941073..8618bdbb 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -1,4 +1,5 @@ local mods_loaded = false +local NIGHT_VISION_RATIO = 0.45 mcl_weather.skycolor = { -- Should be activated before do any effect. @@ -51,6 +52,23 @@ mcl_weather.skycolor = { end end, + -- Wrapper for updating day/night ratio that respects night vision + override_day_night_ratio = function(player, ratio) + local meta = player:get_meta() + local night_vision = meta:get_int("night_vision") + local arg + if night_vision == 1 then + if ratio == nil then + arg = NIGHT_VISION_RATIO + else + arg = math.max(ratio, NIGHT_VISION_RATIO) + end + else + arg = ratio + end + player:override_day_night_ratio(arg) + end, + -- Update sky color. If players not specified update sky for all players. update_sky_color = function(players) -- Override day/night ratio as well @@ -76,7 +94,7 @@ mcl_weather.skycolor = { player:set_sun({visible = true, sunrise_visible = true}) player:set_moon({visible = true}) player:set_stars({visible = true}) - player:override_day_night_ratio(nil) + mcl_weather.skycolor.override_day_night_ratio(player, nil) else -- Weather skies local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5) @@ -99,7 +117,7 @@ mcl_weather.skycolor = { local lf = mcl_weather.get_current_light_factor() if mcl_weather.skycolor.current_layer_name() == "lightning" then - player:override_day_night_ratio(1) + mcl_weather.skycolor.override_day_night_ratio(player, 1) elseif lf then local w = minetest.get_timeofday() local light = (w * (lf*2)) @@ -107,9 +125,9 @@ mcl_weather.skycolor = { light = 1 - (light - 1) end light = (light * lf) + 0.15 - player:override_day_night_ratio(light) + mcl_weather.skycolor.override_day_night_ratio(player, light) else - player:override_day_night_ratio(nil) + mcl_weather.skycolor.override_day_night_ratio(player, nil) end end elseif dim == "end" then @@ -122,7 +140,7 @@ mcl_weather.skycolor = { player:set_sun({visible = false , sunrise_visible = false}) player:set_moon({visible = false}) player:set_stars({visible = false}) - player:override_day_night_ratio(0.5) + mcl_weather.skycolor.override_day_night_ratio(player, 0.5) elseif dim == "nether" then player:set_sky({ type = "plain", base_color = "#300808", @@ -131,7 +149,7 @@ mcl_weather.skycolor = { player:set_sun({visible = false , sunrise_visible = false}) player:set_moon({visible = false}) player:set_stars({visible = false}) - player:override_day_night_ratio(nil) + mcl_weather.skycolor.override_day_night_ratio(player, nil) elseif dim == "void" then player:set_sky({ type = "plain", base_color = "#000000", diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 26342792..1ffa8402 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -211,16 +211,14 @@ minetest.register_globalstep(function(dtime) is_cat[player].timer = is_cat[player].timer + dtime if player:get_pos() then mcl_potions._add_spawner(player, "#1010AA") end - if minetest.get_timeofday() > 0.8 or minetest.get_timeofday() < 0.2 then - player:override_day_night_ratio(0.45) - else player:override_day_night_ratio(nil) - end if is_cat[player].timer >= is_cat[player].dur then is_cat[player] = nil meta = player:get_meta() meta:set_string("_is_cat", minetest.serialize(is_cat[player])) + meta:set_int("night_vision", 0) end + mcl_weather.skycolor.update_sky_color({player}) else is_cat[player] = nil @@ -366,7 +364,8 @@ function mcl_potions._reset_player_effects(player) playerphysics.remove_physics_factor(player, "speed", "mcl_potions:swiftness") is_cat[player] = nil - player:override_day_night_ratio(nil) + meta:set_int("night_vision", 0) + mcl_weather.skycolor.update_sky_color({player}) is_fire_proof[player] = nil @@ -826,6 +825,7 @@ end function mcl_potions.night_vision_func(player, null, duration) + meta = player:get_meta() if not is_cat[player] then is_cat[player] = {dur = duration, timer = 0} @@ -838,6 +838,8 @@ function mcl_potions.night_vision_func(player, null, duration) victim.timer = 0 end + meta:set_int("night_vision", 1) + mcl_weather.skycolor.update_sky_color({player}) end diff --git a/mods/ITEMS/mcl_potions/mod.conf b/mods/ITEMS/mcl_potions/mod.conf index 0fe50a64..3d6fd001 100644 --- a/mods/ITEMS/mcl_potions/mod.conf +++ b/mods/ITEMS/mcl_potions/mod.conf @@ -1,2 +1,2 @@ name = mcl_potions -depends = mcl_core, mcl_farming, mcl_mobitems, mcl_fishing, mcl_bows, mcl_end, playerphysics +depends = mcl_core, mcl_farming, mcl_mobitems, mcl_fishing, mcl_bows, mcl_end, mcl_weather, playerphysics