travelnet-cd2025/formspecs-legacy.lua
Oversword 9ea2c0d1ff
Locked travelnet compat (#51)
* Allow for setting of promary formspec height via options; Get stored pos on form handler, not on recieve fields

* Make sure pos is local and end_input is always called when the form closes

* Always pass as much infomration as possible into the end_input action
2022-02-15 16:34:19 -05:00

105 lines
3.2 KiB
Lua

local travelnet_form_name = "travelnet:show"
local player_formspec_data = travelnet.player_formspec_data
-- minetest.chat_send_player is sometimes not so well visible
function travelnet.show_message(pos, player_name, title, message)
if not pos or not player_name or not message then
return
end
local formspec = travelnet.formspecs.error_message({
title = title,
message = message
})
travelnet.show_formspec(player_name, formspec)
end
-- show the player the formspec they would see when right-clicking the node;
-- needs to be simulated this way as calling on_rightclick would not do
function travelnet.show_current_formspec(pos, meta, player_name)
player_formspec_data[player_name] = player_formspec_data[player_name] or {}
player_formspec_data[player_name].pos = pos
local node = minetest.get_node(pos)
travelnet.show_formspec(player_name,
travelnet.formspecs.current({
station_network = meta:get_string("station_network"),
station_name = meta:get_string("station_name"),
owner_name = meta:get_string("owner"),
is_elevator = travelnet.is_elevator(node.name)
}, player_name))
end
-- a player clicked on something in the formspec hse was manually shown
-- (back from help page, moved travelnet up or down etc.)
function travelnet.form_input_handler(player, formname, fields)
if formname ~= travelnet_form_name then return end
if not player then return end
local name = player:get_player_name()
player_formspec_data[name] = player_formspec_data[name] or {}
local pos = player_formspec_data[name].pos
return travelnet.on_receive_fields(pos, nil, fields, player)
end
-- most formspecs the travelnet uses are stored in the travelnet node itself,
-- but some may require some "back"-button functionality (i.e. help page,
-- move up/down etc.)
minetest.register_on_player_receive_fields(travelnet.form_input_handler)
function travelnet.reset_formspec()
minetest.log("warning",
"[travelnet] the travelnet.reset_formspec method is deprecated. "..
"Run meta:set_string('station_network', '') to reset the travelnet.")
end
function travelnet.edit_formspec(pos, meta, player_name)
if not pos or not meta or not player_name then
return
end
local node = minetest.get_node_or_nil(pos)
if not node then return end
if travelnet.is_elevator(node.name) then
return travelnet.edit_formspec_elevator(pos, meta, player_name)
end
-- request changed data
local formspec = travelnet.formspecs.edit_travelnet({
owner_name = meta:get_string("owner"),
station_network = meta:get_string("station_network"),
station_name = meta:get_string("station_name")
}, player_name)
-- show the formspec manually
travelnet.show_formspec(player_name, formspec)
end
function travelnet.edit_formspec_elevator(pos, meta, player_name)
if not pos or not meta or not player_name then
return
end
-- request changed data
local formspec = travelnet.formspecs.edit_elevator(
{ station_name = meta:get_string("station_name") },
player_name
)
-- show the formspec manually
travelnet.show_formspec(player_name, formspec)
end
function travelnet.show_formspec(player_name, formspec)
if formspec and formspec ~= "" then
minetest.show_formspec(player_name, travelnet_form_name, formspec)
return true
else
minetest.show_formspec(player_name, "", "")
return false
end
end