mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-15 12:13:54 -07:00
@@ -6,6 +6,10 @@ import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
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.constructor.SafeConstructor;
|
||||
|
||||
@@ -25,6 +29,7 @@ public final class PluginDescriptionFile {
|
||||
private String website = null;
|
||||
private boolean database = false;
|
||||
private PluginLoadOrder order = PluginLoadOrder.POSTWORLD;
|
||||
private ArrayList<Permission> permissions = new ArrayList<Permission>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException {
|
||||
@@ -138,6 +143,10 @@ public final class PluginDescriptionFile {
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
public ArrayList<Permission> getPermissions() {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
private void loadMap(Map<String, Object> map) throws InvalidDescriptionException {
|
||||
try {
|
||||
name = map.get("name").toString();
|
||||
@@ -247,6 +256,16 @@ public final class PluginDescriptionFile {
|
||||
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() {
|
||||
@@ -282,4 +301,16 @@ public final class PluginDescriptionFile {
|
||||
|
||||
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;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Event.Priority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.permissions.Permission;
|
||||
|
||||
/**
|
||||
* Handles all plugin management from the Server
|
||||
@@ -130,4 +132,30 @@ public interface PluginManager {
|
||||
* @param plugin Plugin to disable
|
||||
*/
|
||||
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.TreeSet;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.logging.Level;
|
||||
import java.util.regex.Matcher;
|
||||
import org.bukkit.Server;
|
||||
@@ -25,6 +27,7 @@ import org.bukkit.command.SimpleCommandMap;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.Event.Priority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.permissions.Permission;
|
||||
|
||||
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 static File updateDirectory = null;
|
||||
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>() {
|
||||
public int compare(RegisteredListener i, RegisteredListener j) {
|
||||
int result = i.getPriority().compareTo(j.getPriority());
|
||||
@@ -54,6 +59,9 @@ public final class SimplePluginManager implements PluginManager {
|
||||
public SimplePluginManager(Server instance, SimpleCommandMap commandMap) {
|
||||
server = instance;
|
||||
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();
|
||||
listeners.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);
|
||||
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());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getDescription().getFullName();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user