flagchooser/init.lua
2023-06-23 17:34:22 -04:00

97 lines
No EOL
3.4 KiB
Lua

local flag_pos
minetest.register_tool("flag_chooser:chooser", {
description = "Flag Chooser\nChoose a specific flag with this tool",
inventory_image = "chooser.png",
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type ~= "node" then return end
flag_pos = pointed_thing.under
local node = minetest.get_node(flag_pos)
if node.name ~= "pride_flags:upper_mast" then
return
end
local formspec = {
"formspec_version[4]",
"size[11,9]",
"dropdown[0.375,2.3;5,2;Dropdown;"..table.concat(pride_flags.get_flags(), ",") ..";1]",
"field[0.375,0.5;3,0.8;flag_name;Choose Flag;".. pride_flags.get_flag_at(flag_pos) .. "]",
"button[4.125,0.5;2,0.8;find;Find]",
"button[6.25,0.5;2,0.8;choose;Choose]",
"button_exit[8.375,0.5;2,0.8;exit;Exit]",
}
local formspec = table.concat(formspec, "")
minetest.show_formspec(user:get_player_name(), "flag_chooser:chooser", formspec)
end,
})
local function table_contains(tbl, x) --> https://snippets.bentasker.co.uk/page-2106050929-Check-if-value-exists-in-table-LUA.html
local found = false
for _, v in pairs(tbl) do
if v == x then
found = true
end
end
return found
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if formname ~= "flag_chooser:chooser" then
return
end
if fields.find or fields.key_enter_field == "flag_name" then
local image = fields.Dropdown
if fields.flag_name ~= nil then
image = fields.flag_name
else
image = fields.Dropdown
end
if not table_contains(pride_flags.get_flags(), fields.flag_name) then
image = fields.Dropdown
end
local formspec = {
"formspec_version[4]",
"size[11,9]",
"dropdown[0.375,2.3;5,2;Dropdown;"..table.concat(pride_flags.get_flags(), ",") ..";1]",
"field[0.375,0.5;3,0.8;flag_name;Choose Flag;" .. image .. "]",
"button[4.125,0.5;2,0.8;find;Find]",
"button[6.25,0.5;2,0.8;choose;Choose]",
"button_exit[8.375,0.5;2,0.8;exit;Exit]",
"image[0.375,5;6,3;".. "prideflag_" .. image .. ".png" ..";]",
}
local formspec = table.concat(formspec, "")
minetest.show_formspec(name, "flag_chooser:chooser", formspec)
end
if fields.choose then
if minetest.is_protected(flag_pos, name) and not
minetest.check_player_privs(name, "protection_bypass") then
minetest.record_protection_violation(flag_pos, name)
return
end
minetest.close_formspec(name, "flag_chooser:chooser")
local flag_name = fields.flag_name
if flag_name ~= nil then
pride_flags.set_flag_at(flag_pos, flag_name)
end
end
end)
local ingot_steel
if minetest.get_modpath("default") then
ingot_steel = "default:steel_ingot"
minetest.register_craft({
output = "flag_chooser:chooser",
recipe = {
{"", ingot_steel, ""},
{ingot_steel, "pride_flags:upper_mast", ingot_steel},
{"", ingot_steel, ""},
}
})
end