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.HashMap;
import java.util.Map; 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.plugin.InvalidDescriptionException;
import org.bukkit.util.permissions.DefaultPermissions;
import us.tastybento.bskyblock.BSkyBlock; import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.api.addons.AddonDescription.AddonDescriptionBuilder; 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; import us.tastybento.bskyblock.managers.AddonsManager;
/** /**
* Loads addons and sets up permissions
* @author Tastybento, ComminQ * @author Tastybento, ComminQ
*/ */
public class AddonClassLoader extends URLClassLoader { public class AddonClassLoader extends URLClassLoader {
@ -24,7 +30,7 @@ public class AddonClassLoader extends URLClassLoader {
private Addon addon; private Addon addon;
private AddonsManager loader; 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, throws InvalidAddonInheritException,
MalformedURLException, MalformedURLException,
InvalidAddonFormatException, InvalidAddonFormatException,
@ -37,13 +43,9 @@ public class AddonClassLoader extends URLClassLoader {
Class<?> javaClass = null; Class<?> javaClass = null;
try { try {
//Bukkit.getLogger().info("data " + data.get("main")); String mainClass = data.getString("main");
/* javaClass = Class.forName(mainClass, true, this);
for (Entry<String, String> en : data.entrySet()) { if(mainClass.contains("us.tastybento")){
Bukkit.getLogger().info(en.getKey() + " => " + en.getValue());
}*/
javaClass = Class.forName(data.get("main"), true, this);
if(data.get("main").contains("us.tastybento")){
throw new InvalidAddonFormatException("Packages declaration cannot start with 'us.tastybento'"); throw new InvalidAddonFormatException("Packages declaration cannot start with 'us.tastybento'");
} }
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
@ -60,14 +62,31 @@ public class AddonClassLoader extends URLClassLoader {
addon = addonClass.newInstance(); addon = addonClass.newInstance();
addon.setDescription(asDescription(data)); 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){ private void registerPermission(ConfigurationSection perms, String perm) {
String[] authors = data.get("authors").split("\\,"); 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")) private AddonDescription asDescription(YamlConfiguration data){
.withVersion(data.get("version")) return new AddonDescriptionBuilder(data.getString("name"))
.withAuthor(authors).build(); .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 java.util.jar.JarFile;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.plugin.InvalidDescriptionException; import org.bukkit.plugin.InvalidDescriptionException;
@ -113,8 +114,9 @@ public final class AddonsManager {
// Open a reader to the jar // Open a reader to the jar
BufferedReader reader = new BufferedReader(new InputStreamReader(jar.getInputStream(entry))); BufferedReader reader = new BufferedReader(new InputStreamReader(jar.getInputStream(entry)));
// Grab the description in the addon.yml file // 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 // Load the addon
AddonClassLoader loader = new AddonClassLoader(this, data, f, this.getClass().getClassLoader()); AddonClassLoader loader = new AddonClassLoader(this, data, f, this.getClass().getClassLoader());
// Add to the list of loaders // 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 * Disable all the enabled addons
*/ */