51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef L_ITEM_H_
-#define L_ITEM_H_
-
-extern "C" {
-#include <lua.h>
-#include <lauxlib.h>
-}
-
-#include <vector>
-
-#include "itemdef.h"
-#include "content_sao.h"
-#include "util/pointedthing.h"
-#include "inventory.h"
+#pragma once
#include "lua_api/l_base.h"
+#include "inventory.h" // ItemStack
-class ModApiInventory;
-
-class LuaItemStack
-{
+class LuaItemStack : public ModApiBase {
private:
ItemStack m_stack;
static const char className[];
- static const luaL_reg methods[];
+ static const luaL_Reg methods[];
// Exported functions
// garbage collector
static int gc_object(lua_State *L);
+ // __tostring metamethod
+ static int mt_tostring(lua_State *L);
+
// is_empty(self) -> true/false
static int l_is_empty(lua_State *L);
// 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_meta(self) -> string
+ static int l_get_meta(lua_State *L);
+
+ // DEPRECATED
// get_metadata(self) -> string
static int l_get_metadata(lua_State *L);
+ // DEPRECATED
+ // set_metadata(self, string)
+ static int l_set_metadata(lua_State *L);
+
+ // get_description(self)
+ static int l_get_description(lua_State *L);
+
+ // get_short_description(self)
+ static int l_get_short_description(lua_State *L);
+
// clear(self) -> true
static int l_clear(lua_State *L);
static int l_is_known(lua_State *L);
// get_definition(self) -> table
- // Returns the item definition table from minetest.registered_items,
+ // Returns the item definition table from core.registered_items,
// or a fallback one (name="unknown")
static int l_get_definition(lua_State *L);
static int l_get_tool_capabilities(lua_State *L);
// add_wear(self, amount) -> true/false
- // The range for "amount" is [0,65535]. Wear is only added if the item
+ // The range for "amount" is [0,65536]. Wear is only added if the item
// is a tool. Adding wear might destroy the item.
// Returns true if the item is (or was) a tool.
static int l_add_wear(lua_State *L);
+ // add_wear_by_uses(self, max_uses) -> true/false
+ // The range for "max_uses" is [0,65536].
+ // Adds wear to the item in such a way that, if
+ // only this function is called to add wear, the item
+ // will be destroyed exactly after `max_uses` times of calling it.
+ // No-op if `max_uses` is 0 or item is not a tool.
+ // Returns true if the item is (or was) a tool.
+ static int l_add_wear_by_uses(lua_State *L);
+
// add_item(self, itemstack or itemstring or table or nil) -> itemstack
// Returns leftover item stack
static int l_add_item(lua_State *L);
public:
LuaItemStack(const ItemStack &item);
- ~LuaItemStack();
+ ~LuaItemStack() = default;
const ItemStack& getItem() const;
ItemStack& getItem();
// Not callable from Lua
static int create(lua_State *L, const ItemStack &item);
static LuaItemStack* checkobject(lua_State *L, int narg);
- static void Register(lua_State *L);
-};
+ static void *packIn(lua_State *L, int idx);
+ static void packOut(lua_State *L, void *ptr);
-class ModApiItemMod
- :virtual public ModApiBase
-{
-public:
- ModApiItemMod();
-
- bool Initialize(lua_State *L,int top);
+ static void Register(lua_State *L);
+};
+class ModApiItemMod : public ModApiBase {
+private:
static int l_register_item_raw(lua_State *L);
+ static int l_unregister_item_raw(lua_State *L);
static int l_register_alias_raw(lua_State *L);
-};
-
+ static int l_get_content_id(lua_State *L);
+ static int l_get_name_from_content_id(lua_State *L);
-
-#endif /* L_ITEM_H_ */
+public:
+ static void Initialize(lua_State *L, int top);
+ static void InitializeAsync(lua_State *L, int top);
+};