Snippets

Leslie Krause Patch for 'on_rightclickplayer' callback (Minetest 0.4.15+)

Updated by Leslie Krause

File minetest-0.4.15.patch Added

  • Ignore whitespace
  • Hide word diff
+diff --git a/builtin/game/register.lua b/builtin/game/register.lua
+index 90f095e..59ee8fc 100644
+--- a/builtin/game/register.lua
++++ b/builtin/game/register.lua
+@@ -553,6 +553,7 @@ core.registered_craft_predicts, core.register_craft_predict = make_registration(
+ core.registered_on_protection_violation, core.register_on_protection_violation = make_registration()
+ core.registered_on_item_eats, core.register_on_item_eat = make_registration()
+ core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
++core.registered_on_rightclickplayers, core.register_on_rightclickplayer = make_registration()
+ 
+ --
+ -- Compatibility for on_mapgen_init()
+diff --git a/src/content_sao.cpp b/src/content_sao.cpp
+index 77ab51a..4ffb20e 100644
+--- a/src/content_sao.cpp
++++ b/src/content_sao.cpp
+@@ -1198,8 +1198,13 @@ int PlayerSAO::punch(v3f dir,
+ 	return hitparams.wear;
+ }
+ 
+-void PlayerSAO::rightClick(ServerActiveObject *)
++void PlayerSAO::rightClick(ServerActiveObject *clicker)
+ {
++	PlayerSAO *playersao = m_player->getPlayerSAO();
++
++	if (isAttached())
++		return;
++	m_env->getScriptIface()->on_rightclickplayer(playersao, clicker);
+ }
+ 
+ s16 PlayerSAO::readDamage()
+diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
+index a8c0747..04f607c 100644
+--- a/src/script/cpp_api/s_player.cpp
++++ b/src/script/cpp_api/s_player.cpp
+@@ -69,6 +69,19 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player,
+ 	return lua_toboolean(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);
++}
++
+ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
+ 	s16 hp_change)
+ {
+diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
+index 86ee1b0..d8c65ea 100644
+--- a/src/script/cpp_api/s_player.h
++++ b/src/script/cpp_api/s_player.h
+@@ -43,6 +43,7 @@ class ScriptApiPlayer
+ 	bool on_punchplayer(ServerActiveObject *player,
+ 		ServerActiveObject *hitter, float time_from_last_punch,
+ 		const ToolCapabilities *toolcap, v3f dir, s16 damage);
++	void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker);
+ 	s16 on_player_hpchange(ServerActiveObject *player, s16 hp_change);
+ 	void on_playerReceiveFields(ServerActiveObject *player,
+ 		const std::string &formname, const StringMap &fields);
Updated by Leslie Krause

File minetest-0.4.16.patch Added

  • Ignore whitespace
  • Hide word diff
+diff --git a/builtin/game/register.lua b/builtin/game/register.lua
+index ec6f280..ab1b070 100644
+--- a/builtin/game/register.lua
++++ b/builtin/game/register.lua
+@@ -553,6 +553,7 @@ core.registered_craft_predicts, core.register_craft_predict = make_registration(
+ core.registered_on_protection_violation, core.register_on_protection_violation = make_registration()
+ core.registered_on_item_eats, core.register_on_item_eat = make_registration()
+ core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
++core.registered_on_rightclickplayers, core.register_on_rightclickplayer = make_registration()
+ 
+ --
+ -- Compatibility for on_mapgen_init()
+diff --git a/src/content_sao.cpp b/src/content_sao.cpp
+index be1c52f..cc57cf3 100644
+--- a/src/content_sao.cpp
++++ b/src/content_sao.cpp
+@@ -1244,6 +1244,15 @@ int PlayerSAO::punch(v3f dir,
+ 	return hitparams.wear;
+ }
+ 
++void PlayerSAO::rightClick(ServerActiveObject *clicker)
++{
++	PlayerSAO *playersao = m_player->getPlayerSAO();
++
++	if (isAttached())
++		return;
++	m_env->getScriptIface()->on_rightclickplayer(playersao, clicker);
++}
++
+ s16 PlayerSAO::readDamage()
+ {
+ 	s16 damage = m_damage;
+diff --git a/src/content_sao.h b/src/content_sao.h
+index 0dad548..8d0fc33 100644
+--- a/src/content_sao.h
++++ b/src/content_sao.h
+@@ -238,7 +238,7 @@ class PlayerSAO : public UnitSAO
+ 		const ToolCapabilities *toolcap,
+ 		ServerActiveObject *puncher,
+ 		float time_from_last_punch);
+-	void rightClick(ServerActiveObject *clicker) {}
++	void rightClick(ServerActiveObject *clicker);
+ 	void setHP(s16 hp);
+ 	void setHPRaw(s16 hp) { m_hp = hp; }
+ 	s16 readDamage();
+diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
+index a8c0747..04f607c 100644
+--- a/src/script/cpp_api/s_player.cpp
++++ b/src/script/cpp_api/s_player.cpp
+@@ -69,6 +69,19 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player,
+ 	return lua_toboolean(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);
++}
++
+ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
+ 	s16 hp_change)
+ {
+diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
+index 9b4611f..92ef52b 100644
+--- a/src/script/cpp_api/s_player.h
++++ b/src/script/cpp_api/s_player.h
+@@ -42,6 +42,7 @@ class ScriptApiPlayer : virtual public ScriptApiBase
+ 	bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
+ 			float time_from_last_punch, const ToolCapabilities *toolcap,
+ 			v3f dir, s16 damage);
++	void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker);
+ 	s16 on_player_hpchange(ServerActiveObject *player, s16 hp_change);
+ 	void on_playerReceiveFields(ServerActiveObject *player,
+ 			const std::string &formname, const StringMap &fields);
Created by Leslie Krause

