mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-29 23:27:30 +02:00
Fixes issue where addon has no perms in addon.yml
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/1312
This commit is contained in:
parent
17186dd791
commit
e381d61c3c
@ -170,25 +170,26 @@ public class AddonsManager {
|
||||
plugin.log("Addons successfully enabled.");
|
||||
}
|
||||
|
||||
void setPerms(Addon addon) {
|
||||
boolean setPerms(Addon addon) {
|
||||
ConfigurationSection perms = addon.getDescription().getPermissions();
|
||||
perms.getKeys(true).stream().filter(perm -> perms.contains(perm + DEFAULT) && perms.contains(perm + ".description"))
|
||||
.forEach(perm -> {
|
||||
if (perms == null) return false;
|
||||
for (String perm : perms.getKeys(true)) {
|
||||
// Only try to register perms for end nodes
|
||||
if (perms.contains(perm + DEFAULT) && perms.contains(perm + ".description")) {
|
||||
try {
|
||||
registerPermission(perms, perm);
|
||||
} catch (InvalidAddonDescriptionException e) {
|
||||
plugin.logError("Addon " + addon.getDescription().getName() + ": " + e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void registerPermission(ConfigurationSection perms, String perm) throws InvalidAddonDescriptionException {
|
||||
if (perms.getString(perm + DEFAULT) == null) {
|
||||
throw new InvalidAddonDescriptionException("Permission default is invalid : " + perm + DEFAULT);
|
||||
}
|
||||
PermissionDefault pd = PermissionDefault.getByName(perms.getString(perm + DEFAULT));
|
||||
if (pd == null) {
|
||||
throw new InvalidAddonDescriptionException("Permission default is invalid : " + perm + DEFAULT);
|
||||
throw new InvalidAddonDescriptionException("Permission default is invalid in addon.yml: " + perm + DEFAULT);
|
||||
}
|
||||
String desc = perms.getString(perm + ".description");
|
||||
// Replace placeholders for Game Mode Addon names
|
||||
|
@ -350,6 +350,71 @@ public class AddonsManagerTest {
|
||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
|
||||
* @throws InvalidAddonDescriptionException
|
||||
* @throws InvalidConfigurationException
|
||||
*/
|
||||
@Test
|
||||
public void testSetPermsNoPerms() {
|
||||
Addon addon = mock(Addon.class);
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "Addon-name", "1.0.0").apiVersion("1.11.1.0.0.0.1").build();
|
||||
when(addon.getDescription()).thenReturn(addonDesc);
|
||||
assertFalse(am.setPerms(addon));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
|
||||
* @throws InvalidAddonDescriptionException
|
||||
* @throws InvalidConfigurationException
|
||||
*/
|
||||
@Test
|
||||
public void testSetPermsHasPerms() throws InvalidConfigurationException {
|
||||
String perms =
|
||||
" '[gamemode].intopten':\n" +
|
||||
" description: Player is in the top ten.\n" +
|
||||
" default: true\n";
|
||||
YamlConfiguration config = new YamlConfiguration();
|
||||
config.loadFromString(perms);
|
||||
GameModeAddon addon = new MyGameMode();
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "mygame", "1.0.0").apiVersion("1.11.1.0.0.0.1")
|
||||
.permissions(config)
|
||||
.build();
|
||||
addon.setDescription(addonDesc);
|
||||
addon.setState(State.ENABLED);
|
||||
am.getAddons().add(addon);
|
||||
|
||||
assertTrue(am.setPerms(addon));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#setPerms(Addon)}
|
||||
* @throws InvalidAddonDescriptionException
|
||||
* @throws InvalidConfigurationException
|
||||
*/
|
||||
@Test
|
||||
public void testSetPermsHasPermsError() throws InvalidConfigurationException {
|
||||
String perms =
|
||||
" '[gamemode].intopten':\n" +
|
||||
" description: Player is in the top ten.\n" +
|
||||
" default: trudsfgsde\n";
|
||||
YamlConfiguration config = new YamlConfiguration();
|
||||
config.loadFromString(perms);
|
||||
GameModeAddon addon = new MyGameMode();
|
||||
AddonDescription addonDesc = new AddonDescription.Builder("main.class", "mygame", "1.0.0").apiVersion("1.11.1.0.0.0.1")
|
||||
.permissions(config)
|
||||
.build();
|
||||
addon.setDescription(addonDesc);
|
||||
addon.setState(State.ENABLED);
|
||||
am.getAddons().add(addon);
|
||||
|
||||
assertTrue(am.setPerms(addon));
|
||||
verify(plugin).logError(eq("Addon mygame: AddonException : Permission default is invalid in addon.yml: [gamemode].intopten.default"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#registerPermission(org.bukkit.configuration.ConfigurationSection, String)}
|
||||
* @throws InvalidAddonDescriptionException
|
||||
|
Loading…
Reference in New Issue
Block a user