mirror of
https://github.com/minetest-mods/nether.git
synced 2025-09-16 21:36:04 +02:00
Fix find_nether_ground_y causing freezing (#89)
Refactor the function to use a while loop. Remove useless recursive call causing freezing.
This commit is contained in:
13
mapgen.lua
13
mapgen.lua
@@ -495,8 +495,13 @@ function nether.find_nether_ground_y(target_x, target_z, start_y, player_name)
|
|||||||
local minp = {x = minp_schem.x, y = 0, z = minp_schem.z}
|
local minp = {x = minp_schem.x, y = 0, z = minp_schem.z}
|
||||||
local maxp = {x = maxp_schem.x, y = 0, z = maxp_schem.z}
|
local maxp = {x = maxp_schem.x, y = 0, z = maxp_schem.z}
|
||||||
|
|
||||||
for y = start_y, math_max(NETHER_FLOOR + BLEND, start_y - 4096), -1 do
|
local sample_pos = vector.new(target_x, 0, target_z) -- reuse to avoid making new tables
|
||||||
local nval_cave = nobj_cave_point:get_3d({x = target_x, y = y, z = target_z})
|
local y = start_y
|
||||||
|
local limit_y = math_max(NETHER_FLOOR + BLEND, start_y - 4096)
|
||||||
|
|
||||||
|
while y >= limit_y do
|
||||||
|
sample_pos.y = y
|
||||||
|
local nval_cave = nobj_cave_point:get_3d(sample_pos)
|
||||||
|
|
||||||
if nval_cave > TCAVE then -- Cavern
|
if nval_cave > TCAVE then -- Cavern
|
||||||
air = air + 1
|
air = air + 1
|
||||||
@@ -509,12 +514,14 @@ function nether.find_nether_ground_y(target_x, target_z, start_y, player_name)
|
|||||||
if nether.volume_is_natural_and_unprotected(minp, maxp, player_name) then
|
if nether.volume_is_natural_and_unprotected(minp, maxp, player_name) then
|
||||||
return portal_y
|
return portal_y
|
||||||
else -- Restart search a little lower
|
else -- Restart search a little lower
|
||||||
nether.find_nether_ground_y(target_x, target_z, y - 16, player_name)
|
air = 0 -- space above is unsuitable
|
||||||
|
y = y - 16
|
||||||
end
|
end
|
||||||
else -- Not enough space, reset air to zero
|
else -- Not enough space, reset air to zero
|
||||||
air = 0
|
air = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
y = y - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
return math_max(start_y, NETHER_FLOOR + BLEND) -- Fallback
|
return math_max(start_y, NETHER_FLOOR + BLEND) -- Fallback
|
||||||
|
Reference in New Issue
Block a user