package io.papermc.paper.plugin; import java.util.List; import java.util.Set; import org.bukkit.permissions.Permissible; import org.bukkit.permissions.Permission; import org.jetbrains.annotations.ApiStatus; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; /** * A permission manager implementation to keep backwards compatibility partially alive with existing plugins that used * the bukkit one before. */ @ApiStatus.Experimental @NullMarked public interface PermissionManager { /** * Gets a {@link Permission} from its fully qualified name * * @param name Name of the permission * @return Permission, or null if none */ @Nullable Permission getPermission(String name); /** * Adds a {@link Permission} to this plugin manager. *

* If a permission is already defined with the given name of the new * permission, an exception will be thrown. * * @param perm Permission to add * @throws IllegalArgumentException Thrown when a permission with the same * name already exists */ void addPermission(Permission perm); /** * Removes a {@link Permission} registration from this plugin manager. *

* If the specified permission does not exist in this plugin manager, * nothing will happen. *

* Removing a permission registration will not remove the * permission from any {@link Permissible}s that have it. * * @param perm Permission to remove */ void removePermission(Permission perm); /** * Removes a {@link Permission} registration from this plugin manager. *

* If the specified permission does not exist in this plugin manager, * nothing will happen. *

* Removing a permission registration will not remove the * permission from any {@link Permissible}s that have it. * * @param name Permission to remove */ void removePermission(String name); /** * Gets the default permissions for the given op status * * @param op Which set of default permissions to get * @return The default permissions */ Set getDefaultPermissions(boolean op); /** * Recalculates the defaults for the given {@link Permission}. *

* This will have no effect if the specified permission is not registered * here. * * @param perm Permission to recalculate */ void recalculatePermissionDefaults(Permission perm); /** * Subscribes the given Permissible for information about the requested * Permission, by name. *

* If the specified Permission changes in any form, the Permissible will * be asked to recalculate. * * @param permission Permission to subscribe to * @param permissible Permissible subscribing */ void subscribeToPermission(String permission, Permissible permissible); /** * Unsubscribes the given Permissible for information about the requested * Permission, by name. * * @param permission Permission to unsubscribe from * @param permissible Permissible subscribing */ void unsubscribeFromPermission(String permission, Permissible permissible); /** * Gets a set containing all subscribed {@link Permissible}s to the given * permission, by name * * @param permission Permission to query for * @return Set containing all subscribed permissions */ Set getPermissionSubscriptions(String permission); /** * Subscribes to the given Default permissions by operator status *

* If the specified defaults change in any form, the Permissible will be * asked to recalculate. * * @param op Default list to subscribe to * @param permissible Permissible subscribing */ void subscribeToDefaultPerms(boolean op, Permissible permissible); /** * Unsubscribes from the given Default permissions by operator status * * @param op Default list to unsubscribe from * @param permissible Permissible subscribing */ void unsubscribeFromDefaultPerms(boolean op, Permissible permissible); /** * Gets a set containing all subscribed {@link Permissible}s to the given * default list, by op status * * @param op Default list to query for * @return Set containing all subscribed permissions */ Set getDefaultPermSubscriptions(boolean op); /** * Gets a set of all registered permissions. *

* This set is a copy and will not be modified live. * * @return Set containing all current registered permissions */ Set getPermissions(); /** * Adds a list of permissions. *

* This is meant as an optimization for adding multiple permissions without recalculating each permission. * * @param perm permission */ void addPermissions(List perm); /** * Clears the current registered permissinos. *

* This is used for reloading. */ void clearPermissions(); }