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)
|
-- 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)
|
-- (this can be overrided in config.lua)
|
||||||
-- Autor: Sokomine
|
-- Autor: Sokomine
|
||||||
|
local S = minetest.get_translator("travelnet")
|
||||||
|
|
||||||
|
local locked_forms = {}
|
||||||
local function on_interact(pos, _, player)
|
local function on_interact(pos, _, player)
|
||||||
if not locks:lock_allow_use( pos, player ) then
|
if not locks:lock_allow_use( pos, player ) then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
locked_forms[player:get_player_name()] = true
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
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")
|
local legacy_formspec = meta:get_string("formspec")
|
||||||
if not travelnet.is_falsey_string(legacy_formspec) then
|
if not travelnet.is_falsey_string(legacy_formspec) then
|
||||||
meta:set_string("formspec", "")
|
meta:set_string("formspec", "")
|
||||||
|
@ -21,11 +22,69 @@ local function on_interact(pos, _, player)
|
||||||
travelnet.show_current_formspec(pos, meta, player_name)
|
travelnet.show_current_formspec(pos, meta, player_name)
|
||||||
end
|
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)
|
function travelnet.formspecs.primary(options, player_name)
|
||||||
return original_primary(options, player_name)..
|
if locked_forms[player_name] then
|
||||||
locks.get_authorize_button(6, 0) ..
|
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)
|
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
|
end
|
||||||
|
|
||||||
minetest.register_node("locked_travelnet:travelnet", {
|
minetest.register_node("locked_travelnet:travelnet", {
|
||||||
|
@ -66,47 +125,30 @@ minetest.register_node("locked_travelnet:travelnet", {
|
||||||
},
|
},
|
||||||
inventory_image = "locked_travelnet_lock_inv.png",
|
inventory_image = "locked_travelnet_lock_inv.png",
|
||||||
|
|
||||||
groups = {travelnet=1}, --cracky=1,choppy=1,snappy=1},
|
groups = {travelnet=1},
|
||||||
|
|
||||||
light_source = 10,
|
light_source = 10,
|
||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
--- prepare the lock of the travelnet
|
--- prepare the lock of the travelnet
|
||||||
locks:lock_init( pos,
|
locks:lock_init( pos, "" )
|
||||||
"size[12,10]"..
|
meta:set_string("formspec", "")
|
||||||
"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]" );
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
after_place_node = function(pos, placer, itemstack)
|
after_place_node = function(pos, placer, itemstack)
|
||||||
local meta = minetest.get_meta(pos);
|
local meta = minetest.get_meta(pos);
|
||||||
meta:set_string("infotext", "Travelnet-box (unconfigured)");
|
meta:set_string("infotext", "Travelnet-box (unconfigured)");
|
||||||
meta:set_string("station_name", "");
|
meta:set_string("station_name", "");
|
||||||
meta:set_string("station_network","");
|
meta:set_string("station_network", "");
|
||||||
meta:set_string("owner", placer:get_player_name() );
|
meta:set_string("owner", placer:get_player_name() );
|
||||||
-- request initinal data
|
-- request initinal data
|
||||||
locks:lock_set_owner( pos, placer, "Shared locked travelnet" );
|
locks:lock_set_owner( pos, placer, "Shared locked travelnet" );
|
||||||
local top_pos = vector.add({x=0,y=1,z=0}, pos)
|
local top_pos = vector.add({x=0,y=1,z=0}, pos)
|
||||||
minetest.set_node(top_pos, {name="travelnet:hidden_top"})
|
minetest.set_node(top_pos, {name="travelnet:hidden_top"})
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = travelnet.on_receive_fields,
|
||||||
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_punch = on_interact,
|
on_punch = on_interact,
|
||||||
on_rightclick = on_interact,
|
on_rightclick = on_interact,
|
||||||
|
@ -134,7 +176,6 @@ minetest.register_node("locked_travelnet:travelnet", {
|
||||||
end
|
end
|
||||||
return minetest.item_place(itemstack, placer, pointed_thing);
|
return minetest.item_place(itemstack, placer, pointed_thing);
|
||||||
end,
|
end,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue