mirror of
https://github.com/minetest/minetest.git
synced 2024-12-02 12:33:45 +01:00
Unkown nodes: Provide position on interact (#6505)
* Unkown nodes: Provide position on interact
This commit is contained in:
parent
200e9cc4a2
commit
0034abb560
@ -211,7 +211,8 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
|
|||||||
// function onto the stack
|
// function onto the stack
|
||||||
// If core.registered_items[name] doesn't exist, core.nodedef_default
|
// If core.registered_items[name] doesn't exist, core.nodedef_default
|
||||||
// is tried instead so unknown items can still be manipulated to some degree
|
// 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();
|
lua_State* L = getStack();
|
||||||
|
|
||||||
@ -222,10 +223,12 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname)
|
|||||||
lua_getfield(L, -1, name);
|
lua_getfield(L, -1, name);
|
||||||
lua_remove(L, -2); // Remove registered_items
|
lua_remove(L, -2); // Remove registered_items
|
||||||
// Should be a table
|
// Should be a table
|
||||||
if(lua_type(L, -1) != LUA_TTABLE)
|
if (lua_type(L, -1) != LUA_TTABLE) {
|
||||||
{
|
|
||||||
// Report error and clean up
|
// 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);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
// Try core.nodedef_default instead
|
// Try core.nodedef_default instead
|
||||||
|
@ -53,7 +53,7 @@ protected:
|
|||||||
friend class LuaItemStack;
|
friend class LuaItemStack;
|
||||||
friend class ModApiItemMod;
|
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);
|
void pushPointedThing(const PointedThing& pointed);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -107,7 +107,7 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return false;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -130,7 +130,7 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return false;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -151,7 +151,7 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -169,7 +169,7 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node)
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -187,7 +187,7 @@ bool ScriptApiNode::node_on_flood(v3s16 p, MapNode node, MapNode newnode)
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return false;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -208,7 +208,7 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node)
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -227,7 +227,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
|
|||||||
INodeDefManager *ndef = getServer()->ndef();
|
INodeDefManager *ndef = getServer()->ndef();
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return false;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
@ -255,7 +255,7 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Push callback function on stack
|
// 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;
|
return;
|
||||||
|
|
||||||
// Call function
|
// Call function
|
||||||
|
@ -45,7 +45,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p,
|
|||||||
|
|
||||||
// Push callback function on stack
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return count;
|
||||||
|
|
||||||
// function(pos, from_list, from_index, to_list, to_index, count, player)
|
// 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
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return stack.count;
|
||||||
|
|
||||||
// Call function(pos, listname, index, stack, player)
|
// Call function(pos, listname, index, stack, player)
|
||||||
@ -119,7 +119,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p,
|
|||||||
|
|
||||||
// Push callback function on stack
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return stack.count;
|
||||||
|
|
||||||
// Call function(pos, listname, index, count, player)
|
// Call function(pos, listname, index, count, player)
|
||||||
@ -156,7 +156,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
|
|||||||
|
|
||||||
// Push callback function on stack
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return;
|
||||||
|
|
||||||
// function(pos, from_list, from_index, to_list, to_index, count, player)
|
// 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
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return;
|
||||||
|
|
||||||
// Call function(pos, listname, index, stack, player)
|
// Call function(pos, listname, index, stack, player)
|
||||||
@ -220,7 +220,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p,
|
|||||||
|
|
||||||
// Push callback function on stack
|
// Push callback function on stack
|
||||||
std::string nodename = ndef->get(node).name;
|
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;
|
return;
|
||||||
|
|
||||||
// Call function(pos, listname, index, stack, player)
|
// Call function(pos, listname, index, stack, player)
|
||||||
|
Loading…
Reference in New Issue
Block a user