Skip to content

Instantly share code, notes, and snippets.

@kaeza
Last active March 9, 2022 00:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaeza/10523909 to your computer and use it in GitHub Desktop.
Save kaeza/10523909 to your computer and use it in GitHub Desktop.
Minetest `notice` mod.
notice = { }
function notice.send(target, text)
local player = minetest.get_player_by_name(target)
if not player then
return false, ("There's no player named '%s'."):format(target)
end
local fs = { }
--[[
for _, line in ipairs(text:split("|")) do
table.insert(fs, ("label[1,%f;%s]"):format(y+1, minetest.formspec_escape(line)))
y = y + 0.5
end
--]]
local lines = { }
for i, line in ipairs(text:split("|")) do
local lt = { }
for i = 1, #line, 40 do
table.insert(lt, line:sub(i, i+39))
end
lines[i] = table.concat(lt, "\n")
end
text = table.concat(lines, "\n")
text = minetest.formspec_escape(text)
table.insert(fs, "size[8,4]")
table.insert(fs, "label[1,.2;"..text.."]")
table.insert(fs, "button_exit[3,3.2;2,0.5;ok;OK]")
fs = table.concat(fs)
minetest.after(0.5, function()
minetest.show_formspec(target, "notice:notice", fs)
end)
return true
end
minetest.register_privilege("notice", "Send notices to players.")
minetest.register_chatcommand("notice", {
params = "<player> <text>",
privs = { notice=true, },
description = "Show a notice to a player.",
func = function(name, params)
local target, text = params:match("(%S+)%s+(.+)")
if not (target and text) then
return false, "Usage: /notice <player> <text>"
end
local ok, err = notice.send(target, text)
if not ok then
return false, err
end
return true, "Notice sent!"
end,
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment