Add unified inventory support and chatcommand
parent
2145aa1ebd
commit
1c2cabe795
|
@ -9,5 +9,6 @@ read_globals = {
|
||||||
"minetest",
|
"minetest",
|
||||||
"sfinv",
|
"sfinv",
|
||||||
"vector",
|
"vector",
|
||||||
|
"unified_inventory",
|
||||||
table={fields={"copy"}},
|
table={fields={"copy"}},
|
||||||
}
|
}
|
||||||
|
|
86
gui_dash.lua
86
gui_dash.lua
|
@ -30,6 +30,8 @@ local function check_perm(player)
|
||||||
return minetest.check_player_privs(player:get_player_name(), { teacher = true })
|
return minetest.check_player_privs(player:get_player_name(), { teacher = true })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local DASHBOARD_HEADER = "formspec_version[3]size[10.5,10.85]"
|
||||||
|
|
||||||
local function get_formspec(player, context)
|
local function get_formspec(player, context)
|
||||||
if not check_perm(player) then
|
if not check_perm(player) then
|
||||||
return "label[0,0;" .. FS"Access denied" .. "]"
|
return "label[0,0;" .. FS"Access denied" .. "]"
|
||||||
|
@ -239,8 +241,7 @@ end
|
||||||
|
|
||||||
local function handle_results(player, context, fields)
|
local function handle_results(player, context, fields)
|
||||||
if not check_perm(player) then
|
if not check_perm(player) then
|
||||||
sfinv.set_page(player, sfinv.get_homepage_name(player))
|
return false
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if fields.students then
|
if fields.students then
|
||||||
|
@ -248,7 +249,6 @@ local function handle_results(player, context, fields)
|
||||||
local i = (evt.row or 0) - 1
|
local i = (evt.row or 0) - 1
|
||||||
if evt.type == "CHG" and i >= 1 and i <= #context.students then
|
if evt.type == "CHG" and i >= 1 and i <= #context.students then
|
||||||
context.selected_student = context.students[i]
|
context.selected_student = context.students[i]
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -266,7 +266,6 @@ local function handle_results(player, context, fields)
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -275,11 +274,9 @@ local function handle_results(player, context, fields)
|
||||||
return true
|
return true
|
||||||
elseif fields.select_group then
|
elseif fields.select_group then
|
||||||
context.select_toggle = "group"
|
context.select_toggle = "group"
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
elseif fields.select_selected then
|
elseif fields.select_selected then
|
||||||
context.select_toggle = "selected"
|
context.select_toggle = "selected"
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -287,22 +284,21 @@ local function handle_results(player, context, fields)
|
||||||
local student = minetest.get_player_by_name(context.selected_student)
|
local student = minetest.get_player_by_name(context.selected_student)
|
||||||
if student then
|
if student then
|
||||||
player:set_pos(student:get_pos())
|
player:set_pos(student:get_pos())
|
||||||
return true
|
return false
|
||||||
else
|
else
|
||||||
context.selected_student = nil
|
context.selected_student = nil
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if fields.new_group then
|
if fields.new_group then
|
||||||
classroom.show_new_group(player)
|
classroom.show_new_group(player)
|
||||||
return true
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
if fields.edit_group and context.groupname then
|
if fields.edit_group and context.groupname then
|
||||||
classroom.show_edit_group(player, context.groupname)
|
classroom.show_edit_group(player, context.groupname)
|
||||||
return true
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, action in pairs(classroom.get_actions()) do
|
for _, action in pairs(classroom.get_actions()) do
|
||||||
|
@ -319,7 +315,6 @@ local function handle_results(player, context, fields)
|
||||||
end
|
end
|
||||||
|
|
||||||
classroom.run_action(action.name, player, selector)
|
classroom.run_action(action.name, player, selector)
|
||||||
sfinv.set_player_inventory_formspec(player)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -327,10 +322,44 @@ local function handle_results(player, context, fields)
|
||||||
end
|
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
|
-- Sfinv
|
||||||
--
|
--
|
||||||
|
if minetest.get_modpath("sfinv") then
|
||||||
sfinv.register_page("classroom:edu", {
|
sfinv.register_page("classroom:edu", {
|
||||||
title = S"Classroom",
|
title = S"Classroom",
|
||||||
is_in_nav = function(self, player, context)
|
is_in_nav = function(self, player, context)
|
||||||
|
@ -338,7 +367,7 @@ sfinv.register_page("classroom:edu", {
|
||||||
end,
|
end,
|
||||||
get = function(self, player, context)
|
get = function(self, player, context)
|
||||||
return sfinv.make_formspec(player, context, get_formspec(player, context),
|
return sfinv.make_formspec(player, context, get_formspec(player, context),
|
||||||
false, "formspec_version[3]size[10.5,10.85]")
|
false, DASHBOARD_HEADER)
|
||||||
end,
|
end,
|
||||||
on_player_receive_fields = function(self, player, context, fields)
|
on_player_receive_fields = function(self, player, context, fields)
|
||||||
local ret = handle_results(player, context, fields)
|
local ret = handle_results(player, context, fields)
|
||||||
|
@ -366,3 +395,34 @@ end
|
||||||
|
|
||||||
minetest.register_on_priv_grant(on_grant_revoke)
|
minetest.register_on_priv_grant(on_grant_revoke)
|
||||||
minetest.register_on_priv_revoke(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,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- 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
|
||||||
|
|
Loading…
Reference in New Issue