]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_item.cpp
Pass pointed_thing to on_punch and minetest.register_on_punchnode callbacks
[dragonfireclient.git] / src / script / lua_api / l_item.cpp
index a43b2858f6bb3ae1055b016bddd3025ee2e9f57a..4b5c8979244b692ecbfcfac74692ea6aa8b8e58e 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),
@@ -407,7 +470,7 @@ int ModApiItemMod::l_register_item_raw(lua_State *L)
                name = lua_tostring(L, -1);
                verbosestream<<"register_item_raw: "<<name<<std::endl;
        } else {
-               throw LuaError(L, "register_item_raw: name is not defined or not a string");
+               throw LuaError(NULL, "register_item_raw: name is not defined or not a string");
        }
 
        // Check if on_use is defined
@@ -437,7 +500,7 @@ int ModApiItemMod::l_register_item_raw(lua_State *L)
                content_t id = ndef->set(f.name, f);
 
                if(id > MAX_REGISTERED_CONTENT){
-                       throw LuaError(L, "Number of registerable nodes ("
+                       throw LuaError(NULL, "Number of registerable nodes ("
                                        + itos(MAX_REGISTERED_CONTENT+1)
                                        + ") exceeded (" + name + ")");
                }