Stop using metadata formspec and only use locked behaviour for locked travelnets
parent
409b6692fb
commit
db6234702c
|
@ -3,15 +3,16 @@
|
|||
-- digging of such a travelnet is limited to the owner and to people with the travelnet_remove priv (useful for admins to clean up)
|
||||
-- (this can be overrided in config.lua)
|
||||
-- Autor: Sokomine
|
||||
local S = minetest.get_translator("travelnet")
|
||||
|
||||
|
||||
local locked_forms = {}
|
||||
local function on_interact(pos, _, player)
|
||||
if not locks:lock_allow_use( pos, player ) then
|
||||
return false
|
||||
end
|
||||
locked_forms[player:get_player_name()] = true
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local unconfiged = travelnet.is_falsey_string(meta:get_string("station_name", ""))
|
||||
if unconfiged then return end
|
||||
local legacy_formspec = meta:get_string("formspec")
|
||||
if not travelnet.is_falsey_string(legacy_formspec) then
|
||||
meta:set_string("formspec", "")
|
||||
|
@ -21,11 +22,69 @@ local function on_interact(pos, _, player)
|
|||
travelnet.show_current_formspec(pos, meta, player_name)
|
||||
end
|
||||
|
||||
local original_primary = travelnet.formspecs.primary
|
||||
local original_end_input = travelnet.actions.end_input
|
||||
function travelnet.actions.end_input(_, _, player)
|
||||
locked_forms[player:get_player_name()] = nil
|
||||
return original_end_input(_, _, player)
|
||||
end
|
||||
|
||||
local original_primary_formspec = travelnet.formspecs.primary
|
||||
function travelnet.formspecs.primary(options, player_name)
|
||||
return original_primary(options, player_name)..
|
||||
locks.get_authorize_button(6, 0) ..
|
||||
if locked_forms[player_name] then
|
||||
options.height = 11.5
|
||||
return original_primary_formspec(options, player_name)..
|
||||
"field[0.3,11;6,0.7;locks_sent_lock_command;"..S("Locked travelnet. Type /help for help:")..";]"..
|
||||
locks.get_authorize_button(10,10.5)..
|
||||
locks.get_config_button(11,10.5)
|
||||
else
|
||||
return original_primary_formspec(options, player_name)
|
||||
end
|
||||
end
|
||||
|
||||
local original_edit_formspec = travelnet.formspecs.edit_travelnet
|
||||
function travelnet.formspecs.edit_travelnet(options, player_name)
|
||||
if locked_forms[player_name] then
|
||||
return ([[
|
||||
size[12,10]
|
||||
field[0.3,5.6;6,0.7;station_name;%s:;%s]
|
||||
field[0.3,6.6;6,0.7;station_network;%s;%s]
|
||||
field[0.3,7.6;6,0.7;owner;%s;%s]
|
||||
button[8.0,0.0;2.2,0.7;station_dig;%s]
|
||||
field[0.3,3.0;6,0.7;locks_sent_lock_command;%s;]
|
||||
button[6.3,3.2;1.7,0.7;station_set;%s]
|
||||
]]):format(
|
||||
S("Name of this station"),
|
||||
minetest.formspec_escape(options.station_name or ""),
|
||||
S("Assign to Network:"),
|
||||
travelnet.is_falsey_string(options.station_network)
|
||||
and "net1"
|
||||
or options.station_network,
|
||||
S("Owned by:"),
|
||||
minetest.formspec_escape(options.owner_name or ""),
|
||||
S("Remove station"),
|
||||
S("Locked travelnet. Type /help for help:"),
|
||||
S("Save")
|
||||
)..
|
||||
locks.get_authorize_button(6, 0)..
|
||||
locks.get_config_button(7, 0)
|
||||
else
|
||||
return original_edit_formspec(options, player_name)
|
||||
end
|
||||
end
|
||||
|
||||
local original_on_receive_fields = travelnet.on_receive_fields
|
||||
function travelnet.on_receive_fields(pos, formname, fields, player)
|
||||
local player_name = player:get_player_name()
|
||||
if locked_forms[player_name] then
|
||||
if not travelnet.is_falsey_string(fields.locks_sent_lock_command) or fields.locks_config or fields.locks_authorize then
|
||||
locked_forms[player_name] = nil
|
||||
return locks:lock_handle_input( pos, formname, fields, player )
|
||||
elseif locks:lock_allow_use( pos, player ) then
|
||||
return original_on_receive_fields( pos, formname, fields, player )
|
||||
end
|
||||
else
|
||||
return original_on_receive_fields( pos, formname, fields, player )
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node("locked_travelnet:travelnet", {
|
||||
|
@ -66,47 +125,30 @@ minetest.register_node("locked_travelnet:travelnet", {
|
|||
},
|
||||
inventory_image = "locked_travelnet_lock_inv.png",
|
||||
|
||||
groups = {travelnet=1}, --cracky=1,choppy=1,snappy=1},
|
||||
groups = {travelnet=1},
|
||||
|
||||
light_source = 10,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
--- prepare the lock of the travelnet
|
||||
locks:lock_init( pos,
|
||||
"size[12,10]"..
|
||||
"field[0.3,5.6;6,0.7;station_name;Name of this station:;]"..
|
||||
"field[0.3,6.6;6,0.7;station_network;Assign to Network:;]"..
|
||||
"field[0.3,7.6;6,0.7;owner_name;(optional) owned by:;]"..
|
||||
"button[8.0,0.0;2.2,0.7;station_dig;Remove station]"..
|
||||
-- "button_exit[6.3,6.2;1.7,0.7;station_set;Store]"..
|
||||
"field[0.3,3.0;6,0.7;locks_sent_lock_command;Locked travelnet. Type /help for help:;]"..
|
||||
"button[6.3,3.2;1.7,0.7;locks_sent_input;Store]" );
|
||||
locks:lock_init( pos, "" )
|
||||
meta:set_string("formspec", "")
|
||||
end,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos);
|
||||
meta:set_string("infotext", "Travelnet-box (unconfigured)");
|
||||
meta:set_string("station_name", "");
|
||||
meta:set_string("station_network","");
|
||||
meta:set_string("owner", placer:get_player_name() );
|
||||
meta:set_string("infotext", "Travelnet-box (unconfigured)");
|
||||
meta:set_string("station_name", "");
|
||||
meta:set_string("station_network", "");
|
||||
meta:set_string("owner", placer:get_player_name() );
|
||||
-- request initinal data
|
||||
locks:lock_set_owner( pos, placer, "Shared locked travelnet" );
|
||||
local top_pos = vector.add({x=0,y=1,z=0}, pos)
|
||||
minetest.set_node(top_pos, {name="travelnet:hidden_top"})
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if not travelnet.is_falsey_string(fields.locks_sent_lock_command) then
|
||||
locks:lock_handle_input( pos, formname, fields, sender )
|
||||
elseif locks:lock_allow_use( pos, sender ) then
|
||||
if not fields.quit then
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", "")
|
||||
end
|
||||
travelnet.on_receive_fields( pos, formname, fields, sender );
|
||||
end
|
||||
end,
|
||||
on_receive_fields = travelnet.on_receive_fields,
|
||||
|
||||
on_punch = on_interact,
|
||||
on_rightclick = on_interact,
|
||||
|
@ -134,7 +176,6 @@ minetest.register_node("locked_travelnet:travelnet", {
|
|||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing);
|
||||
end,
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue