-- code of this file is partially taken from and otherwise inspired by -- mymonths on https://github.com/minetest-mods/mymonths (licensed under DWYWPL) -- contributers available at https://github.com/minetest-mods/mymonths/graphs/contributors -- all changes of mine remain under LGPL v3 local BLOCK_PREFIX = "regional_weather:snow_cover_" if not minetest.get_modpath("default") or default.node_sound_snow_defaults == nil or not regional_weather.settings.snow then for i = 1,5 do minetest.register_alias(BLOCK_PREFIX .. i, "air") end return end local destruction_handler = function(pos) pos.y = pos.y - 1 if minetest.get_node(pos).name == "default:dirt_with_snow" then minetest.set_node(pos, {name = "default:dirt_with_grass"}) end end for i = 1,5 do local node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.2*i - 0.5, 0.5} } minetest.register_node(BLOCK_PREFIX .. i, { tiles = { "default_snow.png" }, drawtype = "nodebox", buildable_to = i < 3, floodable = true, walkable = i > 3, paramtype = "light", node_box = node_box, groups = { not_in_creative_inventory = 1, crumbly = 3, falling_node = 1, snowy = 1, regional_weather_snow_cover = i }, sounds = default.node_sound_snow_defaults(), drop = "default:snow " .. math.ceil(i / 2), on_construct = function(pos) pos.y = pos.y - 1 if minetest.get_node(pos).name == "default:dirt_with_grass" then minetest.set_node(pos, {name = "default:dirt_with_snow"}) end end, on_destruct = destruction_handler, on_flood = destruction_handler }) end climate_api.register_abm({ label = "create snow covers", nodenames = { "group:soil", "group:leaves", "group:stone", "default:snowblock", "group:coverable_by_snow" }, neighbors = { "air" }, interval = 15, chance = 20, conditions = { min_height = regional_weather.settings.min_height, max_height = regional_weather.settings.max_height, min_humidity = 55, max_heat = 30, daylight = 15 }, pos_override = function(pos) return vector.add(pos, { x = 0, y = 1, z = 0 }) end, action = function (pos, node, env) if minetest.get_node(pos).name ~= "air" then return end local base = minetest.get_node(vector.add(pos, {x=0, y=-1, z=0})).name local is_soil = minetest.get_item_group(base, "soil") or 0 local is_stone = minetest.get_item_group(base, "stone") or 0 if not (is_soil == 0 and is_stone == 0) then minetest.set_node(pos, { name = BLOCK_PREFIX .. "1" }) end end }) climate_api.register_abm({ label = "replace flora with snow covers and stack covers higher", nodenames = { "group:flora", "group:grass", "group:plant", "group:regional_weather_snow_cover" }, interval = 15, chance = 15, conditions = { min_height = regional_weather.settings.min_height, max_height = regional_weather.settings.max_height, min_humidity = 55, max_heat = 30, daylight = 15 }, action = function (pos, node, env) local node_name = minetest.get_node(pos).name local value = minetest.get_item_group(node_name, "regional_weather_snow_cover") if value == nil then value = 0 end if value < 5 then minetest.set_node(pos, { name = BLOCK_PREFIX .. (value + 1) }) end end }) climate_api.register_abm({ label = "melt snow covers", nodenames = { "group:regional_weather_snow_cover" }, interval = 15, chance = 10, conditions = { min_heat = 30 }, action = function (pos, node, env) local node_name = minetest.get_node(pos).name local value = minetest.get_item_group(node_name, "regional_weather_snow_cover") if value == nil then value = 0 end if value > 1 then minetest.set_node(pos, { name = BLOCK_PREFIX .. (value - 1) }) elseif regional_weather.settings.puddles then minetest.set_node(pos, { name = "regional_weather:puddle" }) else minetest.set_node(pos, { name = "air" }) end end })