Add unified inventory support and chatcommand
parent
2145aa1ebd
commit
1c2cabe795
|
@ -9,5 +9,6 @@ read_globals = {
|
|||
"minetest",
|
||||
"sfinv",
|
||||
"vector",
|
||||
"unified_inventory",
|
||||
table={fields={"copy"}},
|
||||
}
|
||||
|
|
140
gui_dash.lua
140
gui_dash.lua
|
@ -30,6 +30,8 @@ local function check_perm(player)
|
|||
return minetest.check_player_privs(player:get_player_name(), { teacher = true })
|
||||
end
|
||||
|
||||
local DASHBOARD_HEADER = "formspec_version[3]size[10.5,10.85]"
|
||||
|
||||
local function get_formspec(player, context)
|
||||
if not check_perm(player) then
|
||||
return "label[0,0;" .. FS"Access denied" .. "]"
|
||||
|
@ -239,8 +241,7 @@ end
|
|||
|
||||
local function handle_results(player, context, fields)
|
||||
if not check_perm(player) then
|
||||
sfinv.set_page(player, sfinv.get_homepage_name(player))
|
||||
return true
|
||||
return false
|
||||
end
|
||||
|
||||
if fields.students then
|
||||
|
@ -248,7 +249,6 @@ local function handle_results(player, context, fields)
|
|||
local i = (evt.row or 0) - 1
|
||||
if evt.type == "CHG" and i >= 1 and i <= #context.students then
|
||||
context.selected_student = context.students[i]
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
@ -266,7 +266,6 @@ local function handle_results(player, context, fields)
|
|||
i = i + 1
|
||||
end
|
||||
end
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -275,11 +274,9 @@ local function handle_results(player, context, fields)
|
|||
return true
|
||||
elseif fields.select_group then
|
||||
context.select_toggle = "group"
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
elseif fields.select_selected then
|
||||
context.select_toggle = "selected"
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -287,22 +284,21 @@ local function handle_results(player, context, fields)
|
|||
local student = minetest.get_player_by_name(context.selected_student)
|
||||
if student then
|
||||
player:set_pos(student:get_pos())
|
||||
return true
|
||||
return false
|
||||
else
|
||||
context.selected_student = nil
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
if fields.new_group then
|
||||
classroom.show_new_group(player)
|
||||
return true
|
||||
return false
|
||||
end
|
||||
|
||||
if fields.edit_group and context.groupname then
|
||||
classroom.show_edit_group(player, context.groupname)
|
||||
return true
|
||||
return false
|
||||
end
|
||||
|
||||
for _, action in pairs(classroom.get_actions()) do
|
||||
|
@ -319,7 +315,6 @@ local function handle_results(player, context, fields)
|
|||
end
|
||||
|
||||
classroom.run_action(action.name, player, selector)
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
@ -327,42 +322,107 @@ local function handle_results(player, context, fields)
|
|||
end
|
||||
|
||||
|
||||
--
|
||||
-- Show formspec
|
||||
--
|
||||
local _contexts = {}
|
||||
function classroom.show_dashboard_formspec(player)
|
||||
if not check_perm(player) then
|
||||
return nil
|
||||
end
|
||||
|
||||
local name = player:get_player_name()
|
||||
local context = _contexts[name] or {}
|
||||
_contexts[name] = context
|
||||
|
||||
minetest.show_formspec(player:get_player_name(), "classroom:dashboard",
|
||||
DASHBOARD_HEADER .. get_formspec(player, context))
|
||||
end
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "classroom:dashboard" or not check_perm(player) then
|
||||
return false
|
||||
end
|
||||
|
||||
local context = _contexts[player:get_player_name()]
|
||||
if not context then
|
||||
return false
|
||||
end
|
||||
|
||||
local ret = handle_results(player, context, fields)
|
||||
if ret then
|
||||
classroom.show_dashboard_formspec(player)
|
||||
end
|
||||
return ret
|
||||
end)
|
||||
|
||||
|
||||
--
|
||||
-- Sfinv
|
||||
--
|
||||
if minetest.get_modpath("sfinv") then
|
||||
sfinv.register_page("classroom:edu", {
|
||||
title = S"Classroom",
|
||||
is_in_nav = function(self, player, context)
|
||||
return check_perm(player)
|
||||
end,
|
||||
get = function(self, player, context)
|
||||
return sfinv.make_formspec(player, context, get_formspec(player, context),
|
||||
false, DASHBOARD_HEADER)
|
||||
end,
|
||||
on_player_receive_fields = function(self, player, context, fields)
|
||||
local ret = handle_results(player, context, fields)
|
||||
if ret then
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
end
|
||||
return ret
|
||||
end,
|
||||
})
|
||||
|
||||
sfinv.register_page("classroom:edu", {
|
||||
title = S"Classroom",
|
||||
is_in_nav = function(self, player, context)
|
||||
return check_perm(player)
|
||||
end,
|
||||
get = function(self, player, context)
|
||||
return sfinv.make_formspec(player, context, get_formspec(player, context),
|
||||
false, "formspec_version[3]size[10.5,10.85]")
|
||||
end,
|
||||
on_player_receive_fields = function(self, player, context, fields)
|
||||
local ret = handle_results(player, context, fields)
|
||||
if ret then
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
local function on_grant_revoke(grantee, granter, priv)
|
||||
if priv ~= "teacher" then
|
||||
return
|
||||
end
|
||||
return ret
|
||||
|
||||
local player = minetest.get_player_by_name(grantee)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.after(0, function()
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
end)
|
||||
end
|
||||
|
||||
minetest.register_on_priv_grant(on_grant_revoke)
|
||||
minetest.register_on_priv_revoke(on_grant_revoke)
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- Chatcommand
|
||||
--
|
||||
minetest.register_chatcommand("classroom", {
|
||||
privs = { teacher = true },
|
||||
func = function(name, params)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then
|
||||
return false, "You must be online to open the GUI"
|
||||
end
|
||||
|
||||
classroom.show_dashboard_formspec(player)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
local function on_grant_revoke(grantee, granter, priv)
|
||||
if priv ~= "teacher" then
|
||||
return
|
||||
end
|
||||
|
||||
local player = minetest.get_player_by_name(grantee)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.after(0, function()
|
||||
sfinv.set_player_inventory_formspec(player)
|
||||
end)
|
||||
--
|
||||
-- Unified Inventory
|
||||
--
|
||||
if minetest.get_modpath("unified_inventory") ~= nil then
|
||||
unified_inventory.register_button("classroom", {
|
||||
type = "image",
|
||||
image = "classroom_icon.png",
|
||||
tooltip = S("Classroom"),
|
||||
action = classroom.show_dashboard_formspec,
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_on_priv_grant(on_grant_revoke)
|
||||
minetest.register_on_priv_revoke(on_grant_revoke)
|
||||
|
|
Loading…
Reference in New Issue