Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get rid of recursive call in default.dig_up #3133

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
24 changes: 19 additions & 5 deletions mods/default/functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,26 @@ minetest.register_abm({
-- Dig upwards
--

function default.dig_up(pos, node, digger)
local in_dig_up = false
local mapgen_limit = tonumber(minetest.settings:get("mapgen_limit")) or 31007
function default.dig_up(pos, node, digger, max_height)
Emojigit marked this conversation as resolved.
Show resolved Hide resolved
if in_dig_up then return end -- Avoid excess calls
Emojigit marked this conversation as resolved.
Show resolved Hide resolved
if digger == nil then return end
local np = {x = pos.x, y = pos.y + 1, z = pos.z}
local nn = minetest.get_node(np)
if nn.name == node.name then
minetest.node_dig(np, nn, digger)
max_height = max_height or mapgen_limit
Emojigit marked this conversation as resolved.
Show resolved Hide resolved

for y = pos.y + 1, math.min(pos.y + max_height, mapgen_limit) do
local up_pos = { x = pos.x, y = y, z = pos.z}
Emojigit marked this conversation as resolved.
Show resolved Hide resolved
local up_node = minetest.get_node(up_pos)
if up_node.name == node.name then
in_dig_up = true
if not minetest.dig_node(up_pos, digger) then
in_dig_up = false
break
end
in_dig_up = false
else
break
end
end
end

Expand Down
2 changes: 1 addition & 1 deletion mods/default/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ default.get_translator = S
-- and avoids obscure, hard to debug runtime errors.
-- This section should be updated before release and older checks can be dropped
-- when newer ones are introduced.
if ItemStack("").add_wear_by_uses == nil then
if not minetest.features.node_interaction_actor then
sfan5 marked this conversation as resolved.
Show resolved Hide resolved
error("\nThis version of Minetest Game is incompatible with your engine version "..
Emojigit marked this conversation as resolved.
Show resolved Hide resolved
"(which is too old). You should download a version of Minetest Game that "..
"matches the installed engine version.\n")
Expand Down