LuaItemStack: Fix and document behavior of set_name, set_count, set_wear, set_metadata
authorkwolekr <kwolekr@minetest.net>
Mon, 29 Dec 2014 04:58:06 +0000 (23:58 -0500)
committerkwolekr <kwolekr@minetest.net>
Mon, 29 Dec 2014 04:59:24 +0000 (23:59 -0500)
doc/lua_api.txt
src/script/lua_api/l_item.cpp

index 1bfe0a0c22c53dbfe89dfe30f21a149f0e78377a..557fdccb1425f7fa047e91d41e465a66bf7cc2c0 100644 (file)
@@ -2152,13 +2152,16 @@ ItemStack: A stack of items.
 methods:
 - is_empty(): return true if stack is empty
 - get_name(): returns item name (e.g. "default:stone")
-- set_name(itemname)
+- set_name(itemname): returns true/false (success)
+  ^ clears item on failure
 - get_count(): returns number of items on the stack
-- set_count(count)
+- set_count(count): returns true/false (success)
+  ^ clears item on failure
 - get_wear(): returns tool wear (0-65535), 0 for non-tools
-- set_wear(wear)
+- set_wear(wear): returns true/false (success)
+  ^ clears item on failure
 - get_metadata(): returns metadata (a string attached to an item stack)
-- set_metadata(metadata)
+- set_metadata(metadata): returns true
 - clear(): removes all items from the stack, making it empty
 - replace(item): replace the contents of this stack (item can also
     be an itemstring or table)
index bc6a8ecde78b2029536eecba140f5d3acae61979..842b157090bdbb9e9ce7a1933d9a93c7d22c520d 100644 (file)
@@ -63,11 +63,15 @@ int LuaItemStack::l_set_name(lua_State *L)
        NO_MAP_LOCK_REQUIRED;
        LuaItemStack *o = checkobject(L, 1);
        ItemStack &item = o->m_stack;
-       item.name = luaL_checkstring(L, 2);
 
-       if (item.name == "" || item.empty())
+       bool status = true;
+       item.name = luaL_checkstring(L, 2);
+       if (item.name == "" || item.empty()) {
                item.clear();
+               status = false;
+       }
 
+       lua_pushboolean(L, status);
        return 1;
 }
 
@@ -87,11 +91,18 @@ int LuaItemStack::l_set_count(lua_State *L)
        NO_MAP_LOCK_REQUIRED;
        LuaItemStack *o = checkobject(L, 1);
        ItemStack &item = o->m_stack;
-       item.count = luaL_checkinteger(L, 2);
 
-       if (item.name == "" || item.empty())
+       bool status;
+       lua_Integer count = luaL_checkinteger(L, 2);
+       if (count <= 65535) {
+               item.count = count;
+               status = true;
+       } else {
                item.clear();
+               status = false;
+       }
 
+       lua_pushboolean(L, status);
        return 1;
 }
 
@@ -111,11 +122,18 @@ int LuaItemStack::l_set_wear(lua_State *L)
        NO_MAP_LOCK_REQUIRED;
        LuaItemStack *o = checkobject(L, 1);
        ItemStack &item = o->m_stack;
-       item.wear = luaL_checkinteger(L, 2);
 
-       if (item.wear > 65535)
+       bool status;
+       lua_Integer wear = luaL_checkinteger(L, 2);
+       if (wear <= 65535) {
+               item.wear = wear;
+               status = true;
+       } else {
                item.clear();
+               status = false;
+       }
 
+       lua_pushboolean(L, status);
        return 1;
 }
 
@@ -138,11 +156,9 @@ int LuaItemStack::l_set_metadata(lua_State *L)
 
        size_t len = 0;
        const char *ptr = luaL_checklstring(L, 2, &len);
-       if (ptr)
-               item.metadata.assign(ptr, len);
-       else
-               item.metadata = "";
+       item.metadata.assign(ptr, len);
 
+       lua_pushboolean(L, true);
        return 1;
 }
 
@@ -533,7 +549,7 @@ int ModApiItemMod::l_get_content_id(lua_State *L)
 
        INodeDefManager *ndef = getServer(L)->getNodeDefManager();
        content_t c = ndef->getId(name);
-       
+
        lua_pushinteger(L, c);
        return 1; /* number of results */
 }
@@ -546,7 +562,7 @@ int ModApiItemMod::l_get_name_from_content_id(lua_State *L)
 
        INodeDefManager *ndef = getServer(L)->getNodeDefManager();
        const char *name = ndef->get(c).name.c_str();
-       
+
        lua_pushstring(L, name);
        return 1; /* number of results */
 }