snippets/nodes.lua

54 lines
1.9 KiB
Lua

--
-- Buttons that run snippets
--
-- Use steel block texture in minetest_game
local bg = minetest.global_exists('xcompat') and xcompat.textures and
xcompat.textures.metal.steel.block or
'[combine:1x1^[noalpha^[colorize:#aaa'
minetest.register_node('snippets:button', {
description = 'Snippets button',
tiles = {bg, bg, bg .. '^snippets_button.png'},
groups = {cracky = 2, not_in_creative_inventory = 1},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string('infotext', 'Unconfigured snippets button')
meta:set_string('formspec', 'field[snippet;Snippet to run:;]')
end,
on_receive_fields = function(pos, formname, fields, sender)
if not fields.snippet or fields.snippet == '' then return end
local name = sender:get_player_name()
if not minetest.check_player_privs(name, {server=true}) then
minetest.chat_send_player(name, 'Insufficient privileges!')
return
end
local snippet = fields.snippet
if not snippets.registered_snippets[snippet] or
snippet:sub(1, 9) == 'snippets:' then
minetest.chat_send_player(name, 'Unknown snippet!')
else
local meta = minetest.get_meta(pos)
meta:set_string('snippet', snippet)
meta:set_string('infotext', 'Snippet: ' .. fields.snippet)
meta:set_string('formspec', '')
end
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local meta, name = minetest.get_meta(pos), clicker:get_player_name()
local snippet = meta:get_string('snippet')
if not snippet or snippet == '' then return end
if snippets.registered_snippets[snippet] then
snippets.run(snippet, name)
else
minetest.chat_send_player(name, 'Invalid snippet: "' .. snippet ..
'"')
end
end,
})