Unkown nodes: Provide position on interact (#6505)
authorSmallJoker <SmallJoker@users.noreply.github.com>
Sat, 7 Oct 2017 13:11:07 +0000 (15:11 +0200)
committerSmallJoker <mk939@ymail.com>
Sun, 3 Jun 2018 15:31:59 +0000 (17:31 +0200)
* Unkown nodes: Provide position on interact

src/script/cpp_api/s_item.cpp
src/script/cpp_api/s_item.h
src/script/cpp_api/s_node.cpp
src/script/cpp_api/s_nodemeta.cpp

index e13da1c8626842483c4ecf8312811b69d09fde95..0654ca3dce3df64c7114fc9074729b82307d006a 100644 (file)
@@ -211,7 +211,8 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
 // function onto the stack
 // If core.registered_items[name] doesn't exist, core.nodedef_default
 // is tried instead so unknown items can still be manipulated to some degree
-bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname)
+bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname,
+               const v3s16 *p)
 {
        lua_State* L = getStack();
 
@@ -222,10 +223,12 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname)
        lua_getfield(L, -1, name);
        lua_remove(L, -2); // Remove registered_items
        // Should be a table
-       if(lua_type(L, -1) != LUA_TTABLE)
-       {
+       if (lua_type(L, -1) != LUA_TTABLE) {
                // Report error and clean up
-               errorstream << "Item \"" << name << "\" not defined" << std::endl;
+               errorstream << "Item \"" << name << "\" not defined";
+               if (p)
+                       errorstream << " at position " << PP(*p);
+               errorstream << std::endl;
                lua_pop(L, 1);
 
                // Try core.nodedef_default instead
index 7350a71c5e3d19d6e0d901d447e40d4b17dc193d..b4b02b0c50214724f5630f7c5f2041870eb59619 100644 (file)
@@ -53,7 +53,7 @@ protected:
        friend class LuaItemStack;
        friend class ModApiItemMod;
 
-       bool getItemCallback(const char *name, const char *callbackname);
+       bool getItemCallback(const char *name, const char *callbackname, const v3s16 *p = nullptr);
        void pushPointedThing(const PointedThing& pointed);
 
 };
index 1ae8f58a511e51f54e4721efd653600975caea82..91e153c184c2edd28d48348f479573d8f3168e08 100644 (file)
@@ -107,7 +107,7 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_punch"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_punch", &p))
                return false;
 
        // Call function
@@ -130,7 +130,7 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_dig"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_dig", &p))
                return false;
 
        // Call function
@@ -151,7 +151,7 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_construct"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_construct", &p))
                return;
 
        // Call function
@@ -169,7 +169,7 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node)
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_destruct"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_destruct", &p))
                return;
 
        // Call function
@@ -187,7 +187,7 @@ bool ScriptApiNode::node_on_flood(v3s16 p, MapNode node, MapNode newnode)
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_flood"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_flood", &p))
                return false;
 
        // Call function
@@ -208,7 +208,7 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node)
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "after_destruct"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "after_destruct", &p))
                return;
 
        // Call function
@@ -227,7 +227,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
        INodeDefManager *ndef = getServer()->ndef();
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_timer"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_timer", &p))
                return false;
 
        // Call function
@@ -255,7 +255,7 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
                return;
 
        // Push callback function on stack
-       if (!getItemCallback(ndef->get(node).name.c_str(), "on_receive_fields"))
+       if (!getItemCallback(ndef->get(node).name.c_str(), "on_receive_fields", &p))
                return;
 
        // Call function
index d050c0bc9f4ffe77d2bc6b27d4208301cd156ee8..2f726dfa2b9a0fd88754bdf5db6b882227a1db5d 100644 (file)
@@ -45,7 +45,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move"))
+       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move", &p))
                return count;
 
        // function(pos, from_list, from_index, to_list, to_index, count, player)
@@ -83,7 +83,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put"))
+       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put", &p))
                return stack.count;
 
        // Call function(pos, listname, index, stack, player)
@@ -119,7 +119,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take"))
+       if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take", &p))
                return stack.count;
 
        // Call function(pos, listname, index, count, player)
@@ -156,7 +156,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move"))
+       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move", &p))
                return;
 
        // function(pos, from_list, from_index, to_list, to_index, count, player)
@@ -189,7 +189,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put"))
+       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put", &p))
                return;
 
        // Call function(pos, listname, index, stack, player)
@@ -220,7 +220,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p,
 
        // Push callback function on stack
        std::string nodename = ndef->get(node).name;
-       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take"))
+       if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take", &p))
                return;
 
        // Call function(pos, listname, index, stack, player)