|luk3yx acecf727e2 Delete register_on_mods_loaded callbacks when not required.||1 month ago|
|csm||2 months ago|
|csm_strict||2 months ago|
|LICENSE.md||2 months ago|
|README.md||2 months ago|
|init.lua||2 months ago|
|minify.lua||2 months ago|
|sscsm_init.lua||1 month ago|
|sscsm_testing.lua||2 months ago|
Attempts to run server-sent CSMs locally in a sandbox.
Any client with the CSM installed will automatically attempt to request SSCSMs
from the server via a mod channel. If the server has this mod installed, it
will reply with a few messages containing the mod name and partially minified
mod code. The CSM will then create a separate environment so SSCSMs cannot mess
with existing CSMs (and so CSMs do not accidentally interfere with SSCSMs), and
execute the SSCSMs inside this environment. Note that it is trivial for users
to modify this environment. The server-side mod sends two “built-in” SSCSMs
before and after all other SSCSMs to add extra helper functions (in the
namespace), to execute
register_on_mods_loaded callbacks and attempt to leave
the mod channel.
To create a SSCSM:
enable_mod_channels = trueto minetest.conf).
csm/directory) onto clients and enable it.
This API is subject to change.
Registers a server-provided CSM with the following definition table.
name(string): The name of the server-provided CSM. Please use the
modname:sscsmnameconvention. Cannot start with a colon or contain newlines.
code(string): The code to be sent to clients.
file(string): The file to read the code from, read during the
depends(list): A list of SSCSMs that must be loaded before this one.
This definition table must have
name and either
Because of Minetest network protocol limitations, the amount of data that can be sent over mod channels is limited, and therefore the maximum SSCSM size is 65300 (to leave room for the player name and future expansion). The name of the SSCSM also counts towards this total.
Because of this size limitation, SSCSMs are passed through a primitive code minifier that removes some whitespace and comments, so even if your code is above this size limit it could still work.
SSCSMs can access most functions on client_lua_api.txt, as well as a separate
sscsm.global_exists(name): The same as
sscsm.register_on_mods_loaded(callback): Runs the callback once all SSCSMs are loaded.
sscsm.register_chatcommand(...): Similar to
minetest.register_chatcommand, however overrides commands starting in
/instead. This can be used to make some commands have instantaneous responses. The command handler is only added once
register_chatcommandhas been called.
sscsm.unregister_chatcommand(name): Unregisters a chatcommand.
To communicate with the server-side mods, it is possible to open a mod channel.
Do not trust any input sent to the server via SSCSMs (and do not store sensitive data in SSCSM code), as malicious users can and will inspect code and modify the output from SSCSMs.
I repeat, do not trust the client and/or SSCSMs with any sensitive information and do not trust any output from the client and/or SSCSMs. Make sure to rerun any privilege checks on the server.
Although it is possible to kick clients that do not support SSCSMs, this has not been implemented. Some users may not want to allow servers to automatically download and run code locally for security reasons. Please try and make sure clients without SSCSMs do not suffer from major functionality loss.