1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Add core.compare_block_status function (#11247)

Makes it possible to check the status of the mapblock in a future-extensible way.
This commit is contained in:
SmallJoker 2021-05-30 20:24:12 +02:00 committed by GitHub
parent 89f3991351
commit c9144ae5e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 89 additions and 4 deletions

View file

@ -46,13 +46,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/client.h"
#endif
struct EnumString ModApiEnvMod::es_ClearObjectsMode[] =
const EnumString ModApiEnvMod::es_ClearObjectsMode[] =
{
{CLEAR_OBJECTS_MODE_FULL, "full"},
{CLEAR_OBJECTS_MODE_QUICK, "quick"},
{0, NULL},
};
const EnumString ModApiEnvMod::es_BlockStatusType[] =
{
{ServerEnvironment::BS_UNKNOWN, "unknown"},
{ServerEnvironment::BS_EMERGING, "emerging"},
{ServerEnvironment::BS_LOADED, "loaded"},
{ServerEnvironment::BS_ACTIVE, "active"},
{0, NULL},
};
///////////////////////////////////////////////////////////////////////////////
@ -1389,6 +1398,24 @@ int ModApiEnvMod::l_forceload_block(lua_State *L)
return 0;
}
// compare_block_status(nodepos)
int ModApiEnvMod::l_compare_block_status(lua_State *L)
{
GET_ENV_PTR;
v3s16 nodepos = check_v3s16(L, 1);
std::string condition_s = luaL_checkstring(L, 2);
auto status = env->getBlockStatus(getNodeBlockPos(nodepos));
int condition_i = -1;
if (!string_to_enum(es_BlockStatusType, condition_i, condition_s))
return 0; // Unsupported
lua_pushboolean(L, status >= condition_i);
return 1;
}
// forceload_free_block(blockpos)
// blockpos = {x=num, y=num, z=num}
int ModApiEnvMod::l_forceload_free_block(lua_State *L)
@ -1462,6 +1489,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(transforming_liquid_add);
API_FCT(forceload_block);
API_FCT(forceload_free_block);
API_FCT(compare_block_status);
API_FCT(get_translated_string);
}