Skip to content

Commit f547452

Browse files
SmallJokernerzhul
authored andcommittedOct 7, 2017
Unkown nodes: Provide position on interact (#6505)
* Unkown nodes: Provide position on interact
1 parent 00ceec9 commit f547452

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed
 

Diff for: ‎src/script/cpp_api/s_item.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
211211
// function onto the stack
212212
// If core.registered_items[name] doesn't exist, core.nodedef_default
213213
// is tried instead so unknown items can still be manipulated to some degree
214-
bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname)
214+
bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname,
215+
const v3s16 *p)
215216
{
216217
lua_State* L = getStack();
217218

@@ -222,10 +223,12 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname)
222223
lua_getfield(L, -1, name);
223224
lua_remove(L, -2); // Remove registered_items
224225
// Should be a table
225-
if(lua_type(L, -1) != LUA_TTABLE)
226-
{
226+
if (lua_type(L, -1) != LUA_TTABLE) {
227227
// Report error and clean up
228-
errorstream << "Item \"" << name << "\" not defined" << std::endl;
228+
errorstream << "Item \"" << name << "\" not defined";
229+
if (p)
230+
errorstream << " at position " << PP(*p);
231+
errorstream << std::endl;
229232
lua_pop(L, 1);
230233

231234
// Try core.nodedef_default instead

Diff for: ‎src/script/cpp_api/s_item.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class ScriptApiItem
5353
friend class ModApiItemMod;
5454
friend class LuaRaycast;
5555

56-
bool getItemCallback(const char *name, const char *callbackname);
56+
bool getItemCallback(const char *name, const char *callbackname, const v3s16 *p = nullptr);
5757
void pushPointedThing(const PointedThing& pointed);
5858

5959
};

Diff for: ‎src/script/cpp_api/s_node.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node,
103103
INodeDefManager *ndef = getServer()->ndef();
104104

105105
// Push callback function on stack
106-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_punch"))
106+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_punch", &p))
107107
return false;
108108

109109
// Call function
@@ -126,7 +126,7 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node,
126126
INodeDefManager *ndef = getServer()->ndef();
127127

128128
// Push callback function on stack
129-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_dig"))
129+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_dig", &p))
130130
return false;
131131

132132
// Call function
@@ -147,7 +147,7 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node)
147147
INodeDefManager *ndef = getServer()->ndef();
148148

149149
// Push callback function on stack
150-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_construct"))
150+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_construct", &p))
151151
return;
152152

153153
// Call function
@@ -165,7 +165,7 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node)
165165
INodeDefManager *ndef = getServer()->ndef();
166166

167167
// Push callback function on stack
168-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_destruct"))
168+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_destruct", &p))
169169
return;
170170

171171
// Call function
@@ -183,7 +183,7 @@ bool ScriptApiNode::node_on_flood(v3s16 p, MapNode node, MapNode newnode)
183183
INodeDefManager *ndef = getServer()->ndef();
184184

185185
// Push callback function on stack
186-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_flood"))
186+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_flood", &p))
187187
return false;
188188

189189
// Call function
@@ -204,7 +204,7 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node)
204204
INodeDefManager *ndef = getServer()->ndef();
205205

206206
// Push callback function on stack
207-
if (!getItemCallback(ndef->get(node).name.c_str(), "after_destruct"))
207+
if (!getItemCallback(ndef->get(node).name.c_str(), "after_destruct", &p))
208208
return;
209209

210210
// Call function
@@ -223,7 +223,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
223223
INodeDefManager *ndef = getServer()->ndef();
224224

225225
// Push callback function on stack
226-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_timer"))
226+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_timer", &p))
227227
return false;
228228

229229
// Call function
@@ -251,7 +251,7 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
251251
return;
252252

253253
// Push callback function on stack
254-
if (!getItemCallback(ndef->get(node).name.c_str(), "on_receive_fields"))
254+
if (!getItemCallback(ndef->get(node).name.c_str(), "on_receive_fields", &p))
255255
return;
256256

257257
// Call function

Diff for: ‎src/script/cpp_api/s_nodemeta.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p,
4545

4646
// Push callback function on stack
4747
std::string nodename = ndef->get(node).name;
48-
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move"))
48+
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move", &p))
4949
return count;
5050

5151
// function(pos, from_list, from_index, to_list, to_index, count, player)
@@ -83,7 +83,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p,
8383

8484
// Push callback function on stack
8585
std::string nodename = ndef->get(node).name;
86-
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put"))
86+
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put", &p))
8787
return stack.count;
8888

8989
// Call function(pos, listname, index, stack, player)
@@ -119,7 +119,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p,
119119

120120
// Push callback function on stack
121121
std::string nodename = ndef->get(node).name;
122-
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take"))
122+
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take", &p))
123123
return stack.count;
124124

125125
// Call function(pos, listname, index, count, player)
@@ -156,7 +156,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p,
156156

157157
// Push callback function on stack
158158
std::string nodename = ndef->get(node).name;
159-
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move"))
159+
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move", &p))
160160
return;
161161

162162
// function(pos, from_list, from_index, to_list, to_index, count, player)
@@ -189,7 +189,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p,
189189

190190
// Push callback function on stack
191191
std::string nodename = ndef->get(node).name;
192-
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put"))
192+
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put", &p))
193193
return;
194194

195195
// Call function(pos, listname, index, stack, player)
@@ -220,7 +220,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p,
220220

221221
// Push callback function on stack
222222
std::string nodename = ndef->get(node).name;
223-
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take"))
223+
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take", &p))
224224
return;
225225

226226
// Call function(pos, listname, index, stack, player)

0 commit comments

Comments
 (0)