package net.knarcraft.permissionsigns.manager; import net.knarcraft.permissionsigns.container.TemporaryPermission; import net.milkbowl.vault.permission.Permission; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import java.util.List; /** * A manager that performs all Permission tasks */ public class PermissionManager { private static Permission permission; private static List temporaryPermissions; /** * Initializes the permission manager * * @param permission

The permission object to use for everything permission-related

*/ public static void initialize(Permission permission) { PermissionManager.permission = permission; } /** * Grants a permission to the given player * * @param player

The player to grant the permission to

* @param permissionNode

The permission node to grant the player

* @param permanent

Whether to permanently grant the permission node

*/ public static void addPermission(Player player, String permissionNode, boolean permanent) { if (permanent) { addPermission(player, permissionNode); } else { addTemporaryPermission(player, permissionNode); } } /** * Grants a permanent permission to a player * * @param player

The player to grant the permission to

* @param permissionNode

The permission node to grant to the player

*/ private static void addPermission(Player player, String permissionNode) { permission.playerAdd(player, permissionNode); } /** * Grants a temporary permission to a player * * @param player

The player to give the permission to

* @param permissionNode

The temporary permission to grant

*/ private static void addTemporaryPermission(OfflinePlayer player, String permissionNode) { permission.playerAddTransient(player, permissionNode); //TODO: Create and store a temporary permission // Check all stored temporary permissions on startup: // * Remove expired temporary permissions // * Grant transient permissions // In a separate thread, remove any expired permissions, checking at least once every seconds. Might want to // store the granted permissions in a priority queue where the priority is the least duration left. // How to store temporary permissions? Identifier as Player + permission granted time? } /** * Removes a temporary permission * * @param player

The player to remove the permission from

* @param permissionNode

The permission node to remove from the player

*/ public static void removeTemporaryPermission(OfflinePlayer player, String permissionNode) { permission.playerRemoveTransient(player, permissionNode); } }