geforkt von Mirrors/Paper
Added new permission system
By: Dinnerbone <dinnerbone@dinnerbone.com>
Dieser Commit ist enthalten in:
Ursprung
3c852a3c8f
Commit
67a52cca79
@ -1,8 +1,9 @@
|
|||||||
package org.bukkit.command;
|
package org.bukkit.command;
|
||||||
|
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
public interface CommandSender {
|
public interface CommandSender extends Permissible {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends this sender a message
|
* Sends this sender a message
|
||||||
@ -11,13 +12,6 @@ public interface CommandSender {
|
|||||||
*/
|
*/
|
||||||
public void sendMessage(String message);
|
public void sendMessage(String message);
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if this sender is currently op
|
|
||||||
*
|
|
||||||
* @return true if they are
|
|
||||||
*/
|
|
||||||
public boolean isOp();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the server instance that this command is running on
|
* Returns the server instance that this command is running on
|
||||||
*
|
*
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
package org.bukkit.command;
|
package org.bukkit.command;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.permissions.PermissibleBase;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
|
import org.bukkit.permissions.PermissionAttachment;
|
||||||
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents CLI input from a console
|
* Represents CLI input from a console
|
||||||
*/
|
*/
|
||||||
public class ConsoleCommandSender implements CommandSender {
|
public class ConsoleCommandSender implements CommandSender {
|
||||||
private final Server server;
|
private final Server server;
|
||||||
|
private final PermissibleBase perm = new PermissibleBase(this);
|
||||||
|
|
||||||
public ConsoleCommandSender(Server server) {
|
public ConsoleCommandSender(Server server) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
@ -21,6 +28,10 @@ public class ConsoleCommandSender implements CommandSender {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOp(boolean value) {
|
||||||
|
throw new UnsupportedOperationException("Cannot change operator status of server console");
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isPlayer() {
|
public boolean isPlayer() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -28,4 +39,48 @@ public class ConsoleCommandSender implements CommandSender {
|
|||||||
public Server getServer() {
|
public Server getServer() {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(String name) {
|
||||||
|
return perm.isPermissionSet(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(Permission perm) {
|
||||||
|
return this.perm.isPermissionSet(perm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(String name) {
|
||||||
|
return perm.hasPermission(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(Permission perm) {
|
||||||
|
return this.perm.hasPermission(perm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value) {
|
||||||
|
return perm.addAttachment(plugin, name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin) {
|
||||||
|
return perm.addAttachment(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks) {
|
||||||
|
return perm.addAttachment(plugin, name, value, ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, int ticks) {
|
||||||
|
return perm.addAttachment(plugin, ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAttachment(PermissionAttachment attachment) {
|
||||||
|
perm.removeAttachment(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void recalculatePermissions() {
|
||||||
|
perm.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<PermissionAttachmentInfo> getEffectivePermissions() {
|
||||||
|
return perm.getEffectivePermissions();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,12 @@ package org.bukkit.entity;
|
|||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
import org.bukkit.permissions.Permissible;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a human entity, such as an NPC or a player
|
* Represents a human entity, such as an NPC or a player
|
||||||
*/
|
*/
|
||||||
public interface HumanEntity extends LivingEntity, AnimalTamer {
|
public interface HumanEntity extends LivingEntity, AnimalTamer, Permissible {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the name of this player
|
* Returns the name of this player
|
||||||
|
106
paper-api/src/main/java/org/bukkit/permissions/Permissible.java
Normale Datei
106
paper-api/src/main/java/org/bukkit/permissions/Permissible.java
Normale Datei
@ -0,0 +1,106 @@
|
|||||||
|
|
||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an object that may be assigned permissions
|
||||||
|
*/
|
||||||
|
public interface Permissible extends ServerOperator {
|
||||||
|
/**
|
||||||
|
* Checks if this object contains an override for the specified permission, by fully qualified name
|
||||||
|
*
|
||||||
|
* @param name Name of the permission
|
||||||
|
* @return true if the permission is set, otherwise false
|
||||||
|
*/
|
||||||
|
public boolean isPermissionSet(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if this object contains an override for the specified {@link Permission}
|
||||||
|
*
|
||||||
|
* @param perm Permission to check
|
||||||
|
* @return true if the permission is set, otherwise false
|
||||||
|
*/
|
||||||
|
public boolean isPermissionSet(Permission perm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of the specified permission, if set.
|
||||||
|
*
|
||||||
|
* If a permission override is not set on this object, the default value of the permission will be returned.
|
||||||
|
*
|
||||||
|
* @param name Name of the permission
|
||||||
|
* @return Value of the permission
|
||||||
|
*/
|
||||||
|
public boolean hasPermission(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of the specified permission, if set.
|
||||||
|
*
|
||||||
|
* If a permission override is not set on this object, the default value of the permission will be returned
|
||||||
|
*
|
||||||
|
* @param perm Permission to get
|
||||||
|
* @return Value of the permission
|
||||||
|
*/
|
||||||
|
public boolean hasPermission(Permission perm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new {@link PermissionAttachment} with a single permission by name and value
|
||||||
|
*
|
||||||
|
* @param plugin Plugin responsible for this attachment, may not be null or disabled
|
||||||
|
* @param name Name of the permission to attach
|
||||||
|
* @param value Value of the permission
|
||||||
|
* @return The PermissionAttachment that was just created
|
||||||
|
*/
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new empty {@link PermissionAttachment} to this object
|
||||||
|
*
|
||||||
|
* @param plugin Plugin responsible for this attachment, may not be null or disabled
|
||||||
|
* @return The PermissionAttachment that was just created
|
||||||
|
*/
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporarily adds a new {@link PermissionAttachment} with a single permission by name and value
|
||||||
|
*
|
||||||
|
* @param plugin Plugin responsible for this attachment, may not be null or disabled
|
||||||
|
* @param name Name of the permission to attach
|
||||||
|
* @param value Value of the permission
|
||||||
|
* @param ticks Amount of ticks to automatically remove this attachment after
|
||||||
|
* @return The PermissionAttachment that was just created
|
||||||
|
*/
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporarily adds a new empty {@link PermissionAttachment} to this object
|
||||||
|
*
|
||||||
|
* @param plugin Plugin responsible for this attachment, may not be null or disabled
|
||||||
|
* @param ticks Amount of ticks to automatically remove this attachment after
|
||||||
|
* @return The PermissionAttachment that was just created
|
||||||
|
*/
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, int ticks);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given {@link PermissionAttachment} from this object
|
||||||
|
*
|
||||||
|
* @param attachment Attachment to remove
|
||||||
|
* @throws IllegalArgumentException Thrown when the specified attachment isn't part of this object
|
||||||
|
*/
|
||||||
|
public void removeAttachment(PermissionAttachment attachment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recalculates the permissions for this object, if the attachments have changed values.
|
||||||
|
*
|
||||||
|
* This should very rarely need to be called from a plugin.
|
||||||
|
*/
|
||||||
|
public void recalculatePermissions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a set containing all of the permissions currently in effect by this object
|
||||||
|
*
|
||||||
|
* @return Set of currently effective permissions
|
||||||
|
*/
|
||||||
|
public Set<PermissionAttachmentInfo> getEffectivePermissions();
|
||||||
|
}
|
242
paper-api/src/main/java/org/bukkit/permissions/PermissibleBase.java
Normale Datei
242
paper-api/src/main/java/org/bukkit/permissions/PermissibleBase.java
Normale Datei
@ -0,0 +1,242 @@
|
|||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base Permissible for use in any Permissible object via proxy or extension
|
||||||
|
*/
|
||||||
|
public class PermissibleBase implements Permissible {
|
||||||
|
private ServerOperator opable = null;
|
||||||
|
private final List<PermissionAttachment> attachments = new LinkedList<PermissionAttachment>();
|
||||||
|
private final Map<String, PermissionAttachmentInfo> permissions = new HashMap<String, PermissionAttachmentInfo>();
|
||||||
|
private boolean dirtyPermissions = true;
|
||||||
|
|
||||||
|
public PermissibleBase(ServerOperator opable) {
|
||||||
|
this.opable = opable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOp() {
|
||||||
|
if (opable == null) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return opable.isOp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOp(boolean value) {
|
||||||
|
if (opable == null) {
|
||||||
|
throw new UnsupportedOperationException("Cannot change op value as no ServerOperator is set");
|
||||||
|
} else {
|
||||||
|
opable.setOp(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(String name) {
|
||||||
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("Permission name cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
calculatePermissions();
|
||||||
|
|
||||||
|
return permissions.containsKey(name.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(Permission perm) {
|
||||||
|
if (perm == null) {
|
||||||
|
throw new IllegalArgumentException("Permission cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
return isPermissionSet(perm.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(String inName) {
|
||||||
|
if (inName == null) {
|
||||||
|
throw new IllegalArgumentException("Permission name cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
calculatePermissions();
|
||||||
|
|
||||||
|
String name = inName.toLowerCase();
|
||||||
|
|
||||||
|
if (isPermissionSet(name)) {
|
||||||
|
return permissions.get(name).getValue();
|
||||||
|
} else {
|
||||||
|
Permission perm = Bukkit.getServer().getPluginManager().getPermission(name);
|
||||||
|
|
||||||
|
if (perm != null) {
|
||||||
|
return perm.getDefault().getValue(isOp());
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(Permission perm) {
|
||||||
|
if (perm == null) {
|
||||||
|
throw new IllegalArgumentException("Permission cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
calculatePermissions();
|
||||||
|
|
||||||
|
String name = perm.getName().toLowerCase();
|
||||||
|
|
||||||
|
if (isPermissionSet(name)) {
|
||||||
|
return permissions.get(name).getValue();
|
||||||
|
} else if (perm != null) {
|
||||||
|
return perm.getDefault().getValue(isOp());
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value) {
|
||||||
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("Permission name cannot be null");
|
||||||
|
} else if (plugin == null) {
|
||||||
|
throw new IllegalArgumentException("Plugin cannot be null");
|
||||||
|
} else if (!plugin.isEnabled()) {
|
||||||
|
throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
PermissionAttachment result = addAttachment(plugin);
|
||||||
|
result.setPermission(name, value);
|
||||||
|
|
||||||
|
recalculatePermissions();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin) {
|
||||||
|
if (plugin == null) {
|
||||||
|
throw new IllegalArgumentException("Plugin cannot be null");
|
||||||
|
} else if (!plugin.isEnabled()) {
|
||||||
|
throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
PermissionAttachment result = new PermissionAttachment(plugin, this);
|
||||||
|
|
||||||
|
attachments.add(result);
|
||||||
|
recalculatePermissions();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAttachment(PermissionAttachment attachment) {
|
||||||
|
if (attachment == null) {
|
||||||
|
throw new IllegalArgumentException("Attachment cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attachments.contains(attachment)) {
|
||||||
|
attachments.remove(attachment);
|
||||||
|
PermissionRemovedExecutor ex = attachment.getRemovalCallback();
|
||||||
|
|
||||||
|
if (ex != null) {
|
||||||
|
ex.attachmentRemoved(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
recalculatePermissions();
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Given attachment is not part of Permissible object " + this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void recalculatePermissions() {
|
||||||
|
dirtyPermissions = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void calculatePermissions() {
|
||||||
|
if (dirtyPermissions) {
|
||||||
|
permissions.clear();
|
||||||
|
Set<Permission> defaults = Bukkit.getServer().getPluginManager().getDefaultPermissions(isOp());
|
||||||
|
|
||||||
|
for (Permission perm : defaults) {
|
||||||
|
String name = perm.getName().toLowerCase();
|
||||||
|
permissions.put(name, new PermissionAttachmentInfo(this, name, null, true));
|
||||||
|
calculateChildPermissions(perm.getChildren(), false, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PermissionAttachment attachment : attachments) {
|
||||||
|
calculateChildPermissions(attachment.getPermissions(), false, attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
dirtyPermissions = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void calculateChildPermissions(Map<String, Boolean> children, boolean invert, PermissionAttachment attachment) {
|
||||||
|
Set<String> keys = children.keySet();
|
||||||
|
|
||||||
|
for (String name : keys) {
|
||||||
|
Permission perm = Bukkit.getServer().getPluginManager().getPermission(name);
|
||||||
|
boolean value = children.get(name) ^ invert;
|
||||||
|
String lname = name.toLowerCase();
|
||||||
|
|
||||||
|
permissions.put(lname, new PermissionAttachmentInfo(this, lname, attachment, value));
|
||||||
|
|
||||||
|
if (perm != null) {
|
||||||
|
calculateChildPermissions(perm.getChildren(), !value, attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks) {
|
||||||
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("Permission name cannot be null");
|
||||||
|
} else if (plugin == null) {
|
||||||
|
throw new IllegalArgumentException("Plugin cannot be null");
|
||||||
|
} else if (!plugin.isEnabled()) {
|
||||||
|
throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
PermissionAttachment result = addAttachment(plugin, ticks);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
result.setPermission(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, int ticks) {
|
||||||
|
if (plugin == null) {
|
||||||
|
throw new IllegalArgumentException("Plugin cannot be null");
|
||||||
|
} else if (!plugin.isEnabled()) {
|
||||||
|
throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
PermissionAttachment result = addAttachment(plugin);
|
||||||
|
|
||||||
|
if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new RemoveAttachmentRunnable(result), ticks) == -1) {
|
||||||
|
Bukkit.getServer().getLogger().log(Level.WARNING, "Could not add PermissionAttachment to " + this + " for plugin " + plugin.getDescription().getFullName() + ": Scheduler returned -1");
|
||||||
|
result.remove();
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<PermissionAttachmentInfo> getEffectivePermissions() {
|
||||||
|
calculatePermissions();
|
||||||
|
return new HashSet<PermissionAttachmentInfo>(permissions.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RemoveAttachmentRunnable implements Runnable {
|
||||||
|
private PermissionAttachment attachment;
|
||||||
|
|
||||||
|
public RemoveAttachmentRunnable(PermissionAttachment attachment) {
|
||||||
|
this.attachment = attachment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
attachment.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
146
paper-api/src/main/java/org/bukkit/permissions/Permission.java
Normale Datei
146
paper-api/src/main/java/org/bukkit/permissions/Permission.java
Normale Datei
@ -0,0 +1,146 @@
|
|||||||
|
|
||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a unique permission that may be attached to a {@link Permissible}
|
||||||
|
*/
|
||||||
|
public class Permission {
|
||||||
|
private final String name;
|
||||||
|
private final Map<String, Boolean> children = new LinkedHashMap<String, Boolean>();
|
||||||
|
private PermissionDefault defaultValue = PermissionDefault.FALSE;
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public Permission(String name) {
|
||||||
|
this(name, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, String description) {
|
||||||
|
this(name, description, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, PermissionDefault defaultValue) {
|
||||||
|
this(name, null, defaultValue, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, String description, PermissionDefault defaultValue) {
|
||||||
|
this(name, description, defaultValue, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, Map<String, Boolean> children) {
|
||||||
|
this(name, null, null, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, String description, Map<String, Boolean> children) {
|
||||||
|
this(name, description, null, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, PermissionDefault defaultValue, Map<String, Boolean> children) {
|
||||||
|
this(name, null, defaultValue, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Permission(String name, String description, PermissionDefault defaultValue, Map<String, Boolean> children) {
|
||||||
|
this.name = name;
|
||||||
|
this.description = (description == null) ? "" : description;
|
||||||
|
this.defaultValue = (defaultValue == null) ? defaultValue.FALSE : defaultValue;
|
||||||
|
|
||||||
|
if (children != null) {
|
||||||
|
this.children.putAll(children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the unique fully qualified name of this Permission
|
||||||
|
*
|
||||||
|
* @return Fully qualified name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the children of this permission.
|
||||||
|
*
|
||||||
|
* This is a copy and changes will not be saved.
|
||||||
|
*
|
||||||
|
* @return Permission children
|
||||||
|
*/
|
||||||
|
public Map<String, Boolean> getChildren() {
|
||||||
|
return new LinkedHashMap<String, Boolean>(children);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default value of this permission.
|
||||||
|
*
|
||||||
|
* @return Default value of this permission.
|
||||||
|
*/
|
||||||
|
public PermissionDefault getDefault() {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a brief description of this permission, if set
|
||||||
|
*
|
||||||
|
* @return Brief description of this permission
|
||||||
|
*/
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a Permission from a map of data, usually used from retrieval from a yaml file.
|
||||||
|
*
|
||||||
|
* The data may contain the following keys:
|
||||||
|
* default: Boolean true or false. If not specified, false.
|
||||||
|
* children: Map<String, Boolean> of child permissions. If not specified, empty list.
|
||||||
|
* description: Short string containing a very small description of this description. If not specified, empty string.
|
||||||
|
*
|
||||||
|
* @param name Name of the permission
|
||||||
|
* @param data Map of keys
|
||||||
|
* @return Permission object
|
||||||
|
*/
|
||||||
|
public static Permission loadPermission(String name, Map<String, Object> data) {
|
||||||
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("Name cannot be null");
|
||||||
|
}
|
||||||
|
if (data == null) {
|
||||||
|
throw new IllegalArgumentException("Data cannot be null");
|
||||||
|
}
|
||||||
|
String desc = null;
|
||||||
|
PermissionDefault def = null;
|
||||||
|
Map<String, Boolean> children = null;
|
||||||
|
|
||||||
|
if (data.containsKey("default")) {
|
||||||
|
try {
|
||||||
|
PermissionDefault value = PermissionDefault.getByName(data.get("default").toString());
|
||||||
|
if (value != null) {
|
||||||
|
def = value;
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("'default' key contained unknown value");
|
||||||
|
}
|
||||||
|
} catch (ClassCastException ex) {
|
||||||
|
throw new IllegalArgumentException("'default' key is of wrong type", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.containsKey("children")) {
|
||||||
|
try {
|
||||||
|
children = (Map<String, Boolean>)data.get("children");
|
||||||
|
} catch (ClassCastException ex) {
|
||||||
|
throw new IllegalArgumentException("'children' key is of wrong type", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.containsKey("description")) {
|
||||||
|
try {
|
||||||
|
desc = (String)data.get("description");
|
||||||
|
} catch (ClassCastException ex) {
|
||||||
|
throw new IllegalArgumentException("'description' key is of wrong type", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Permission(name, desc, def, children);
|
||||||
|
}
|
||||||
|
}
|
134
paper-api/src/main/java/org/bukkit/permissions/PermissionAttachment.java
Normale Datei
134
paper-api/src/main/java/org/bukkit/permissions/PermissionAttachment.java
Normale Datei
@ -0,0 +1,134 @@
|
|||||||
|
|
||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds information about a permission attachment on a {@link Permissible} object
|
||||||
|
*/
|
||||||
|
public class PermissionAttachment {
|
||||||
|
private PermissionRemovedExecutor removed;
|
||||||
|
private final TreeMap<String, Boolean> permissions = new TreeMap<String, Boolean>();
|
||||||
|
private final Permissible permissible;
|
||||||
|
private final Plugin plugin;
|
||||||
|
|
||||||
|
public PermissionAttachment(Plugin plugin, Permissible Permissible) {
|
||||||
|
if (plugin == null) {
|
||||||
|
throw new IllegalArgumentException("Plugin cannot be null");
|
||||||
|
} else if (!plugin.isEnabled()) {
|
||||||
|
throw new IllegalArgumentException("Plugin " + plugin.getDescription().getFullName() + " is disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.permissible = Permissible;
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the plugin responsible for this attachment
|
||||||
|
*
|
||||||
|
* @return Plugin responsible for this permission attachment
|
||||||
|
*/
|
||||||
|
public Plugin getPlugin() {
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an object to be called for when this attachment is removed from a {@link Permissible}. May be null.
|
||||||
|
*
|
||||||
|
* @param ex Object to be called when this is removed
|
||||||
|
*/
|
||||||
|
public void setRemovalCallback(PermissionRemovedExecutor ex) {
|
||||||
|
removed = ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the class that was previously set to be called when this attachment was removed from a {@link Permissible}. May be null.
|
||||||
|
*
|
||||||
|
* @return Object to be called when this is removed
|
||||||
|
*/
|
||||||
|
public PermissionRemovedExecutor getRemovalCallback() {
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Permissible that this is attached to
|
||||||
|
*
|
||||||
|
* @return Permissible containing this attachment
|
||||||
|
*/
|
||||||
|
public Permissible getPermissible() {
|
||||||
|
return permissible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a copy of all set permissions and values contained within this attachment.
|
||||||
|
*
|
||||||
|
* This map may be modified but will not affect the attachment, as it is a copy.
|
||||||
|
*
|
||||||
|
* @return Copy of all permissions and values expressed by this attachment
|
||||||
|
*/
|
||||||
|
public Map<String, Boolean> getPermissions() {
|
||||||
|
return (Map<String, Boolean>)permissions.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a permission to the given value, by its fully qualified name
|
||||||
|
*
|
||||||
|
* @param name Name of the permission
|
||||||
|
* @param value New value of the permission
|
||||||
|
*/
|
||||||
|
public void setPermission(String name, boolean value) {
|
||||||
|
permissions.put(name.toLowerCase(), value);
|
||||||
|
permissible.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a permission to the given value
|
||||||
|
*
|
||||||
|
* @param perm Permission to set
|
||||||
|
* @param value New value of the permission
|
||||||
|
*/
|
||||||
|
public void setPermission(Permission perm, boolean value) {
|
||||||
|
setPermission(perm.getName(), value);
|
||||||
|
permissible.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified permission from this attachment.
|
||||||
|
*
|
||||||
|
* If the permission does not exist in this attachment, nothing will happen.
|
||||||
|
*
|
||||||
|
* @param name Name of the permission to remove
|
||||||
|
*/
|
||||||
|
public void unsetPermission(String name) {
|
||||||
|
permissions.remove(name.toLowerCase());
|
||||||
|
permissible.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified permission from this attachment.
|
||||||
|
*
|
||||||
|
* If the permission does not exist in this attachment, nothing will happen.
|
||||||
|
*
|
||||||
|
* @param perm Permission to remove
|
||||||
|
*/
|
||||||
|
public void unsetPermission(Permission perm) {
|
||||||
|
unsetPermission(perm.getName());
|
||||||
|
permissible.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes this attachment from its registered {@link Permissible}
|
||||||
|
*
|
||||||
|
* @return true if the permissible was removed successfully, false if it did not exist
|
||||||
|
*/
|
||||||
|
public boolean remove() {
|
||||||
|
try {
|
||||||
|
permissible.removeAttachment(this);
|
||||||
|
return true;
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds information on a permission and which {@link PermissionAttachment} provides it
|
||||||
|
*/
|
||||||
|
public class PermissionAttachmentInfo {
|
||||||
|
private final Permissible permissible;
|
||||||
|
private final String permission;
|
||||||
|
private final PermissionAttachment attachment;
|
||||||
|
private final boolean value;
|
||||||
|
|
||||||
|
public PermissionAttachmentInfo(Permissible permissible, String permission, PermissionAttachment attachment, boolean value) {
|
||||||
|
if (permissible == null) {
|
||||||
|
throw new IllegalArgumentException("Permissible may not be null");
|
||||||
|
} else if (permission == null) {
|
||||||
|
throw new IllegalArgumentException("Permissions may not be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.permissible = permissible;
|
||||||
|
this.permission = permission;
|
||||||
|
this.attachment = attachment;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the permissible this is attached to
|
||||||
|
*
|
||||||
|
* @return Permissible this permission is for
|
||||||
|
*/
|
||||||
|
public Permissible getPermissible() {
|
||||||
|
return permissible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the permission being set
|
||||||
|
*
|
||||||
|
* @return Name of the permission
|
||||||
|
*/
|
||||||
|
public String getPermission() {
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the attachment providing this permission. This may be null for default
|
||||||
|
* permissions (usually parent permissions).
|
||||||
|
*
|
||||||
|
* @return Attachment
|
||||||
|
*/
|
||||||
|
public PermissionAttachment getAttachment() {
|
||||||
|
return attachment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of this permission
|
||||||
|
*
|
||||||
|
* @return Value of the permission
|
||||||
|
*/
|
||||||
|
public boolean getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the possible default values for permissions
|
||||||
|
*/
|
||||||
|
public enum PermissionDefault {
|
||||||
|
TRUE("true"),
|
||||||
|
FALSE("false"),
|
||||||
|
OP("op", "isop", "operator", "isoperator", "admin", "isadmin"),
|
||||||
|
NOT_OP("!op", "notop", "!operator", "notoperator", "!admin", "notadmin");
|
||||||
|
|
||||||
|
private final String[] names;
|
||||||
|
private final static Map<String, PermissionDefault> lookup = new HashMap<String, PermissionDefault>();
|
||||||
|
|
||||||
|
private PermissionDefault(String... names) {
|
||||||
|
this.names = names;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the value of this PermissionDefault for the given operator value
|
||||||
|
*
|
||||||
|
* @param op If the target is op
|
||||||
|
* @return True if the default should be true, or false
|
||||||
|
*/
|
||||||
|
public boolean getValue(boolean op) {
|
||||||
|
switch (this) {
|
||||||
|
case TRUE:
|
||||||
|
return true;
|
||||||
|
case FALSE:
|
||||||
|
return false;
|
||||||
|
case OP:
|
||||||
|
return op;
|
||||||
|
case NOT_OP:
|
||||||
|
return !op;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Looks up a PermissionDefault by name
|
||||||
|
*
|
||||||
|
* @param name Name of the default
|
||||||
|
* @return Specified value, or null if not found
|
||||||
|
*/
|
||||||
|
public static PermissionDefault getByName(String name) {
|
||||||
|
return lookup.get(name.toLowerCase().replaceAll("[^a-z!]", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return names[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (PermissionDefault value : values()) {
|
||||||
|
for (String name : value.names) {
|
||||||
|
lookup.put(name, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a class which is to be notified when a {@link PermissionAttachment} is removed from a {@link Permissible}
|
||||||
|
*/
|
||||||
|
public interface PermissionRemovedExecutor {
|
||||||
|
/**
|
||||||
|
* Called when a {@link PermissionAttachment} is removed from a {@link Permissible}
|
||||||
|
*
|
||||||
|
* @param attachment Attachment which was removed
|
||||||
|
*/
|
||||||
|
public void attachmentRemoved(PermissionAttachment attachment);
|
||||||
|
}
|
22
paper-api/src/main/java/org/bukkit/permissions/ServerOperator.java
Normale Datei
22
paper-api/src/main/java/org/bukkit/permissions/ServerOperator.java
Normale Datei
@ -0,0 +1,22 @@
|
|||||||
|
package org.bukkit.permissions;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an object that may become a server operator, such as a {@link Player}
|
||||||
|
*/
|
||||||
|
public interface ServerOperator {
|
||||||
|
/**
|
||||||
|
* Checks if this object is a server operator
|
||||||
|
*
|
||||||
|
* @return true if this is an operator, otherwise false
|
||||||
|
*/
|
||||||
|
public boolean isOp();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the operator status of this object
|
||||||
|
*
|
||||||
|
* @param value New operator value
|
||||||
|
*/
|
||||||
|
public void setOp(boolean value);
|
||||||
|
}
|
@ -6,6 +6,10 @@ import java.io.Writer;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
import org.yaml.snakeyaml.Yaml;
|
import org.yaml.snakeyaml.Yaml;
|
||||||
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
||||||
|
|
||||||
@ -25,6 +29,7 @@ public final class PluginDescriptionFile {
|
|||||||
private String website = null;
|
private String website = null;
|
||||||
private boolean database = false;
|
private boolean database = false;
|
||||||
private PluginLoadOrder order = PluginLoadOrder.POSTWORLD;
|
private PluginLoadOrder order = PluginLoadOrder.POSTWORLD;
|
||||||
|
private ArrayList<Permission> permissions = new ArrayList<Permission>();
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException {
|
public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException {
|
||||||
@ -138,6 +143,10 @@ public final class PluginDescriptionFile {
|
|||||||
this.database = database;
|
this.database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Permission> getPermissions() {
|
||||||
|
return permissions;
|
||||||
|
}
|
||||||
|
|
||||||
private void loadMap(Map<String, Object> map) throws InvalidDescriptionException {
|
private void loadMap(Map<String, Object> map) throws InvalidDescriptionException {
|
||||||
try {
|
try {
|
||||||
name = map.get("name").toString();
|
name = map.get("name").toString();
|
||||||
@ -247,6 +256,16 @@ public final class PluginDescriptionFile {
|
|||||||
throw new InvalidDescriptionException(ex, "authors are of wrong type");
|
throw new InvalidDescriptionException(ex, "authors are of wrong type");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (map.containsKey("permissions")) {
|
||||||
|
try {
|
||||||
|
Map<String, Map<String, Object>> perms = (Map<String, Map<String, Object>>) map.get("permissions");
|
||||||
|
|
||||||
|
loadPermissions(perms);
|
||||||
|
} catch (ClassCastException ex) {
|
||||||
|
throw new InvalidDescriptionException(ex, "permissions are of wrong type");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> saveMap() {
|
private Map<String, Object> saveMap() {
|
||||||
@ -282,4 +301,16 @@ public final class PluginDescriptionFile {
|
|||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadPermissions(Map<String, Map<String, Object>> perms) {
|
||||||
|
Set<String> keys = perms.keySet();
|
||||||
|
|
||||||
|
for (String name : keys) {
|
||||||
|
try {
|
||||||
|
permissions.add(Permission.loadPermission(name, perms.get(name)));
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
Bukkit.getServer().getLogger().log(Level.SEVERE, "Permission node '" + name + "' in plugin description file for " + getFullName() + " is invalid", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package org.bukkit.plugin;
|
package org.bukkit.plugin;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.Event.Priority;
|
import org.bukkit.event.Event.Priority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles all plugin management from the Server
|
* Handles all plugin management from the Server
|
||||||
@ -130,4 +132,30 @@ public interface PluginManager {
|
|||||||
* @param plugin Plugin to disable
|
* @param plugin Plugin to disable
|
||||||
*/
|
*/
|
||||||
public void disablePlugin(Plugin plugin);
|
public void disablePlugin(Plugin plugin);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a {@link Permission} from its fully qualified name
|
||||||
|
*
|
||||||
|
* @param name Name of the permission
|
||||||
|
* @return Permission, or null if none
|
||||||
|
*/
|
||||||
|
public 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
|
||||||
|
*/
|
||||||
|
public void addPermission(Permission perm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default permissions for the given op status
|
||||||
|
*
|
||||||
|
* @param op Which set of default permissions to get
|
||||||
|
*/
|
||||||
|
public Set<Permission> getDefaultPermissions(boolean op);
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,10 @@ import java.util.Set;
|
|||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
@ -25,6 +27,7 @@ import org.bukkit.command.SimpleCommandMap;
|
|||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.Event.Priority;
|
import org.bukkit.event.Event.Priority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
|
|
||||||
import org.bukkit.util.FileUtil;
|
import org.bukkit.util.FileUtil;
|
||||||
|
|
||||||
@ -39,6 +42,8 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
private final Map<Event.Type, SortedSet<RegisteredListener>> listeners = new EnumMap<Event.Type, SortedSet<RegisteredListener>>(Event.Type.class);
|
private final Map<Event.Type, SortedSet<RegisteredListener>> listeners = new EnumMap<Event.Type, SortedSet<RegisteredListener>>(Event.Type.class);
|
||||||
private static File updateDirectory = null;
|
private static File updateDirectory = null;
|
||||||
private final SimpleCommandMap commandMap;
|
private final SimpleCommandMap commandMap;
|
||||||
|
private final Map<String, Permission> permissions = new HashMap<String, Permission>();
|
||||||
|
private final Map<Boolean, Set<Permission>> defaultPerms = new LinkedHashMap<Boolean, Set<Permission>>();
|
||||||
private final Comparator<RegisteredListener> comparer = new Comparator<RegisteredListener>() {
|
private final Comparator<RegisteredListener> comparer = new Comparator<RegisteredListener>() {
|
||||||
public int compare(RegisteredListener i, RegisteredListener j) {
|
public int compare(RegisteredListener i, RegisteredListener j) {
|
||||||
int result = i.getPriority().compareTo(j.getPriority());
|
int result = i.getPriority().compareTo(j.getPriority());
|
||||||
@ -54,6 +59,9 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
public SimplePluginManager(Server instance, SimpleCommandMap commandMap) {
|
public SimplePluginManager(Server instance, SimpleCommandMap commandMap) {
|
||||||
server = instance;
|
server = instance;
|
||||||
this.commandMap = commandMap;
|
this.commandMap = commandMap;
|
||||||
|
|
||||||
|
defaultPerms.put(true, new HashSet<Permission>());
|
||||||
|
defaultPerms.put(false, new HashSet<Permission>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -303,6 +311,9 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
lookupNames.clear();
|
lookupNames.clear();
|
||||||
listeners.clear();
|
listeners.clear();
|
||||||
fileAssociations.clear();
|
fileAssociations.clear();
|
||||||
|
permissions.clear();
|
||||||
|
defaultPerms.get(true).clear();
|
||||||
|
defaultPerms.get(false).clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,4 +405,37 @@ public final class SimplePluginManager implements PluginManager {
|
|||||||
listeners.put(type, eventListeners);
|
listeners.put(type, eventListeners);
|
||||||
return eventListeners;
|
return eventListeners;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Permission getPermission(String name) {
|
||||||
|
return permissions.get(name.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPermission(Permission perm) {
|
||||||
|
String name = perm.getName().toLowerCase();
|
||||||
|
|
||||||
|
if (permissions.containsKey(name)) {
|
||||||
|
throw new IllegalArgumentException("The permission " + name + " is already defined!");
|
||||||
|
}
|
||||||
|
|
||||||
|
permissions.put(name, perm);
|
||||||
|
|
||||||
|
if (!perm.getChildren().isEmpty()) {
|
||||||
|
switch (perm.getDefault()) {
|
||||||
|
case TRUE:
|
||||||
|
defaultPerms.get(true).add(perm);
|
||||||
|
defaultPerms.get(false).add(perm);
|
||||||
|
break;
|
||||||
|
case OP:
|
||||||
|
defaultPerms.get(true).add(perm);
|
||||||
|
break;
|
||||||
|
case NOT_OP:
|
||||||
|
defaultPerms.get(false).add(perm);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Permission> getDefaultPermissions(boolean op) {
|
||||||
|
return defaultPerms.get(op);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -263,4 +263,9 @@ public abstract class JavaPlugin implements Plugin {
|
|||||||
|
|
||||||
gen.runScript(true, gen.generateDropDdl());
|
gen.runScript(true, gen.generateDropDdl());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getDescription().getFullName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren