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.");
|
plugin.log("Addons successfully enabled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPerms(Addon addon) {
|
boolean setPerms(Addon addon) {
|
||||||
ConfigurationSection perms = addon.getDescription().getPermissions();
|
ConfigurationSection perms = addon.getDescription().getPermissions();
|
||||||
perms.getKeys(true).stream().filter(perm -> perms.contains(perm + DEFAULT) && perms.contains(perm + ".description"))
|
if (perms == null) return false;
|
||||||
.forEach(perm -> {
|
for (String perm : perms.getKeys(true)) {
|
||||||
try {
|
// Only try to register perms for end nodes
|
||||||
registerPermission(perms, perm);
|
if (perms.contains(perm + DEFAULT) && perms.contains(perm + ".description")) {
|
||||||
} catch (InvalidAddonDescriptionException e) {
|
try {
|
||||||
plugin.logError("Addon " + addon.getDescription().getName() + ": " + e.getMessage());
|
registerPermission(perms, perm);
|
||||||
|
} catch (InvalidAddonDescriptionException e) {
|
||||||
|
plugin.logError("Addon " + addon.getDescription().getName() + ": " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerPermission(ConfigurationSection perms, String perm) throws InvalidAddonDescriptionException {
|
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));
|
PermissionDefault pd = PermissionDefault.getByName(perms.getString(perm + DEFAULT));
|
||||||
if (pd == null) {
|
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");
|
String desc = perms.getString(perm + ".description");
|
||||||
// Replace placeholders for Game Mode Addon names
|
// Replace placeholders for Game Mode Addon names
|
||||||
|
@ -350,6 +350,71 @@ public class AddonsManagerTest {
|
|||||||
assertFalse(am.isAddonCompatibleWithBentoBox(addon, "1.11.1"));
|
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)}
|
* Test method for {@link world.bentobox.bentobox.managers.AddonsManager#registerPermission(org.bukkit.configuration.ConfigurationSection, String)}
|
||||||
* @throws InvalidAddonDescriptionException
|
* @throws InvalidAddonDescriptionException
|
||||||
|
Loading…
Reference in New Issue
Block a user