core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
core.registered_on_formspec_input, core.register_on_formspec_input = make_registration()
core.registered_on_dignode, core.register_on_dignode = make_registration()
-
-
+core.registered_on_punchnode, core.register_on_punchnode = make_registration()
end)
core.register_on_dignode(function(pos, node)
+ print("The local player dug a node!")
+ print("pos:" .. dump(pos))
+ print("node:" .. dump(node))
+ return false
+end)
+
+core.register_on_punchnode(function(pos, node)
+ print("The local player punched a node!")
print("pos:" .. dump(pos))
print("node:" .. dump(node))
return false
* `minetest.register_chatcommand(cmd, chatcommand definition)`
* Adds definition to minetest.registered_chatcommands
* `minetest.register_on_death(func())`
- * Called when player die
+ * Called when the local player dies
* `minetest.register_on_hp_modification(func(hp))`
* Called when server modified player's HP
* `minetest.register_on_damage_taken(func(hp))`
- * Called when player take damages
+ * Called when the local player take damages
* `minetest.register_on_formspec_input(func(formname, fields))`
- * Called when a button is pressed in player's inventory form
+ * Called when a button is pressed in the local player's inventory form
* Newest functions are called first
* If function returns `true`, remaining functions are not called
* `minetest.register_on_dignode(func(pos, node))`
- * Called when a player digs a node
+ * Called when the local player digs a node
* Newest functions are called first
* If any function returns true, the node isn't dug
+* `minetest.register_on_punchnode(func(pos, node))`
+ * Called when the local player punches a node
+ * Newest functions are called first
+ * If any function returns true, the punch is ignored
### Sounds
* `minetest.sound_play(spec, parameters)`: returns a handle
* `spec` is a `SimpleSoundSpec`
const PointedThing &pointed, const v3s16 &nodepos,
const ToolCapabilities &playeritem_toolcap, f32 dtime)
{
+
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
+ ClientMap &map = client->getEnv().getClientMap();
+ MapNode n = client->getEnv().getClientMap().getNodeNoEx(nodepos);
+
if (!runData->digging) {
infostream << "Started digging" << std::endl;
+ if (client->getScript()->on_punchnode(nodepos, n))
+ return;
client->interact(0, pointed);
runData->digging = true;
runData->ldown_for_dig = true;
}
- LocalPlayer *player = client->getEnv().getLocalPlayer();
- ClientMap &map = client->getEnv().getClientMap();
- MapNode n = client->getEnv().getClientMap().getNodeNoEx(nodepos);
-
// NOTE: Similar piece of code exists on the server side for
// cheat detection.
// Get digging parameters
runCallbacks(2, RUN_CALLBACKS_MODE_OR);
bool blocked = lua_toboolean(L, -1);
return blocked;
-}
\ No newline at end of file
+}
+
+bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node)
+{
+ SCRIPTAPI_PRECHECKHEADER
+
+ INodeDefManager *ndef = getClient()->ndef();
+
+ // Get core.registered_on_punchgnode
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "registered_on_punchnode");
+
+ // Push data
+ push_v3s16(L, p);
+ pushnode(L, node, ndef);
+
+ // Call functions
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ bool blocked = lua_toboolean(L, -1);
+ return blocked;
+}
void on_formspec_input(const std::string &formname, const StringMap &fields);
bool on_dignode(v3s16 p, MapNode node);
+ bool on_punchnode(v3s16 p, MapNode node);
};
#endif