Snippets

Description

A way for admins to run and save lua snippets.

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.

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.
  • 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.
  • snippets.close_form(player_or_name): Closes player_or_name's currently open form.

Forms 🔗

snippets.Forms 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.

Consider using 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.

Example snippets 🔗

get_connected_names:

local res = {}
for _, player in ipairs(minetest.get_connected_players()) do
    table.insert(res, player:get_player_name())
end
return res

greeting_test:

for _, name in ipairs(snippets.run 'get_connected_names') do
    minetest.chat_send_player(name, 'Hello ' .. name .. '!')
end

Reviews

Review

Do you recommend this mod?

  • English

    Useful tool for modding

    This mod is very useful for checking if your mod works as expected. I cant imagine modding without being able to look at what my mod is doing

    I wish the snippets saved between worlds, but that probably impossible with the API

    0 comments
  • Very Useful

    Thank you so much for this. My only wish now would be for someone to create a repository of useful code snippets for chat commands and other functions commonly used /needed by server admins in one place to peruse. Perhaps such a thing already exists and I haven't found it yet? I shall continue my exploration armed with this wonderful tool.

    Edit: Ah! I found it. https://forum.minetest.net/viewtopic.php?t=18473&start=75

    0 comments

Releases

2025-11-13

Download

2025-11-13 02:12 UTC

2025-11-13 🔗

  • Fix crash on log() in unsaved snippet after owner leaves (#2)

2024-03-05

Download

2024-03-05 02:11 UTC

2024-03-05 🔗

No release notes

2024-01-23

Download

2024-01-23 02:11 UTC

2024-01-23 🔗

No release notes

2023-06-20

Download

2023-06-20 02:11 UTC

2023-06-20 🔗

No release notes

2023-04-05

Download

2023-04-05 02:13 UTC

2023-04-05 🔗

No release notes

All releases

Threads

New thread

Thread Last Reply

No threads found

Information

Provides

snippets

Dependencies

Required
No required dependencies
Optional
cloaking fs51 xcompat

Information

Type
Mod
Technical Name
snippets
Languages
English
License
MIT
Maintenance State
Maintenance Only
Added
2021-03-10 08:00 UTC
Maintainers
Luke

Used By