summaryrefslogtreecommitdiff
path: root/src/scriptapi_nodemeta.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/scriptapi_nodemeta.h')
-rw-r--r--src/scriptapi_nodemeta.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/scriptapi_nodemeta.h b/src/scriptapi_nodemeta.h
new file mode 100644
index 000000000..6d1802a9c
--- /dev/null
+++ b/src/scriptapi_nodemeta.h
@@ -0,0 +1,125 @@
+/*
+Minetest-c55
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+#ifndef LUA_NODEMETA_H_
+#define LUA_NODEMETA_H_
+
+#include <irr_v3d.h>
+
+extern "C" {
+#include <lua.h>
+#include <lauxlib.h>
+}
+
+#include "environment.h"
+#include "nodemetadata.h"
+
+/*
+ NodeMetaRef
+*/
+
+class NodeMetaRef
+{
+private:
+ v3s16 m_p;
+ ServerEnvironment *m_env;
+
+ static const char className[];
+ static const luaL_reg methods[];
+
+ static NodeMetaRef *checkobject(lua_State *L, int narg);
+
+ static NodeMetadata* getmeta(NodeMetaRef *ref, bool auto_create);
+
+ static void reportMetadataChange(NodeMetaRef *ref);
+
+ // Exported functions
+
+ // garbage collector
+ static int gc_object(lua_State *L);
+
+ // get_string(self, name)
+ static int l_get_string(lua_State *L);
+
+ // set_string(self, name, var)
+ static int l_set_string(lua_State *L);
+
+ // get_int(self, name)
+ static int l_get_int(lua_State *L);
+
+ // set_int(self, name, var)
+ static int l_set_int(lua_State *L);
+
+ // get_float(self, name)
+ static int l_get_float(lua_State *L);
+
+ // set_float(self, name, var)
+ static int l_set_float(lua_State *L);
+
+ // get_inventory(self)
+ static int l_get_inventory(lua_State *L);
+
+ // to_table(self)
+ static int l_to_table(lua_State *L);
+
+ // from_table(self, table)
+ static int l_from_table(lua_State *L);
+
+public:
+ NodeMetaRef(v3s16 p, ServerEnvironment *env);
+
+ ~NodeMetaRef();
+
+ // Creates an NodeMetaRef and leaves it on top of stack
+ // Not callable from Lua; all references are created on the C side.
+ static void create(lua_State *L, v3s16 p, ServerEnvironment *env);
+
+ static void Register(lua_State *L);
+};
+
+/*****************************************************************************/
+/* Minetest interface */
+/*****************************************************************************/
+// Return number of accepted items to be moved
+int scriptapi_nodemeta_inventory_allow_move(lua_State *L, v3s16 p,
+ const std::string &from_list, int from_index,
+ const std::string &to_list, int to_index,
+ int count, ServerActiveObject *player);
+// Return number of accepted items to be put
+int scriptapi_nodemeta_inventory_allow_put(lua_State *L, v3s16 p,
+ const std::string &listname, int index, ItemStack &stack,
+ ServerActiveObject *player);
+// Return number of accepted items to be taken
+int scriptapi_nodemeta_inventory_allow_take(lua_State *L, v3s16 p,
+ const std::string &listname, int index, ItemStack &stack,
+ ServerActiveObject *player);
+// Report moved items
+void scriptapi_nodemeta_inventory_on_move(lua_State *L, v3s16 p,
+ const std::string &from_list, int from_index,
+ const std::string &to_list, int to_index,
+ int count, ServerActiveObject *player);
+// Report put items
+void scriptapi_nodemeta_inventory_on_put(lua_State *L, v3s16 p,
+ const std::string &listname, int index, ItemStack &stack,
+ ServerActiveObject *player);
+// Report taken items
+void scriptapi_nodemeta_inventory_on_take(lua_State *L, v3s16 p,
+ const std::string &listname, int index, ItemStack &stack,
+ ServerActiveObject *player);
+
+#endif //LUA_NODEMETA_H_