Add set_name(), set_count(), set_wear() and set_metadata() to Lua ItemStack
authorPilzAdam <pilzadam@minetest.net>
Sat, 28 Sep 2013 20:47:09 +0000 (22:47 +0200)
committerPilzAdam <pilzadam@minetest.net>
Sat, 28 Sep 2013 21:46:48 +0000 (23:46 +0200)
doc/lua_api.txt
src/script/lua_api/l_item.cpp
src/script/lua_api/l_item.h

index 06230eaa7a394ea128282e93217da03da1728698..335f8af6543d019ce89fcb9036b2b4f4e29339bd 100644 (file)
@@ -1658,9 +1658,13 @@ 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)
 - get_count(): returns number of items on the stack
+- set_count(count)
 - get_wear(): returns tool wear (0-65535), 0 for non-tools
+- set_wear(wear)
 - get_metadata(): returns metadata (a string attached to an item stack)
+- set_metadata(metadata)
 - 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 a43b2858f6bb3ae1055b016bddd3025ee2e9f57a..512cd7398cd24d141cb01665fb053ab5b67a0d36 100644 (file)
@@ -57,6 +57,20 @@ int LuaItemStack::l_get_name(lua_State *L)
        return 1;
 }
 
+// set_name(self, name)
+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())
+               item.clear();
+
+       return 1;
+}
+
 // get_count(self) -> number
 int LuaItemStack::l_get_count(lua_State *L)
 {
@@ -67,6 +81,20 @@ int LuaItemStack::l_get_count(lua_State *L)
        return 1;
 }
 
+// set_count(self, number)
+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())
+               item.clear();
+
+       return 1;
+}
+
 // get_wear(self) -> number
 int LuaItemStack::l_get_wear(lua_State *L)
 {
@@ -77,6 +105,20 @@ int LuaItemStack::l_get_wear(lua_State *L)
        return 1;
 }
 
+// set_wear(self, number)
+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)
+               item.clear();
+
+       return 1;
+}
+
 // get_metadata(self) -> string
 int LuaItemStack::l_get_metadata(lua_State *L)
 {
@@ -87,6 +129,23 @@ int LuaItemStack::l_get_metadata(lua_State *L)
        return 1;
 }
 
+// set_metadata(self, string)
+int LuaItemStack::l_set_metadata(lua_State *L)
+{
+       NO_MAP_LOCK_REQUIRED;
+       LuaItemStack *o = checkobject(L, 1);
+       ItemStack &item = o->m_stack;
+
+       size_t len = 0;
+       const char *ptr = luaL_checklstring(L, 2, &len);
+       if (ptr)
+               item.metadata.assign(ptr, len);
+       else
+               item.metadata = "";
+
+       return 1;
+}
+
 // clear(self) -> true
 int LuaItemStack::l_clear(lua_State *L)
 {
@@ -363,9 +422,13 @@ const char LuaItemStack::className[] = "ItemStack";
 const luaL_reg LuaItemStack::methods[] = {
        luamethod(LuaItemStack, is_empty),
        luamethod(LuaItemStack, get_name),
+       luamethod(LuaItemStack, set_name),
        luamethod(LuaItemStack, get_count),
+       luamethod(LuaItemStack, set_count),
        luamethod(LuaItemStack, get_wear),
+       luamethod(LuaItemStack, set_wear),
        luamethod(LuaItemStack, get_metadata),
+       luamethod(LuaItemStack, set_metadata),
        luamethod(LuaItemStack, clear),
        luamethod(LuaItemStack, replace),
        luamethod(LuaItemStack, to_string),
index 7c2e1b098578a233b675b3bb5acc5419856a21af..7f5a1130de6254c8d3dc62ffcbeba592b374bc46 100644 (file)
@@ -41,15 +41,27 @@ private:
        // get_name(self) -> string
        static int l_get_name(lua_State *L);
 
+       // set_name(self, name)
+       static int l_set_name(lua_State *L);
+
        // get_count(self) -> number
        static int l_get_count(lua_State *L);
 
+       // set_count(self, number)
+       static int l_set_count(lua_State *L);
+
        // get_wear(self) -> number
        static int l_get_wear(lua_State *L);
 
+       // set_wear(self, number)
+       static int l_set_wear(lua_State *L);
+
        // get_metadata(self) -> string
        static int l_get_metadata(lua_State *L);
 
+       // set_metadata(self, string)
+       static int l_set_metadata(lua_State *L);
+
        // clear(self) -> true
        static int l_clear(lua_State *L);