snippets/README.md

105 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

2019-07-20 05:01:22 +02:00
# Minetest snippets mod
A way for admins to run and save lua snippets.
2021-03-10 08:59:31 +01:00
## Chatcommands
- `/snippets`: Open the snippets console. This allows you to edit and run Lua
snippets.
## Nodes
This mod registers a snippets button node that runs a snippet when pressed. The
snippet will be called with the player name as its first argument. For example,
you can do `local name = ...` inside a snippet to get the name of the player
that pressed the button.
Buttons don't appear in the creative inventory, if you want them to you will
need to run `/giveme snippets:button`.
If you don't want the buttons at all, you can add
`snippets.enable_buttons = false` to your minetest.conf.
2021-03-10 08:59:31 +01:00
2019-07-20 05:01:22 +02:00
## API
- `snippets.register_snippet(name, <code or def>)`: Registers a snippet.
`def` can be a table containing `code` (or `func`), and optionally `owner`.
If `persistent` is specified, this snippet will remain registered across
reboots.
2024-01-22 09:53:18 +01:00
If `autorun` is specified, this snippet will auto run on server start. (Snippet must be persistent to support autorun)
2019-07-20 05:01:22 +02:00
- `snippets.unregister_snippet(name)`: The opposite of
`snippets.register_snippet`.
- `snippets.registered_snippets`: A table containing the above snippets.
- `snippets.log(level, msg)`: For use inside snippets: Logs a message. `level`
can be `none`, `debug`, `info`, `warning`, or `error`.
- `snippets.register_on_log(function(snippet, level, msg))`: Run when
snippets.log is called. `snippet` is the name of the snippet. Newest
functions are called first. If a callback returns `true`, any remaining
functions are not called (including the built-in log function). Callbacks
can check what player (if any) owns a snippet with
`snippets.registered_snippets[snippet].owner`.
- `snippets.log_levels`: A table containing functions that run
`minetest.colorize` on log levels (if applicable).
Example: `snippets.log_levels.error('Hello')`
`minetest.colorize('red', 'Hello')`
- `snippets.exec_as_player(player_or_name, code)`: Executes `code` (a string)
inside an "anonymous snippet" owned by the player.
- `snippets.exec(code)`: Executes `code` inside a generic snippet.
- `snippets.run(name, ...)`: Executes a snippet.
- `snippets.Form(player_or_name)`: Creates a form.
2019-08-21 10:07:43 +02:00
- `snippets.close_form(player_or_name)`: Closes `player_or_name`'s currently
open form.
### Forms
`snippets.Form`s can display and handle formspecs, and are recommended inside
snippets over `minetest.show_formspec`, as they do not create semi-permanent
global handlers. There is currently no way to set the `formname`, it is
automatically chosen/generated and is used internally.
2023-04-04 10:17:20 +02:00
Consider using [flow](https://content.minetest.net/packages/luk3yx/flow/)
instead for new forms.
Form methods:
- `form:show()` / `form:open()`: Displays the form.
- `form:hide()` / `form:close()`: Closes the form.
- `form:is_open()`: Returns `true` if the form is currently open.
- `form:set_prepend(formspec)`: Sets text to prepend to the formspec. This has
nothing to do with global formspec prepends.
- `form:set_formspec(formspec)`: Sets the formspec text. This does not modify
prepended text or appended text. Any change to this (or the prepend/append
values) is displayed immediately to the client.
- `form:set_append(formspec)`: Sets text to append to the formspec before
displaying it.
- `form:get_prepend`, `form:get_formspec`, `form:get_append`
- `form:add_callback(function(form, fields))`: This creates a callback which
is called whenever form data is received from the client.
- `form:add_callback(name, function(form, fields))`: Similar to the above,
however is only called if `fields` contains `name` (a string).
- `form.context`: Private data stored with this `form` object. Not sent to
clients.
- `form.pname`: The player name associated with this form. *Changing this will
not change the player the form is associated with.*
*When a form is deleted (`form=nil`) and it is not open by the client, garbage
collection will allow the internal `formname` to be reused.*
2019-07-20 05:01:22 +02:00
## Example snippets
`get_connected_names`:
```lua
local res = {}
for _, player in ipairs(minetest.get_connected_players()) do
table.insert(res, player:get_player_name())
end
return res
```
`greeting_test`:
```lua
for _, name in ipairs(snippets.run 'get_connected_names') do
minetest.chat_send_player(name, 'Hello ' .. name .. '!')
end
```