mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
[CSM] Add flavour limits controlled by server (#5930)
* [CSM] Add flavour limits controlled by server Server send flavour limits to client permitting to disable or limit some Lua calls * Add limits for reading nodedefs and itemdefs * flavour: Add lookup node limits * Merge get_node_or_nil into get_node. Sending fake node doesn't make sense in CSM, just return nil if node is not available for any reason * Add node range customization when noderange flavour is enabled (default 8 nodes) * Limit nodes range & disable chat message sending by default * Bump protocol version
This commit is contained in:
parent
7e3cdf7088
commit
79f19b8369
18 changed files with 136 additions and 29 deletions
|
@ -91,6 +91,11 @@ int ModApiClient::l_send_chat_message(lua_State *L)
|
|||
{
|
||||
if (!lua_isstring(L, 1))
|
||||
return 0;
|
||||
|
||||
// If server disabled this API, discard
|
||||
if (getClient(L)->checkCSMFlavourLimit(CSMFlavourLimit::CSM_FL_CHAT_MESSAGES))
|
||||
return 0;
|
||||
|
||||
std::string message = luaL_checkstring(L, 1);
|
||||
getClient(L)->sendChatMessage(utf8_to_wide(message));
|
||||
return 0;
|
||||
|
@ -166,24 +171,11 @@ int ModApiClient::l_gettext(lua_State *L)
|
|||
|
||||
// get_node(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiClient::l_get_node(lua_State *L)
|
||||
{
|
||||
// pos
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
// Do it
|
||||
bool pos_ok;
|
||||
MapNode n = getClient(L)->getNode(pos, &pos_ok);
|
||||
// Return node
|
||||
pushnode(L, n, getClient(L)->ndef());
|
||||
return 1;
|
||||
}
|
||||
|
||||
// get_node_or_nil(pos)
|
||||
// pos = {x=num, y=num, z=num}
|
||||
int ModApiClient::l_get_node_or_nil(lua_State *L)
|
||||
{
|
||||
// pos
|
||||
v3s16 pos = read_v3s16(L, 1);
|
||||
|
||||
// Do it
|
||||
bool pos_ok;
|
||||
MapNode n = getClient(L)->getNode(pos, &pos_ok);
|
||||
|
@ -290,6 +282,9 @@ int ModApiClient::l_get_item_def(lua_State *L)
|
|||
IItemDefManager *idef = gdef->idef();
|
||||
assert(idef);
|
||||
|
||||
if (getClient(L)->checkCSMFlavourLimit(CSMFlavourLimit::CSM_FL_READ_ITEMDEFS))
|
||||
return 0;
|
||||
|
||||
if (!lua_isstring(L, 1))
|
||||
return 0;
|
||||
|
||||
|
@ -315,6 +310,9 @@ int ModApiClient::l_get_node_def(lua_State *L)
|
|||
if (!lua_isstring(L, 1))
|
||||
return 0;
|
||||
|
||||
if (getClient(L)->checkCSMFlavourLimit(CSMFlavourLimit::CSM_FL_READ_NODEDEFS))
|
||||
return 0;
|
||||
|
||||
const std::string &name = lua_tostring(L, 1);
|
||||
const ContentFeatures &cf = ndef->get(ndef->getId(name));
|
||||
if (cf.name != name) // Unknown node. | name = <whatever>, cf.name = ignore
|
||||
|
@ -363,7 +361,6 @@ void ModApiClient::Initialize(lua_State *L, int top)
|
|||
API_FCT(show_formspec);
|
||||
API_FCT(send_respawn);
|
||||
API_FCT(gettext);
|
||||
API_FCT(get_node);
|
||||
API_FCT(get_node_or_nil);
|
||||
API_FCT(get_wielded_item);
|
||||
API_FCT(disconnect);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue