mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
LuaItemStack: Add __tostring metamethod (#8785)
* LuaItemStack: Add __tostring metamethod * Clean up LuaItemStack::checkobject
This commit is contained in:
parent
09e285f38c
commit
b16f841756
5 changed files with 41 additions and 22 deletions
|
@ -37,6 +37,15 @@ int LuaItemStack::gc_object(lua_State *L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// __tostring metamethod
|
||||
int LuaItemStack::mt_tostring(lua_State *L)
|
||||
{
|
||||
LuaItemStack *o = checkobject(L, 1);
|
||||
std::string itemstring = o->m_stack.getItemString(false);
|
||||
lua_pushfstring(L, "ItemStack(\"%s\")", itemstring.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// is_empty(self) -> true/false
|
||||
int LuaItemStack::l_is_empty(lua_State *L)
|
||||
{
|
||||
|
@ -433,12 +442,9 @@ int LuaItemStack::create(lua_State *L, const ItemStack &item)
|
|||
return 1;
|
||||
}
|
||||
|
||||
LuaItemStack* LuaItemStack::checkobject(lua_State *L, int narg)
|
||||
LuaItemStack *LuaItemStack::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 *(LuaItemStack**)ud; // unbox pointer
|
||||
return *(LuaItemStack **)luaL_checkudata(L, narg, className);
|
||||
}
|
||||
|
||||
void LuaItemStack::Register(lua_State *L)
|
||||
|
@ -448,9 +454,10 @@ void LuaItemStack::Register(lua_State *L)
|
|||
luaL_newmetatable(L, className);
|
||||
int metatable = lua_gettop(L);
|
||||
|
||||
// hide metatable from Lua getmetatable()
|
||||
lua_pushliteral(L, "__metatable");
|
||||
lua_pushvalue(L, methodtable);
|
||||
lua_settable(L, metatable); // hide metatable from Lua getmetatable()
|
||||
lua_settable(L, metatable);
|
||||
|
||||
lua_pushliteral(L, "__index");
|
||||
lua_pushvalue(L, methodtable);
|
||||
|
@ -460,12 +467,16 @@ void LuaItemStack::Register(lua_State *L)
|
|||
lua_pushcfunction(L, gc_object);
|
||||
lua_settable(L, metatable);
|
||||
|
||||
lua_pushliteral(L, "__tostring");
|
||||
lua_pushcfunction(L, mt_tostring);
|
||||
lua_settable(L, metatable);
|
||||
|
||||
lua_pop(L, 1); // drop metatable
|
||||
|
||||
luaL_openlib(L, 0, methods, 0); // fill methodtable
|
||||
lua_pop(L, 1); // drop methodtable
|
||||
|
||||
// Can be created from Lua (LuaItemStack(itemstack or itemstring or table or nil))
|
||||
// Can be created from Lua (ItemStack(itemstack or itemstring or table or nil))
|
||||
lua_register(L, className, create_object);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue