Implement on_rightclickplayer callback (#10775)

Co-authored-by: rubenwardy <rw@rubenwardy.com>
This commit is contained in:
JDiaz 2021-01-11 18:03:31 +01:00 committed by GitHub
parent fcb3ed840a
commit 08ee9794fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 4 deletions

@ -617,6 +617,7 @@ core.registered_can_bypass_userlimit, core.register_can_bypass_userlimit = make_
core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration() core.registered_on_modchannel_message, core.register_on_modchannel_message = make_registration()
core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration() core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration()
core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration() core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration()
core.registered_on_rightclickplayers, core.register_on_rightclickplayer = make_registration()
-- --
-- Compatibility for on_mapgen_init() -- Compatibility for on_mapgen_init()

@ -4587,6 +4587,10 @@ Call these functions only at load time!
the puncher to the punched. the puncher to the punched.
* `damage`: Number that represents the damage calculated by the engine * `damage`: Number that represents the damage calculated by the engine
* should return `true` to prevent the default damage mechanism * should return `true` to prevent the default damage mechanism
* `minetest.register_on_rightclickplayer(function(player, clicker))`
* Called when a player is right-clicked
* `player`: ObjectRef - Player that was right-clicked
* `clicker`: ObjectRef - Object that right-clicked, may or may not be a player
* `minetest.register_on_player_hpchange(function(player, hp_change, reason), modifier)` * `minetest.register_on_player_hpchange(function(player, hp_change, reason), modifier)`
* Called when the player gets damaged or healed * Called when the player gets damaged or healed
* `player`: ObjectRef of the player * `player`: ObjectRef of the player

@ -77,6 +77,19 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player,
return readParam<bool>(L, -1); return readParam<bool>(L, -1);
} }
void ScriptApiPlayer::on_rightclickplayer(ServerActiveObject *player,
ServerActiveObject *clicker)
{
SCRIPTAPI_PRECHECKHEADER
// Get core.registered_on_rightclickplayers
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_rightclickplayers");
// Call callbacks
objectrefGetOrCreate(L, player);
objectrefGetOrCreate(L, clicker);
runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
}
s32 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, s32 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
s32 hp_change, const PlayerHPChangeReason &reason) s32 hp_change, const PlayerHPChangeReason &reason)
{ {

@ -47,6 +47,7 @@ public:
bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter, bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
float time_from_last_punch, const ToolCapabilities *toolcap, float time_from_last_punch, const ToolCapabilities *toolcap,
v3f dir, s16 damage); v3f dir, s16 damage);
void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker);
s32 on_player_hpchange(ServerActiveObject *player, s32 hp_change, s32 on_player_hpchange(ServerActiveObject *player, s32 hp_change,
const PlayerHPChangeReason &reason); const PlayerHPChangeReason &reason);
void on_playerReceiveFields(ServerActiveObject *player, void on_playerReceiveFields(ServerActiveObject *player,

@ -456,6 +456,11 @@ u16 PlayerSAO::punch(v3f dir,
return hitparams.wear; return hitparams.wear;
} }
void PlayerSAO::rightClick(ServerActiveObject *clicker)
{
m_env->getScriptIface()->on_rightclickplayer(this, clicker);
}
void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason) void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
{ {
if (hp == (s32)m_hp) if (hp == (s32)m_hp)

@ -111,7 +111,7 @@ public:
u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
float time_from_last_punch); float time_from_last_punch);
void rightClick(ServerActiveObject *clicker) {} void rightClick(ServerActiveObject *clicker);
void setHP(s32 hp, const PlayerHPChangeReason &reason); void setHP(s32 hp, const PlayerHPChangeReason &reason);
void setHPRaw(u16 hp) { m_hp = hp; } void setHPRaw(u16 hp) { m_hp = hp; }
s16 readDamage(); s16 readDamage();