From e994c49bb1a9968175bff2d5946f3175db19157d Mon Sep 17 00:00:00 2001 From: Esophose Date: Fri, 17 Jan 2020 00:03:20 -0700 Subject: [PATCH] Register plugin permissions with Bukkit --- .../playerparticles/PlayerParticles.java | 2 +- .../manager/PermissionManager.java | 60 +++++++++++- src/main/resources/plugin.yml | 10 +- src/main/resources/preset_groups.yml | 96 +++++++++---------- 4 files changed, 113 insertions(+), 55 deletions(-) diff --git a/src/main/java/dev/esophose/playerparticles/PlayerParticles.java b/src/main/java/dev/esophose/playerparticles/PlayerParticles.java index cfdb0c7..9d00e38 100644 --- a/src/main/java/dev/esophose/playerparticles/PlayerParticles.java +++ b/src/main/java/dev/esophose/playerparticles/PlayerParticles.java @@ -2,10 +2,10 @@ * TODO: v7.0 * + Add ability to create/manage fixed effects from the GUI * * Convert fixed effect ids into names - * + Add effect/style settings folder that lets you disable effects/style and edit style properties */ /* + * + Added effect/style settings folder that lets you disable effects/style and edit style properties * + Added setting to disable particles while in combat * * /ppo now uses your permissions instead of the player you are targetting * + Added effect/style name customization through config files diff --git a/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java b/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java index a751d3d..81e4ee2 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java @@ -7,11 +7,18 @@ import dev.esophose.playerparticles.particles.PPlayer; import dev.esophose.playerparticles.particles.ParticleEffect; import dev.esophose.playerparticles.styles.ParticleStyle; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.Permissible; +import org.bukkit.permissions.Permission; +import org.bukkit.plugin.PluginManager; public class PermissionManager extends Manager { @@ -54,7 +61,7 @@ public class PermissionManager extends Manager { /** * Checks if a Permissible has a PlayerParticles permission with a sub-permission * - * @param p The Permissibhle + * @param p The Permissible * @param subPermission The sub-permission * @return True if the Player has permission */ @@ -66,6 +73,57 @@ public class PermissionManager extends Manager { public PermissionManager(PlayerParticles playerParticles) { super(playerParticles); + + // Register plugin permissions to Bukkit + PluginManager pluginManager = Bukkit.getPluginManager(); + + Set allPermissions = new HashSet<>(); + + // Effects + Map effectPermissions = new HashMap<>(); + for (ParticleEffect effect : ParticleEffect.values()) { + Permission permission = new Permission("playerparticles.effect." + effect.getInternalName()); + pluginManager.addPermission(permission); + effectPermissions.put(permission.getName(), true); + } + + // Effects Wildcard + allPermissions.add(new Permission("playerparticles.effect.*", effectPermissions)); + + // Styles + List styles = this.playerParticles.getManager(ParticleStyleManager.class).getStylesWithDisabled(); + Map stylePermissions = new HashMap<>(); + for (ParticleStyle style : styles) { + Permission permission = new Permission("playerparticles.style." + style.getInternalName()); + pluginManager.addPermission(permission); + stylePermissions.put(permission.getName(), true); + } + + // Styles Wildcard + allPermissions.add(new Permission("playerparticles.style.*", stylePermissions)); + + // Fixed + pluginManager.addPermission(new Permission("playerparticles.fixed")); + pluginManager.addPermission(new Permission("playerparticles.fixed.unlimited")); + pluginManager.addPermission(new Permission("playerparticles.fixed.clear")); + pluginManager.addPermission(new Permission("playerparticles.fixed.teleport")); + + // Misc + pluginManager.addPermission(new Permission("playerparticles.reload")); + pluginManager.addPermission(new Permission("playerparticles.override")); + pluginManager.addPermission(new Permission("playerparticles.gui")); + pluginManager.addPermission(new Permission("playerparticles.particles.unlimited")); + pluginManager.addPermission(new Permission("playerparticles.groups.unlimited")); + + // Register all non-child permissions + Map childPermissions = new HashMap<>(); + for (Permission permission : allPermissions) { + pluginManager.addPermission(permission); + childPermissions.put(permission.getName(), true); + } + + // Register all permissions as a child to the global plugin permission + pluginManager.addPermission(new Permission("playerparticles.*", childPermissions)); } @Override diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a868b16..7118881 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,8 +7,8 @@ author: Esophose website: https://www.spigotmc.org/resources/playerparticles.40261/ softdepend: [PlaceholderAPI] commands: - pp: - description: The main PlayerParticles command. By default, opens the GUI. - ppo: - description: Allows executing a /pp command for another player. - permission: playerparticles.other + pp: + description: The main PlayerParticles command. By default, opens the GUI. + ppo: + description: Allows executing a /pp command for another player. + permission: playerparticles.override diff --git a/src/main/resources/preset_groups.yml b/src/main/resources/preset_groups.yml index 345c9cd..93fff39 100644 --- a/src/main/resources/preset_groups.yml +++ b/src/main/resources/preset_groups.yml @@ -14,18 +14,18 @@ # # Use the following format for adding new groups: # group-name: -# display-name: 'My Amazing Group' -# gui-icon: 'ENDER_CHEST' -# permission: 'playerparticles.group.group-name' -# allow-permission-override: true -# 1: -# effect: 'dust' -# style: 'wings' -# data: '255 255 255' -# 2: -# effect: 'cloud' -# style: 'overhead' -# data: '' +# display-name: 'My Amazing Group' +# gui-icon: 'ENDER_CHEST' +# permission: 'playerparticles.group.group-name' +# allow-permission-override: true +# 1: +# effect: 'dust' +# style: 'wings' +# data: '255 255 255' +# 2: +# effect: 'cloud' +# style: 'overhead' +# data: '' # # What everything means: # group-name: The name of the group, how it will be applied by using /pp group load . @@ -42,41 +42,41 @@ # https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html raincloud: - display-name: 'Raincloud' - gui-icon: 'ENDER_CHEST' - permission: '' - allow-permission-override: false - 1: - effect: 'cloud' - style: 'overhead' - data: '' - 2: - effect: 'rain' - style: 'overhead' - data: '' + display-name: 'Raincloud' + gui-icon: 'ENDER_CHEST' + permission: '' + allow-permission-override: false + 1: + effect: 'cloud' + style: 'overhead' + data: '' + 2: + effect: 'rain' + style: 'overhead' + data: '' rainbows: - display-name: 'Rainbows' - gui-icon: 'ENDER_CHEST' - permission: '' - allow-permission-override: false - 1: - effect: 'dust' - style: 'orbit' - data: 'rainbow' - 2: - effect: 'entity_effect' - style: 'feet' - data: 'rainbow' + display-name: 'Rainbows' + gui-icon: 'ENDER_CHEST' + permission: '' + allow-permission-override: false + 1: + effect: 'dust' + style: 'orbit' + data: 'rainbow' + 2: + effect: 'entity_effect' + style: 'feet' + data: 'rainbow' angel: - display-name: 'Angel' - gui-icon: 'ENDER_CHEST' - permission: '' - allow-permission-override: false - 1: - effect: 'dust' - style: 'wings' - data: '255 255 255' - 2: - effect: 'dust' - style: 'halo' - data: '255 255 0' + display-name: 'Angel' + gui-icon: 'ENDER_CHEST' + permission: '' + allow-permission-override: false + 1: + effect: 'dust' + style: 'wings' + data: '255 255 255' + 2: + effect: 'dust' + style: 'halo' + data: '255 255 0'