Now reads addon.yml as a YAML file

Also imports level 1 permissions, i.e., does not handle children.
This commit is contained in:
Tastybento 2018-04-05 18:56:48 -07:00
parent 0a9e9c2916
commit a95e869cc9
2 changed files with 36 additions and 29 deletions

View File

@ -7,7 +7,12 @@ import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.InvalidDescriptionException;
import org.bukkit.util.permissions.DefaultPermissions;
import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.api.addons.AddonDescription.AddonDescriptionBuilder;
@ -16,6 +21,7 @@ import us.tastybento.bskyblock.api.addons.exception.InvalidAddonInheritException
import us.tastybento.bskyblock.managers.AddonsManager;
/**
* Loads addons and sets up permissions
* @author Tastybento, ComminQ
*/
public class AddonClassLoader extends URLClassLoader {
@ -24,7 +30,7 @@ public class AddonClassLoader extends URLClassLoader {
private Addon addon;
private AddonsManager loader;
public AddonClassLoader(AddonsManager addonsManager, Map<String, String>data, File path, ClassLoader parent)
public AddonClassLoader(AddonsManager addonsManager, YamlConfiguration data, File path, ClassLoader parent)
throws InvalidAddonInheritException,
MalformedURLException,
InvalidAddonFormatException,
@ -37,13 +43,9 @@ public class AddonClassLoader extends URLClassLoader {
Class<?> javaClass = null;
try {
//Bukkit.getLogger().info("data " + data.get("main"));
/*
for (Entry<String, String> en : data.entrySet()) {
Bukkit.getLogger().info(en.getKey() + " => " + en.getValue());
}*/
javaClass = Class.forName(data.get("main"), true, this);
if(data.get("main").contains("us.tastybento")){
String mainClass = data.getString("main");
javaClass = Class.forName(mainClass, true, this);
if(mainClass.contains("us.tastybento")){
throw new InvalidAddonFormatException("Packages declaration cannot start with 'us.tastybento'");
}
} catch (ClassNotFoundException e) {
@ -60,14 +62,31 @@ public class AddonClassLoader extends URLClassLoader {
addon = addonClass.newInstance();
addon.setDescription(asDescription(data));
// Set permissions
if (data.isConfigurationSection("permissions")) {
ConfigurationSection perms = data.getConfigurationSection("permissions");
perms.getKeys(true).forEach(perm -> {
if (perms.contains(perm + ".default") && perms.contains(perm + ".description")) {
registerPermission(perms, perm);
}
});
}
}
private AddonDescription asDescription(Map<String, String> data){
String[] authors = data.get("authors").split("\\,");
private void registerPermission(ConfigurationSection perms, String perm) {
PermissionDefault pd = PermissionDefault.getByName(perms.getString(perm + ".default"));
if (pd == null) {
Bukkit.getLogger().severe("Permission default is invalid : " + perms.getName());
return;
}
String desc = perms.getString(perm + ".description");
DefaultPermissions.registerPermission(perm, desc, pd);
}
return new AddonDescriptionBuilder(data.get("name"))
.withVersion(data.get("version"))
.withAuthor(authors).build();
private AddonDescription asDescription(YamlConfiguration data){
return new AddonDescriptionBuilder(data.getString("name"))
.withVersion(data.getString("version"))
.withAuthor(data.getString("authors")).build();
}

View File

@ -14,6 +14,7 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.plugin.InvalidDescriptionException;
@ -113,8 +114,9 @@ public final class AddonsManager {
// Open a reader to the jar
BufferedReader reader = new BufferedReader(new InputStreamReader(jar.getInputStream(entry)));
// Grab the description in the addon.yml file
Map<String, String> data = data(reader);
//Map<String, String> data = data(reader);
YamlConfiguration data = new YamlConfiguration();
data.load(reader);
// Load the addon
AddonClassLoader loader = new AddonClassLoader(this, data, f, this.getClass().getClassLoader());
// Add to the list of loaders
@ -154,20 +156,6 @@ public final class AddonsManager {
}
private Map<String, String> data(BufferedReader reader) {
Map<String, String> map = new HashMap<>();
reader.lines().forEach(string -> {
if (DEBUG) {
Bukkit.getLogger().info("DEBUG: " + string);
}
String[] data = string.split("\\: ");
if (data.length > 1) {
map.put(data[0], data[1].substring(0, data[1].length()));
}
});
return map;
}
/**
* Disable all the enabled addons
*/