diff --git a/gui.lua b/gui.lua index b0b59d3..9a1a9fc 100644 --- a/gui.lua +++ b/gui.lua @@ -24,9 +24,19 @@ local function get_group(context) end end -sfinv.register_page("edu", { +sfinv.register_page("classroom:edu", { title = "Classroom", + check_perm = function(self, player) + return minetest.check_player_privs(player:get_player_name(), { teacher = true }) + end, + is_in_nav = function(self, player, context) + return self:check_perm(player) + end, get = function(self, player, context) + if not self:check_perm(player) then + return "label[0,0;Access denied]" + end + local fs = { "tablecolumns[color;text" } @@ -156,6 +166,11 @@ sfinv.register_page("edu", { return sfinv.make_formspec(player, context, table.concat(fs, ""), false) end, on_player_receive_fields = function(self, player, context, fields) + if not self:check_perm(player) then + sfinv.set_page(player, sfinv.get_homepage_name(player)) + return true + end + if fields.students then local evt = minetest.explode_table_event(fields.students) local i = (evt.row or 0) - 1 @@ -212,3 +227,21 @@ sfinv.register_page("edu", { end 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) +end + +minetest.register_on_priv_grant(on_grant_revoke) +minetest.register_on_priv_revoke(on_grant_revoke) diff --git a/init.lua b/init.lua index 66406b0..0e92335 100644 --- a/init.lua +++ b/init.lua @@ -3,3 +3,7 @@ classroom = {} dofile(minetest.get_modpath("classroom") .. "/api.lua") dofile(minetest.get_modpath("classroom") .. "/gui.lua") dofile(minetest.get_modpath("classroom") .. "/actions.lua") + +minetest.register_privilege("teacher", { + give_to_singleplayer = false +})