Fix minetest.dig_node returning true when node isn't diggable (#10890)
parent
d1ec5117d9
commit
6e0e0324a4
|
@ -557,7 +557,7 @@ function core.node_dig(pos, node, digger)
|
||||||
log("info", diggername .. " tried to dig "
|
log("info", diggername .. " tried to dig "
|
||||||
.. node.name .. " which is not diggable "
|
.. node.name .. " which is not diggable "
|
||||||
.. core.pos_to_string(pos))
|
.. core.pos_to_string(pos))
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if core.is_protected(pos, diggername) then
|
if core.is_protected(pos, diggername) then
|
||||||
|
@ -566,7 +566,7 @@ function core.node_dig(pos, node, digger)
|
||||||
.. " at protected position "
|
.. " at protected position "
|
||||||
.. core.pos_to_string(pos))
|
.. core.pos_to_string(pos))
|
||||||
core.record_protection_violation(pos, diggername)
|
core.record_protection_violation(pos, diggername)
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
log('action', diggername .. " digs "
|
log('action', diggername .. " digs "
|
||||||
|
@ -649,6 +649,8 @@ function core.node_dig(pos, node, digger)
|
||||||
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
|
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
|
||||||
callback(pos_copy, node_copy, digger)
|
callback(pos_copy, node_copy, digger)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function core.itemstring_with_palette(item, palette_index)
|
function core.itemstring_with_palette(item, palette_index)
|
||||||
|
|
|
@ -7628,6 +7628,8 @@ Used by `minetest.register_node`.
|
||||||
on_dig = function(pos, node, digger),
|
on_dig = function(pos, node, digger),
|
||||||
-- default: minetest.node_dig
|
-- default: minetest.node_dig
|
||||||
-- By default checks privileges, wears out tool and removes node.
|
-- By default checks privileges, wears out tool and removes node.
|
||||||
|
-- return true if the node was dug successfully, false otherwise.
|
||||||
|
-- Deprecated: returning nil is the same as returning true.
|
||||||
|
|
||||||
on_timer = function(pos, elapsed),
|
on_timer = function(pos, elapsed),
|
||||||
-- default: nil
|
-- default: nil
|
||||||
|
|
|
@ -141,9 +141,14 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
|
||||||
push_v3s16(L, p);
|
push_v3s16(L, p);
|
||||||
pushnode(L, node, ndef);
|
pushnode(L, node, ndef);
|
||||||
objectrefGetOrCreate(L, digger);
|
objectrefGetOrCreate(L, digger);
|
||||||
PCALL_RES(lua_pcall(L, 3, 0, error_handler));
|
PCALL_RES(lua_pcall(L, 3, 1, error_handler));
|
||||||
lua_pop(L, 1); // Pop error handler
|
|
||||||
return true;
|
// nil is treated as true for backwards compat
|
||||||
|
bool result = lua_isnil(L, -1) || lua_toboolean(L, -1);
|
||||||
|
|
||||||
|
lua_pop(L, 2); // Pop error handler and result
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
|
void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
|
||||||
|
|
Loading…
Reference in New Issue