]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/cpp_api/s_item.cpp
Expose getPointedThing to Lua
[dragonfireclient.git] / src / script / cpp_api / s_item.cpp
index d9a545b4ff9ccea1c68a0a5e07060c140185bcf0..032018f2f7438c59bef671b7a5b3b85d3c290fc1 100644 (file)
@@ -47,7 +47,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item,
        PCALL_RES(lua_pcall(L, 3, 1, error_handler));
        if (!lua_isnil(L, -1)) {
                try {
-                       item = read_item(L,-1, getServer());
+                       item = read_item(L, -1, getServer()->idef());
                } catch (LuaError &e) {
                        throw LuaError(std::string(e.what()) + ". item=" + item.name);
                }
@@ -74,7 +74,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item,
        PCALL_RES(lua_pcall(L, 3, 1, error_handler));
        if (!lua_isnil(L, -1)) {
                try {
-                       item = read_item(L,-1, getServer());
+                       item = read_item(L, -1, getServer()->idef());
                } catch (LuaError &e) {
                        throw LuaError(std::string(e.what()) + ". item=" + item.name);
                }
@@ -101,7 +101,33 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
        PCALL_RES(lua_pcall(L, 3, 1, error_handler));
        if(!lua_isnil(L, -1)) {
                try {
-                       item = read_item(L,-1, getServer());
+                       item = read_item(L, -1, getServer()->idef());
+               } catch (LuaError &e) {
+                       throw LuaError(std::string(e.what()) + ". item=" + item.name);
+               }
+       }
+       lua_pop(L, 2);  // Pop item and error handler
+       return true;
+}
+
+bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, ServerActiveObject *user)
+{
+       SCRIPTAPI_PRECHECKHEADER
+       
+       int error_handler = PUSH_ERROR_HANDLER(L);
+       
+       if (!getItemCallback(item.name.c_str(), "on_secondary_use"))
+               return false;
+       
+       LuaItemStack::create(L, item);
+       objectrefGetOrCreate(L, user);
+       PointedThing pointed;
+       pointed.type = POINTEDTHING_NOTHING;
+       pushPointedThing(pointed);
+       PCALL_RES(lua_pcall(L, 3, 1, error_handler));
+       if (!lua_isnil(L, -1)) {
+               try {
+                       item = read_item(L, -1, getServer()->idef());
                } catch (LuaError &e) {
                        throw LuaError(std::string(e.what()) + ". item=" + item.name);
                }
@@ -133,7 +159,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
        PCALL_RES(lua_pcall(L, 4, 1, error_handler));
        if (!lua_isnil(L, -1)) {
                try {
-                       item = read_item(L,-1, getServer());
+                       item = read_item(L, -1, getServer()->idef());
                } catch (LuaError &e) {
                        throw LuaError(std::string(e.what()) + ". item=" + item.name);
                }
@@ -165,7 +191,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
        PCALL_RES(lua_pcall(L, 4, 1, error_handler));
        if (!lua_isnil(L, -1)) {
                try {
-                       item = read_item(L,-1, getServer());
+                       item = read_item(L, -1, getServer()->idef());
                } catch (LuaError &e) {
                        throw LuaError(std::string(e.what()) + ". item=" + item.name);
                }
@@ -223,27 +249,6 @@ void ScriptApiItem::pushPointedThing(const PointedThing& pointed)
 {
        lua_State* L = getStack();
 
-       lua_newtable(L);
-       if(pointed.type == POINTEDTHING_NODE)
-       {
-               lua_pushstring(L, "node");
-               lua_setfield(L, -2, "type");
-               push_v3s16(L, pointed.node_undersurface);
-               lua_setfield(L, -2, "under");
-               push_v3s16(L, pointed.node_abovesurface);
-               lua_setfield(L, -2, "above");
-       }
-       else if(pointed.type == POINTEDTHING_OBJECT)
-       {
-               lua_pushstring(L, "object");
-               lua_setfield(L, -2, "type");
-               objectrefGet(L, pointed.object_id);
-               lua_setfield(L, -2, "ref");
-       }
-       else
-       {
-               lua_pushstring(L, "nothing");
-               lua_setfield(L, -2, "type");
-       }
+       push_pointed_thing(L, pointed);
 }