diff options
author | Matthew I <matttpt@gmail.com> | 2012-07-30 09:45:26 -0400 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-08-12 16:04:18 +0300 |
commit | 1ed559bd2418dc34689160df09af8f779300ee9f (patch) | |
tree | 35ba0943ed8c1fe5aafd5c27c760b7c30bb65393 /src | |
parent | e3b831e97505a6bd6a07813b2a0b8608637a3cd9 (diff) | |
download | minetest-1ed559bd2418dc34689160df09af8f779300ee9f.tar.gz minetest-1ed559bd2418dc34689160df09af8f779300ee9f.tar.bz2 minetest-1ed559bd2418dc34689160df09af8f779300ee9f.zip |
Allow digging of unknown nodes
This allows the removal of nodes with unknown types.
get_item_callback() (C++) would fail if a node has an unknown type. Now it
will try using the callback from minetest.nodedef_default in this case.
Also, minetest.node_dig() (Lua) was altered to always allow digging when
the node definition is empty (i.e. unknown node).
Diffstat (limited to 'src')
-rw-r--r-- | src/scriptapi.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
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 \""<<name<<"\" not defined"<<std::endl; lua_pop(L, 1); - return false; + + // Try minetest.nodedef_default instead + lua_getglobal(L, "minetest"); + lua_getfield(L, -1, "nodedef_default"); + lua_remove(L, -2); + luaL_checktype(L, -1, LUA_TTABLE); } lua_getfield(L, -1, callbackname); lua_remove(L, -2); |