mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-10-05 18:17:32 +02:00
Now reads addon.yml as a YAML file
Also imports level 1 permissions, i.e., does not handle children.
This commit is contained in:
parent
0a9e9c2916
commit
a95e869cc9
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user