diff options
author | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-09-03 22:05:07 -0400 |
---|---|---|
committer | Jude Melton-Houghton <jwmhjwmh@gmail.com> | 2022-12-24 08:24:59 -0500 |
commit | 5c248c2d7de3db54e85f7c388743a2eb8e36fee4 (patch) | |
tree | b0d27690b3e852b207345dc5e00dc4457a7e6268 /src/script/cpp_api/s_env.cpp | |
parent | 7701e70dc92262c41d68cf1c9f7fbd0c333e5c52 (diff) | |
download | minetest-5c248c2d7de3db54e85f7c388743a2eb8e36fee4.tar.xz |
Add callback on_mapblocks_changed
Diffstat (limited to 'src/script/cpp_api/s_env.cpp')
-rw-r--r-- | src/script/cpp_api/s_env.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp index e49113405..3cbb13cd2 100644 --- a/src/script/cpp_api/s_env.cpp +++ b/src/script/cpp_api/s_env.cpp @@ -299,3 +299,36 @@ void ScriptApiEnv::on_liquid_transformed( runCallbacks(2, RUN_CALLBACKS_MODE_FIRST); } + +void ScriptApiEnv::on_mapblocks_changed(const std::unordered_set<v3s16> &set) +{ + SCRIPTAPI_PRECHECKHEADER + + // Get core.registered_on_mapblocks_changed + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_mapblocks_changed"); + luaL_checktype(L, -1, LUA_TTABLE); + lua_remove(L, -2); + + // Convert the set to a set of position hashes + lua_createtable(L, 0, set.size()); + for(const v3s16 &p : set) { + lua_pushnumber(L, hash_node_position(p)); + lua_pushboolean(L, true); + lua_rawset(L, -3); + } + lua_pushinteger(L, set.size()); + + runCallbacks(2, RUN_CALLBACKS_MODE_FIRST); +} + +bool ScriptApiEnv::has_on_mapblocks_changed() +{ + SCRIPTAPI_PRECHECKHEADER + + // Get core.registered_on_mapblocks_changed + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_mapblocks_changed"); + luaL_checktype(L, -1, LUA_TTABLE); + return lua_objlen(L, -1) > 0; +} |