mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 11:33:44 +01:00
[CSM] Add on_punchnode
callback
This commit is contained in:
parent
37df9cb7d7
commit
0727bb3ddd
@ -67,5 +67,4 @@ core.registered_on_hp_modification, core.register_on_hp_modification = make_regi
|
|||||||
core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
|
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_formspec_input, core.register_on_formspec_input = make_registration()
|
||||||
core.registered_on_dignode, core.register_on_dignode = make_registration()
|
core.registered_on_dignode, core.register_on_dignode = make_registration()
|
||||||
|
core.registered_on_punchnode, core.register_on_punchnode = make_registration()
|
||||||
|
|
||||||
|
@ -52,6 +52,14 @@ core.after(2, function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
core.register_on_dignode(function(pos, node)
|
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("pos:" .. dump(pos))
|
||||||
print("node:" .. dump(node))
|
print("node:" .. dump(node))
|
||||||
return false
|
return false
|
||||||
|
@ -694,19 +694,23 @@ Call these functions only at load time!
|
|||||||
* `minetest.register_chatcommand(cmd, chatcommand definition)`
|
* `minetest.register_chatcommand(cmd, chatcommand definition)`
|
||||||
* Adds definition to minetest.registered_chatcommands
|
* Adds definition to minetest.registered_chatcommands
|
||||||
* `minetest.register_on_death(func())`
|
* `minetest.register_on_death(func())`
|
||||||
* Called when player die
|
* Called when the local player dies
|
||||||
* `minetest.register_on_hp_modification(func(hp))`
|
* `minetest.register_on_hp_modification(func(hp))`
|
||||||
* Called when server modified player's HP
|
* Called when server modified player's HP
|
||||||
* `minetest.register_on_damage_taken(func(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))`
|
* `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
|
* Newest functions are called first
|
||||||
* If function returns `true`, remaining functions are not called
|
* If function returns `true`, remaining functions are not called
|
||||||
* `minetest.register_on_dignode(func(pos, node))`
|
* `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
|
* Newest functions are called first
|
||||||
* If any function returns true, the node isn't dug
|
* 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
|
### Sounds
|
||||||
* `minetest.sound_play(spec, parameters)`: returns a handle
|
* `minetest.sound_play(spec, parameters)`: returns a handle
|
||||||
* `spec` is a `SimpleSoundSpec`
|
* `spec` is a `SimpleSoundSpec`
|
||||||
|
15
src/game.cpp
15
src/game.cpp
@ -3895,17 +3895,20 @@ void Game::handleDigging(GameRunData *runData,
|
|||||||
const PointedThing &pointed, const v3s16 &nodepos,
|
const PointedThing &pointed, const v3s16 &nodepos,
|
||||||
const ToolCapabilities &playeritem_toolcap, f32 dtime)
|
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();
|
LocalPlayer *player = client->getEnv().getLocalPlayer();
|
||||||
ClientMap &map = client->getEnv().getClientMap();
|
ClientMap &map = client->getEnv().getClientMap();
|
||||||
MapNode n = client->getEnv().getClientMap().getNodeNoEx(nodepos);
|
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
|
// NOTE: Similar piece of code exists on the server side for
|
||||||
// cheat detection.
|
// cheat detection.
|
||||||
// Get digging parameters
|
// Get digging parameters
|
||||||
|
@ -158,3 +158,23 @@ bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
|
|||||||
bool blocked = lua_toboolean(L, -1);
|
bool blocked = lua_toboolean(L, -1);
|
||||||
return blocked;
|
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;
|
||||||
|
}
|
||||||
|
@ -46,5 +46,6 @@ public:
|
|||||||
void on_formspec_input(const std::string &formname, const StringMap &fields);
|
void on_formspec_input(const std::string &formname, const StringMap &fields);
|
||||||
|
|
||||||
bool on_dignode(v3s16 p, MapNode node);
|
bool on_dignode(v3s16 p, MapNode node);
|
||||||
|
bool on_punchnode(v3s16 p, MapNode node);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user