diff --git a/builtin/item.lua b/builtin/item.lua index 1b4b4d25a..4ed20e4f1 100644 --- a/builtin/item.lua +++ b/builtin/item.lua @@ -262,7 +262,8 @@ function minetest.node_dig(pos, node, digger) minetest.debug("node_dig") local def = ItemStack({name=node.name}):get_definition() - if not def.diggable or (def.can_dig and not def.can_dig(pos,digger)) then + -- Check if def ~= 0 because we always want to be able to remove unknown nodes + if #def ~= 0 and not def.diggable or (def.can_dig and not def.can_dig(pos,digger)) then minetest.debug("not diggable") minetest.log("info", digger:get_player_name() .. " tried to dig " .. node.name .. " which is not diggable " diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index b8b3cb73a..a1975971f 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -5510,6 +5510,8 @@ void scriptapi_on_player_receive_fields(lua_State *L, // If that is nil or on error, return false and stack is unchanged // If that is a function, returns true and pushes the // function onto the stack +// If minetest.registered_items[name] doesn't exist, minetest.nodedef_default +// is tried instead so unknown items can still be manipulated to some degree static bool get_item_callback(lua_State *L, const char *name, const char *callbackname) { @@ -5522,9 +5524,15 @@ static bool get_item_callback(lua_State *L, // Should be a table if(lua_type(L, -1) != LUA_TTABLE) { + // Report error and clean up errorstream<<"Item \""<