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:
parent
b21fb18379
commit
7632af3c73
42 changed files with 463 additions and 1079 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue