aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 18:55:25 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 18:55:25 +0200
commit950d2c9b3e10cbace9236e820c8119d1abb9e01f (patch)
treec0d9c1ca33c0251667d0a8cb59f25de65996dc69
parentfb4815c660d6d9cfc9df76a3ba763095b9701925 (diff)
downloaddragonfireclient-950d2c9b3e10cbace9236e820c8119d1abb9e01f.tar.xz
Add ClientObjectRef:remove and return true in on_object_add callback to remove newly added object
-rw-r--r--src/client/content_cao.cpp7
-rw-r--r--src/script/cpp_api/s_client.cpp5
-rw-r--r--src/script/cpp_api/s_client.h2
-rw-r--r--src/script/lua_api/l_clientobject.cpp1
4 files changed, 10 insertions, 5 deletions
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index be6608ab6..3a6ca3e29 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -822,8 +822,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
setNodeLight(m_last_light);
updateMeshCulling();
- if (m_client->modsLoaded())
- m_client->getScript()->on_object_add(m_id);
+ if (m_client->modsLoaded() && m_client->getScript()->on_object_add(m_id)) {
+ removeFromScene(false);
+ return;
+ }
+
if (m_client->modsLoaded())
m_client->getScript()->on_object_properties_change(m_id);
diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp
index b0e7a073e..1ed273a30 100644
--- a/src/script/cpp_api/s_client.cpp
+++ b/src/script/cpp_api/s_client.cpp
@@ -323,7 +323,7 @@ void ScriptApiClient::on_object_hp_change(s16 id)
runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
}
-void ScriptApiClient::on_object_add(s16 id)
+bool ScriptApiClient::on_object_add(s16 id)
{
SCRIPTAPI_PRECHECKHEADER
@@ -335,7 +335,8 @@ void ScriptApiClient::on_object_add(s16 id)
push_objectRef(L, id);
// Call functions
- runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+ return readParam<bool>(L, -1);
}
bool ScriptApiClient::on_inventory_open(Inventory *inventory)
diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h
index 2f9ce7aa3..6d1a05943 100644
--- a/src/script/cpp_api/s_client.h
+++ b/src/script/cpp_api/s_client.h
@@ -65,7 +65,7 @@ public:
bool on_spawn_particle(struct ParticleParameters param);
void on_object_properties_change(s16 id);
void on_object_hp_change(s16 id);
- void on_object_add(s16 id);
+ bool on_object_add(s16 id);
bool on_inventory_open(Inventory *inventory);
void open_enderchest();
diff --git a/src/script/lua_api/l_clientobject.cpp b/src/script/lua_api/l_clientobject.cpp
index c093e754e..d3739639a 100644
--- a/src/script/lua_api/l_clientobject.cpp
+++ b/src/script/lua_api/l_clientobject.cpp
@@ -338,4 +338,5 @@ luaL_Reg ClientObjectRef::methods[] = {luamethod(ClientObjectRef, get_pos),
luamethod(ClientObjectRef, get_hp),
luamethod(ClientObjectRef, get_max_hp), luamethod(ClientObjectRef, punch),
luamethod(ClientObjectRef, rightclick),
+ luamethod(ClientObjectRef, remove),
luamethod(ClientObjectRef, set_nametag_images), {0, 0}};