File minetest-0.4.17.patch Added

  • Ignore whitespace
  • Hide word diff
+diff --git a/builtin/game/register.lua b/builtin/game/register.lua
+index 25af24e..dc92888 100644
+--- a/builtin/game/register.lua
++++ b/builtin/game/register.lua
+@@ -561,6 +561,7 @@ core.registered_craft_predicts, core.register_craft_predict = make_registration(
+ core.registered_on_protection_violation, core.register_on_protection_violation = make_registration()
+ core.registered_on_item_eats, core.register_on_item_eat = make_registration()
+ core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
++core.registered_on_rightclickplayers, core.register_on_rightclickplayer = make_registration()
+ 
+ --
+ -- Compatibility for on_mapgen_init()
+diff --git a/src/content_sao.cpp b/src/content_sao.cpp
+index c22e341..199b129 100644
+--- a/src/content_sao.cpp
++++ b/src/content_sao.cpp
+@@ -1230,6 +1230,15 @@ int PlayerSAO::punch(v3f dir,
+ 	return hitparams.wear;
+ }
+ 
++void PlayerSAO::rightClick(ServerActiveObject *clicker)
++{
++	PlayerSAO *playersao = m_player->getPlayerSAO();
++
++	if (isAttached())
++		return;
++	m_env->getScriptIface()->on_rightclickplayer(playersao, clicker);
++}
++
+ s16 PlayerSAO::readDamage()
+ {
+ 	s16 damage = m_damage;
+diff --git a/src/content_sao.h b/src/content_sao.h
+index 0dad548..8d0fc33 100644
+--- a/src/content_sao.h
++++ b/src/content_sao.h
+@@ -238,7 +238,7 @@ class PlayerSAO : public UnitSAO
+ 		const ToolCapabilities *toolcap,
+ 		ServerActiveObject *puncher,
+ 		float time_from_last_punch);
+-	void rightClick(ServerActiveObject *clicker) {}
++	void rightClick(ServerActiveObject *clicker);
+ 	void setHP(s16 hp);
+ 	void setHPRaw(s16 hp) { m_hp = hp; }
+ 	s16 readDamage();
+diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
+index a8c0747..04f607c 100644
+--- a/src/script/cpp_api/s_player.cpp
++++ b/src/script/cpp_api/s_player.cpp
+@@ -69,6 +69,19 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player,
+ 	return lua_toboolean(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);
++}
++
+ s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player,
+ 	s16 hp_change)
+ {
+diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
+index 9b4611f..92ef52b 100644
+--- a/src/script/cpp_api/s_player.h
++++ b/src/script/cpp_api/s_player.h
+@@ -42,6 +42,7 @@ class ScriptApiPlayer : virtual public ScriptApiBase
+ 	bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
+ 			float time_from_last_punch, const ToolCapabilities *toolcap,
+ 			v3f dir, s16 damage);
++	void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker);
+ 	s16 on_player_hpchange(ServerActiveObject *player, s16 hp_change);
+ 	void on_playerReceiveFields(ServerActiveObject *player,
+ 			const std::string &formname, const StringMap &fields);
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.