]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_itemstackmeta.cpp
Make Lint Happy
[dragonfireclient.git] / src / script / lua_api / l_itemstackmeta.cpp
index c37a82116d83bac99a0e7a193021afd83c8bd6eb..5a5c9934afd936ef23b80aaab9170b58d98c36bc 100644 (file)
@@ -1,6 +1,8 @@
 /*
 Minetest
 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2017-8 rubenwardy <rw@rubenwardy.com>
+Copyright (C) 2017 raymoo
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -24,17 +26,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 /*
        NodeMetaRef
 */
-ItemStackMetaRefItemStackMetaRef::checkobject(lua_State *L, int narg)
+ItemStackMetaRef *ItemStackMetaRef::checkobject(lua_State *L, int narg)
 {
        luaL_checktype(L, narg, LUA_TUSERDATA);
        void *ud = luaL_checkudata(L, narg, className);
        if (!ud)
                luaL_typerror(L, narg, className);
 
-       return *(ItemStackMetaRef**)ud;  // unbox pointer
+       return *(ItemStackMetaRef **)ud; // unbox pointer
 }
 
-MetadataItemStackMetaRef::getmeta(bool auto_create)
+Metadata *ItemStackMetaRef::getmeta(bool auto_create)
 {
        return &istack->metadata;
 }
@@ -44,15 +46,30 @@ void ItemStackMetaRef::clearMeta()
        istack->metadata.clear();
 }
 
-void ItemStackMetaRef::reportMetadataChange()
+void ItemStackMetaRef::reportMetadataChange(const std::string *name)
 {
        // TODO
 }
 
 // Exported functions
+int ItemStackMetaRef::l_set_tool_capabilities(lua_State *L)
+{
+       ItemStackMetaRef *metaref = checkobject(L, 1);
+       if (lua_isnoneornil(L, 2)) {
+               metaref->clearToolCapabilities();
+       } else if (lua_istable(L, 2)) {
+               ToolCapabilities caps = read_tool_capabilities(L, 2);
+               metaref->setToolCapabilities(caps);
+       } else {
+               luaL_typerror(L, 2, "table or nil");
+       }
+
+       return 0;
+}
 
 // garbage collector
-int ItemStackMetaRef::gc_object(lua_State *L) {
+int ItemStackMetaRef::gc_object(lua_State *L)
+{
        ItemStackMetaRef *o = *(ItemStackMetaRef **)(lua_touserdata(L, 1));
        delete o;
        return 0;
@@ -63,7 +80,7 @@ int ItemStackMetaRef::gc_object(lua_State *L) {
 void ItemStackMetaRef::create(lua_State *L, ItemStack *istack)
 {
        ItemStackMetaRef *o = new ItemStackMetaRef(istack);
-       //infostream<<"NodeMetaRef::create: o="<<o<<std::endl;
+       // infostream<<"NodeMetaRef::create: o="<<o<<std::endl;
        *(void **)(lua_newuserdata(L, sizeof(void *))) = o;
        luaL_getmetatable(L, className);
        lua_setmetatable(L, -2);
@@ -78,7 +95,7 @@ void ItemStackMetaRef::Register(lua_State *L)
 
        lua_pushliteral(L, "__metatable");
        lua_pushvalue(L, methodtable);
-       lua_settable(L, metatable);  // hide metatable from Lua getmetatable()
+       lua_settable(L, metatable); // hide metatable from Lua getmetatable()
 
        lua_pushliteral(L, "metadata_class");
        lua_pushlstring(L, className, strlen(className));
@@ -96,25 +113,20 @@ void ItemStackMetaRef::Register(lua_State *L)
        lua_pushcfunction(L, l_equals);
        lua_settable(L, metatable);
 
-       lua_pop(L, 1);  // drop metatable
+       lua_pop(L, 1); // drop metatable
 
-       luaL_openlib(L, 0, methods, 0);  // fill methodtable
-       lua_pop(L, 1);  // drop methodtable
+       luaL_openlib(L, 0, methods, 0); // fill methodtable
+       lua_pop(L, 1);                  // drop methodtable
 
        // Cannot be created from Lua
-       //lua_register(L, className, create_object);
+       // lua_register(L, className, create_object);
 }
 
 const char ItemStackMetaRef::className[] = "ItemStackMetaRef";
-const luaL_Reg ItemStackMetaRef::methods[] = {
-       luamethod(MetaDataRef, get_string),
-       luamethod(MetaDataRef, set_string),
-       luamethod(MetaDataRef, get_int),
-       luamethod(MetaDataRef, set_int),
-       luamethod(MetaDataRef, get_float),
-       luamethod(MetaDataRef, set_float),
-       luamethod(MetaDataRef, to_table),
-       luamethod(MetaDataRef, from_table),
-       luamethod(MetaDataRef, equals),
-       {0,0}
-};
+const luaL_Reg ItemStackMetaRef::methods[] = {luamethod(MetaDataRef, contains),
+               luamethod(MetaDataRef, get), luamethod(MetaDataRef, get_string),
+               luamethod(MetaDataRef, set_string), luamethod(MetaDataRef, get_int),
+               luamethod(MetaDataRef, set_int), luamethod(MetaDataRef, get_float),
+               luamethod(MetaDataRef, set_float), luamethod(MetaDataRef, to_table),
+               luamethod(MetaDataRef, from_table), luamethod(MetaDataRef, equals),
+               luamethod(ItemStackMetaRef, set_tool_capabilities), {0, 0}};