From 859a2c5a7bb918ab9bb030239f0a59e65242141d Mon Sep 17 00:00:00 2001 From: Zemtzov7 <72821250+zmv7@users.noreply.github.com> Date: Mon, 22 Jan 2024 13:53:18 +0500 Subject: [PATCH] Add autorun feature (#1) --- README.md | 1 + console.lua | 14 ++++++++++---- init.lua | 8 ++++++++ persistence.lua | 1 + 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1e9f115..a86e5c1 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ If you don't want the buttons at all, you can add `def` can be a table containing `code` (or `func`), and optionally `owner`. If `persistent` is specified, this snippet will remain registered across reboots. + If `autorun` is specified, this snippet will auto run on server start. (Snippet must be persistent to support autorun) - `snippets.unregister_snippet(name)`: The opposite of `snippets.register_snippet`. - `snippets.registered_snippets`: A table containing the above snippets. diff --git a/console.lua b/console.lua index 6759852..571ef17 100644 --- a/console.lua +++ b/console.lua @@ -36,10 +36,10 @@ function snippets.update_console(name) local selected, unaved = 0, false local selected_snippet = form.context.selected_snippet for id, snippet in ipairs(snippet_list) do - formspec = formspec .. ',##' .. minetest.formspec_escape(snippet) + local def = snippets.registered_snippets[snippet] + formspec = formspec .. ',' .. (def.autorun and "#ff7777\\[A\\] " or "##") .. minetest.formspec_escape(snippet) if snippet == selected_snippet then selected = id - local def = snippets.registered_snippets[snippet] if (def and def.code or '') ~= form.context.code then formspec = formspec .. ' (unsaved)' end @@ -65,11 +65,11 @@ function snippets.update_console(name) formspec = formspec .. ';1' end formspec = formspec .. - ']button[3.9,5.14;10.21,0.81;reset;Reset]' .. + ']button[3.9,5.14;'..(selected_snippet and '8.8' or '10.21')..',0.81;reset;Reset]' .. 'box[3.9,0.4;10,4.5;#ffffff]' else formspec = formspec .. ';1]' .. - 'button[3.9,5.14;10.21,0.81;run;Run]' + 'button[3.9,5.14;'..(selected_snippet and '8.8' or '10.21')..',0.81;run;Run]' end if not form.context.code then form.context.code = '' end @@ -96,6 +96,9 @@ function snippets.update_console(name) (form.context.text and '' or 'code') .. ';Snippet: ' .. minetest.formspec_escape(snippet .. ', owner: ' .. owner) .. ';' .. code .. ']' + if selected_snippet then + formspec = formspec .. 'checkbox[12.7,5.05;autorun;Autorun;'..tostring(def and (def.autorun or false))..']' + end form:set_formspec(formspec) end @@ -240,6 +243,7 @@ function callback(form, fields) owner = name, code = form.context.code, persistent = true, + autorun = form.context.autorun }) end snippets.show_console(name) @@ -251,6 +255,8 @@ function callback(form, fields) 'field[filename;Please enter a new snippet name.;]') saveform:add_callback(saveform_callback) saveform:show() + elseif fields.autorun and form.context.selected_snippet then + form.context.autorun = fields.autorun == "true" elseif fields.quit then form.text = nil end diff --git a/init.lua b/init.lua index 3db78d8..801703d 100644 --- a/init.lua +++ b/init.lua @@ -24,3 +24,11 @@ local enable_buttons = minetest.settings:get_bool('snippets.enable_buttons') if enable_buttons or enable_buttons == nil then dofile(modpath .. '/nodes.lua') end + +minetest.register_on_mods_loaded(function() + for name, def in pairs(snippets.registered_snippets) do + if def.autorun then + snippets.run(name) + end + end +end) diff --git a/persistence.lua b/persistence.lua index 83c9653..cc246c2 100644 --- a/persistence.lua +++ b/persistence.lua @@ -38,6 +38,7 @@ function snippets.register_snippet(name, def) storage:set_string('>' .. name, minetest.serialize({ code = def.code, owner = def.owner, + autorun = def.autorun })) end