001 package org.bukkit.permissions;
002
003 import java.util.Set;
004 import org.bukkit.plugin.Plugin;
005
006 /**
007 * Represents an object that may be assigned permissions
008 */
009 public interface Permissible extends ServerOperator {
010
011 /**
012 * Checks if this object contains an override for the specified
013 * permission, by fully qualified name
014 *
015 * @param name Name of the permission
016 * @return true if the permission is set, otherwise false
017 */
018 public boolean isPermissionSet(String name);
019
020 /**
021 * Checks if this object contains an override for the specified {@link
022 * Permission}
023 *
024 * @param perm Permission to check
025 * @return true if the permission is set, otherwise false
026 */
027 public boolean isPermissionSet(Permission perm);
028
029 /**
030 * Gets the value of the specified permission, if set.
031 * <p>
032 * If a permission override is not set on this object, the default value
033 * of the permission will be returned.
034 *
035 * @param name Name of the permission
036 * @return Value of the permission
037 */
038 public boolean hasPermission(String name);
039
040 /**
041 * Gets the value of the specified permission, if set.
042 * <p>
043 * If a permission override is not set on this object, the default value
044 * of the permission will be returned
045 *
046 * @param perm Permission to get
047 * @return Value of the permission
048 */
049 public boolean hasPermission(Permission perm);
050
051 /**
052 * Adds a new {@link PermissionAttachment} with a single permission by
053 * name and value
054 *
055 * @param plugin Plugin responsible for this attachment, may not be null
056 * or disabled
057 * @param name Name of the permission to attach
058 * @param value Value of the permission
059 * @return The PermissionAttachment that was just created
060 */
061 public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value);
062
063 /**
064 * Adds a new empty {@link PermissionAttachment} to this object
065 *
066 * @param plugin Plugin responsible for this attachment, may not be null
067 * or disabled
068 * @return The PermissionAttachment that was just created
069 */
070 public PermissionAttachment addAttachment(Plugin plugin);
071
072 /**
073 * Temporarily adds a new {@link PermissionAttachment} with a single
074 * permission by name and value
075 *
076 * @param plugin Plugin responsible for this attachment, may not be null
077 * or disabled
078 * @param name Name of the permission to attach
079 * @param value Value of the permission
080 * @param ticks Amount of ticks to automatically remove this attachment
081 * after
082 * @return The PermissionAttachment that was just created
083 */
084 public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks);
085
086 /**
087 * Temporarily adds a new empty {@link PermissionAttachment} to this
088 * object
089 *
090 * @param plugin Plugin responsible for this attachment, may not be null
091 * or disabled
092 * @param ticks Amount of ticks to automatically remove this attachment
093 * after
094 * @return The PermissionAttachment that was just created
095 */
096 public PermissionAttachment addAttachment(Plugin plugin, int ticks);
097
098 /**
099 * Removes the given {@link PermissionAttachment} from this object
100 *
101 * @param attachment Attachment to remove
102 * @throws IllegalArgumentException Thrown when the specified attachment
103 * isn't part of this object
104 */
105 public void removeAttachment(PermissionAttachment attachment);
106
107 /**
108 * Recalculates the permissions for this object, if the attachments have
109 * changed values.
110 * <p>
111 * This should very rarely need to be called from a plugin.
112 */
113 public void recalculatePermissions();
114
115 /**
116 * Gets a set containing all of the permissions currently in effect by
117 * this object
118 *
119 * @return Set of currently effective permissions
120 */
121 public Set<PermissionAttachmentInfo> getEffectivePermissions();
122 }