everness/privileges.lua
2024-01-25 15:31:55 -05:00

86 lines
3.2 KiB
Lua

--[[
Everness. Never ending discovery in Everness mapgen.
Copyright (C) 2024 SaKeL
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
--]]
local function update_sfinv(name)
minetest.after(0, function()
local player = minetest.get_player_by_name(name)
if player then
if sfinv.get_page(player) == 'everness:encyclopedia' then
sfinv.set_page(player, sfinv.get_homepage_name(player))
else
sfinv.set_player_inventory_formspec(player)
end
end
end)
end
local function update_ui(name)
minetest.after(0, function()
local player = minetest.get_player_by_name(name)
if player then
if unified_inventory.current_page[name] == 'everness:encyclopedia' then
unified_inventory.current_page[name] = 'craft'
end
unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[name])
end
end)
end
minetest.register_privilege('everness_encyclopedia', {
-- Privilege description
description = 'Collection of registered items and functions with some information about them. Used for testing not for gameplay. Works only with SFINV!',
-- Whether to grant the privilege to singleplayer.
give_to_singleplayer = false,
-- Whether to grant the privilege to the server admin.
-- Uses value of 'give_to_singleplayer' by default.
give_to_admin = false,
-- Called when given to player 'name' by 'granter_name'.
-- 'granter_name' will be nil if the priv was granted by a mod.
on_grant = function(name, granter_name)
if minetest.get_modpath('sfinv') and sfinv.enabled then
update_sfinv(name)
elseif minetest.get_modpath('unified_inventory') then
update_ui(name)
else
minetest.chat_send_player(name, 'Compatible inventory not found. Everness encyclopedia will not be shown.')
end
end,
-- Called when taken from player 'name' by 'revoker_name'.
-- 'revoker_name' will be nil if the priv was revoked by a mod.
-- Note that the above two callbacks will be called twice if a player is
-- responsible, once with the player name, and then with a nil player
-- name.
-- Return true in the above callbacks to stop register_on_priv_grant or
-- revoke being called.
on_revoke = function(name, revoker_name)
if minetest.get_modpath('sfinv') and sfinv.enabled then
update_sfinv(name)
elseif minetest.get_modpath('unified_inventory') then
update_ui(name)
else
minetest.chat_send_player(name, 'Compatible inventory not found. Everness encyclopedia will not be shown.')
end
end,
})