1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Consolidate API object code (#12728)

Co-authored-by: sfan5 <sfan5@live.de>
This commit is contained in:
Jude Melton-Houghton 2022-10-04 08:31:36 -04:00 committed by GitHub
parent b21fb18379
commit 7632af3c73
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 463 additions and 1079 deletions

View file

@ -41,7 +41,7 @@ int LuaItemStack::gc_object(lua_State *L)
// __tostring metamethod
int LuaItemStack::mt_tostring(lua_State *L)
{
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
std::string itemstring = o->m_stack.getItemString(false);
lua_pushfstring(L, "ItemStack(\"%s\")", itemstring.c_str());
return 1;
@ -51,7 +51,7 @@ int LuaItemStack::mt_tostring(lua_State *L)
int LuaItemStack::l_is_empty(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushboolean(L, item.empty());
return 1;
@ -61,7 +61,7 @@ int LuaItemStack::l_is_empty(lua_State *L)
int LuaItemStack::l_get_name(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushstring(L, item.name.c_str());
return 1;
@ -71,7 +71,7 @@ int LuaItemStack::l_get_name(lua_State *L)
int LuaItemStack::l_set_name(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
bool status = true;
@ -89,7 +89,7 @@ int LuaItemStack::l_set_name(lua_State *L)
int LuaItemStack::l_get_count(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushinteger(L, item.count);
return 1;
@ -99,7 +99,7 @@ int LuaItemStack::l_get_count(lua_State *L)
int LuaItemStack::l_set_count(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
bool status;
@ -120,7 +120,7 @@ int LuaItemStack::l_set_count(lua_State *L)
int LuaItemStack::l_get_wear(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushinteger(L, item.wear);
return 1;
@ -130,7 +130,7 @@ int LuaItemStack::l_get_wear(lua_State *L)
int LuaItemStack::l_set_wear(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
bool status;
@ -151,7 +151,7 @@ int LuaItemStack::l_set_wear(lua_State *L)
int LuaItemStack::l_get_meta(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStackMetaRef::create(L, o);
return 1;
}
@ -161,7 +161,7 @@ int LuaItemStack::l_get_meta(lua_State *L)
int LuaItemStack::l_get_metadata(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
const std::string &value = item.metadata.getString("");
lua_pushlstring(L, value.c_str(), value.size());
@ -173,7 +173,7 @@ int LuaItemStack::l_get_metadata(lua_State *L)
int LuaItemStack::l_set_metadata(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
size_t len = 0;
@ -188,7 +188,7 @@ int LuaItemStack::l_set_metadata(lua_State *L)
int LuaItemStack::l_get_description(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
std::string desc = o->m_stack.getDescription(getGameDef(L)->idef());
lua_pushstring(L, desc.c_str());
return 1;
@ -198,7 +198,7 @@ int LuaItemStack::l_get_description(lua_State *L)
int LuaItemStack::l_get_short_description(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
std::string desc = o->m_stack.getShortDescription(getGameDef(L)->idef());
lua_pushstring(L, desc.c_str());
return 1;
@ -208,7 +208,7 @@ int LuaItemStack::l_get_short_description(lua_State *L)
int LuaItemStack::l_clear(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
o->m_stack.clear();
lua_pushboolean(L, true);
return 1;
@ -218,7 +218,7 @@ int LuaItemStack::l_clear(lua_State *L)
int LuaItemStack::l_replace(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
o->m_stack = read_item(L, 2, getGameDef(L)->idef());
lua_pushboolean(L, true);
return 1;
@ -228,7 +228,7 @@ int LuaItemStack::l_replace(lua_State *L)
int LuaItemStack::l_to_string(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
std::string itemstring = o->m_stack.getItemString();
lua_pushstring(L, itemstring.c_str());
return 1;
@ -238,7 +238,7 @@ int LuaItemStack::l_to_string(lua_State *L)
int LuaItemStack::l_to_table(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
const ItemStack &item = o->m_stack;
if(item.empty())
{
@ -278,7 +278,7 @@ int LuaItemStack::l_to_table(lua_State *L)
int LuaItemStack::l_get_stack_max(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushinteger(L, item.getStackMax(getGameDef(L)->idef()));
return 1;
@ -288,7 +288,7 @@ int LuaItemStack::l_get_stack_max(lua_State *L)
int LuaItemStack::l_get_free_space(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
lua_pushinteger(L, item.freeSpace(getGameDef(L)->idef()));
return 1;
@ -299,7 +299,7 @@ int LuaItemStack::l_get_free_space(lua_State *L)
int LuaItemStack::l_is_known(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
bool is_known = item.isKnown(getGameDef(L)->idef());
lua_pushboolean(L, is_known);
@ -312,7 +312,7 @@ int LuaItemStack::l_is_known(lua_State *L)
int LuaItemStack::l_get_definition(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
// Get registered_items[name]
@ -334,7 +334,7 @@ int LuaItemStack::l_get_definition(lua_State *L)
int LuaItemStack::l_get_tool_capabilities(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
const ToolCapabilities &prop =
item.getToolCapabilities(getGameDef(L)->idef());
@ -349,7 +349,7 @@ int LuaItemStack::l_get_tool_capabilities(lua_State *L)
int LuaItemStack::l_add_wear(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
int amount = lua_tointeger(L, 2);
bool result = item.addWear(amount, getGameDef(L)->idef());
@ -367,7 +367,7 @@ int LuaItemStack::l_add_wear(lua_State *L)
int LuaItemStack::l_add_wear_by_uses(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
u32 max_uses = readParam<int>(L, 2);
u32 add_wear = calculateResultWear(max_uses, item.wear);
@ -381,7 +381,7 @@ int LuaItemStack::l_add_wear_by_uses(lua_State *L)
int LuaItemStack::l_add_item(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
ItemStack newitem = read_item(L, -1, getGameDef(L)->idef());
ItemStack leftover = item.addItem(newitem, getGameDef(L)->idef());
@ -395,7 +395,7 @@ int LuaItemStack::l_add_item(lua_State *L)
int LuaItemStack::l_item_fits(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
ItemStack newitem = read_item(L, 2, getGameDef(L)->idef());
ItemStack restitem;
@ -409,7 +409,7 @@ int LuaItemStack::l_item_fits(lua_State *L)
int LuaItemStack::l_take_item(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
u32 takecount = 1;
if(!lua_isnone(L, 2))
@ -423,7 +423,7 @@ int LuaItemStack::l_take_item(lua_State *L)
int LuaItemStack::l_peek_item(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
LuaItemStack *o = checkobject(L, 1);
LuaItemStack *o = checkObject<LuaItemStack>(L, 1);
ItemStack &item = o->m_stack;
u32 peekcount = 1;
if(!lua_isnone(L, 2))
@ -464,14 +464,9 @@ int LuaItemStack::create(lua_State *L, const ItemStack &item)
return 1;
}
LuaItemStack *LuaItemStack::checkobject(lua_State *L, int narg)
{
return *(LuaItemStack **)luaL_checkudata(L, narg, className);
}
void *LuaItemStack::packIn(lua_State *L, int idx)
{
LuaItemStack *o = checkobject(L, idx);
LuaItemStack *o = checkObject<LuaItemStack>(L, idx);
return new ItemStack(o->getItem());
}
@ -485,32 +480,12 @@ void LuaItemStack::packOut(lua_State *L, void *ptr)
void LuaItemStack::Register(lua_State *L)
{
lua_newtable(L);
int methodtable = lua_gettop(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);
lua_pushliteral(L, "__index");
lua_pushvalue(L, methodtable);
lua_settable(L, metatable);
lua_pushliteral(L, "__gc");
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_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
static const luaL_Reg metamethods[] = {
{"__tostring", mt_tostring},
{"__gc", gc_object},
{0, 0}
};
registerClass(L, className, methods, metamethods);
// Can be created from Lua (ItemStack(itemstack or itemstring or table or nil))
lua_register(L, className, create_object);