1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-31 18:31:04 +00:00

[CSM] Add on_punchnode callback

This commit is contained in:
red-001 2017-01-29 18:28:38 +00:00 committed by Loïc Blot
parent 37df9cb7d7
commit 0727bb3ddd
6 changed files with 48 additions and 13 deletions

View file

@ -3895,17 +3895,20 @@ void Game::handleDigging(GameRunData *runData,
const PointedThing &pointed, const v3s16 &nodepos,
const ToolCapabilities &playeritem_toolcap, f32 dtime)
{
if (!runData->digging) {
infostream << "Started digging" << std::endl;
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);
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;
}
// NOTE: Similar piece of code exists on the server side for
// cheat detection.
// Get digging parameters

View file

@ -157,4 +157,24 @@ bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
runCallbacks(2, RUN_CALLBACKS_MODE_OR);
bool blocked = lua_toboolean(L, -1);
return blocked;
}
}
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;
}

View file

@ -46,5 +46,6 @@ public:
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