Merge pull request 'Fix frequent ABM warning when lots of lava is in active block range' (#2894) from fix_lava_abms into master

Reviewed-on: MineClone2/MineClone2#2894
This commit is contained in:
cora 2022-11-03 13:14:31 +00:00
commit f1cdb24545
6 changed files with 22 additions and 12 deletions

View File

@ -64,14 +64,15 @@ function mcl_dripping.register_drop(def)
interval = def.interval,
chance = def.chance,
action = function(pos)
local below = minetest.get_node(vector.offset(pos,0,-1,0)).name
if below ~= "air" then return end
local r = math.ceil(def.interval / 20)
local nn = minetest.find_nodes_in_area(vector.offset(pos, -r, 0, -r), vector.offset(pos, r, 0, r), def.nodes)
--start a bunch of particle cycles to be able to get away
--with longer abm cycles
table.shuffle(nn)
for i = 1, math.random(#nn) do
if minetest.get_item_group(minetest.get_node(vector.offset(nn[i], 0, 1, 0)).name, def.liquid) ~= 0
and minetest.get_node(vector.offset(nn[i], 0, -1, 0)).name == "air" then
if minetest.get_item_group(minetest.get_node(vector.offset(nn[i], 0, 1, 0)).name, def.liquid) ~= 0 then
make_drop(nn[i], def.liquid, def.sound, def.interval, def.texture)
end
end
@ -85,7 +86,7 @@ mcl_dripping.register_drop({
light = 1,
nodes = { "group:opaque", "group:leaves" },
sound = "drippingwater_drip",
interval = 60,
interval = 60.3,
chance = 10,
})
@ -95,6 +96,6 @@ mcl_dripping.register_drop({
light = math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3),
nodes = { "group:opaque" },
sound = "drippingwater_lavadrip",
interval = 60,
interval = 110.1,
chance = 10,
})

View File

@ -153,12 +153,17 @@ minetest.register_abm({
neighbors = {"air"},
interval = 27,
chance = 33,
min_y = mcl_vars.mg_overworld_min,
action = function(pos, node, active_object_count, active_object_count_wider)
if node.name == "mcl_core:snowblock" then return end
if (mcl_weather.state ~= "rain" and mcl_weather.state ~= "thunder" and mcl_weather.state ~= "snow")
or not mcl_weather.has_snow(pos)
or node.name == "mcl_core:snowblock" then
return end
local above = vector.offset(pos,0,1,0)
local above_node = minetest.get_node(above)
if above_node.name ~= "air" then return end
if (mcl_weather.state == "rain" or mcl_weather.state == "thunder" or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos) and mcl_weather.has_snow(pos) then
if above_node.name == "air" and mcl_weather.is_outdoor(pos) then
local nn = nil
if node.name:find("snow") then
local l = node.name:sub(-1)

View File

@ -196,12 +196,14 @@ mcl_stairs.register_stair_and_slab_simple("blackstone_brick_polished", "mcl_blac
mcl_walls.register_wall("mcl_blackstone:wall", S("Blackstone Wall"), "mcl_blackstone:blackstone")
--lavacooling
minetest.register_abm({
label = "Lava cooling (basalt)",
nodenames = {"group:lava"},
neighbors = {"mcl_core:ice"},
interval = 1,
chance = 1,
min_y = mcl_vars.mg_end_min,
action = function(pos, node, active_object_count, active_object_count_wider)
local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "mcl_core:ice")
local lavatype = minetest.registered_nodes[node.name].liquidtype
@ -225,6 +227,7 @@ minetest.register_abm({
neighbors = {"mcl_core:packed_ice"},
interval = 1,
chance = 1,
min_y = mcl_vars.mg_end_min,
action = function(pos, node, active_object_count, active_object_count_wider)
local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "mcl_core:packed_ice")
local lavatype = minetest.registered_nodes[node.name].liquidtype

View File

@ -22,6 +22,7 @@ minetest.register_abm({
neighbors = {"group:water"},
interval = 1,
chance = 1,
min_y = mcl_vars.mg_end_min,
action = function(pos, node, active_object_count, active_object_count_wider)
local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "group:water")
@ -174,7 +175,7 @@ minetest.register_abm({
nodenames = {"group:destroy_by_lava_flow"},
neighbors = {"group:lava"},
interval = 1,
chance = 1,
chance = 5,
action = function(pos, node, active_object_count, active_object_count_wider)
liquid_flow_action(pos, "lava", function(pos)
minetest.remove_node(pos)

View File

@ -236,7 +236,7 @@ minetest.register_node("mcl_crimson:warped_wart_block", {
minetest.register_node("mcl_crimson:shroomlight", {
description = S("Shroomlight"),
tiles = {"shroomlight.png"},
groups = {handy = 1, hoe = 7, swordy = 1, leafdecay = 5, leaves = 1, deco_block = 1},
groups = {handy = 1, hoe = 7, swordy = 1, deco_block = 1},
light_source = minetest.LIGHT_MAX,
_mcl_hardness = 2,
})

View File

@ -378,9 +378,9 @@ else -- Fire enabled
minetest.register_abm({
label = "Ignite fire by lava",
nodenames = {"mcl_core:lava_source","mcl_nether:nether_lava_source"},
neighbors = {"air","group:flammable"},
interval = 7,
chance = 3,
neighbors = {"group:flammable"},
interval = 15,
chance = 9,
catch_up = false,
action = function(pos)
local p=get_ignitable_by_lava(pos)