From 386a98f88fe809e311e96dbfed2ea0105d74f545 Mon Sep 17 00:00:00 2001 From: Esophose Date: Thu, 16 Jan 2020 14:17:56 -0700 Subject: [PATCH] /ppo permissions switcheroo --- .../playerparticles/PlayerParticles.java | 3 +- .../command/ReloadCommandModule.java | 2 +- .../manager/LocaleManager.java | 6 +- .../manager/PermissionManager.java | 90 +++++++++++++------ .../particles/OtherPPlayer.java | 4 +- .../playerparticles/particles/PPlayer.java | 8 +- 6 files changed, 74 insertions(+), 39 deletions(-) diff --git a/src/main/java/dev/esophose/playerparticles/PlayerParticles.java b/src/main/java/dev/esophose/playerparticles/PlayerParticles.java index ea65d92..25b78f4 100644 --- a/src/main/java/dev/esophose/playerparticles/PlayerParticles.java +++ b/src/main/java/dev/esophose/playerparticles/PlayerParticles.java @@ -4,11 +4,10 @@ * * Convert fixed effect ids into names * + Add effect/style settings folder that lets you disable effects/style and edit style properties * + Add setting to disable particles while in combat - * + Add a command aliases section to the config - * * /ppo now uses your permissions instead of the player you are targetting */ /* + * * /ppo now uses your permissions instead of the player you are targetting * + Add effect/style name customization through config files * * Fixed the 'swords' style so you have to be holding a sword/trident * * Fixed several styles ignoring the disabled worlds setting diff --git a/src/main/java/dev/esophose/playerparticles/command/ReloadCommandModule.java b/src/main/java/dev/esophose/playerparticles/command/ReloadCommandModule.java index 0a5ce1d..8a336bd 100644 --- a/src/main/java/dev/esophose/playerparticles/command/ReloadCommandModule.java +++ b/src/main/java/dev/esophose/playerparticles/command/ReloadCommandModule.java @@ -15,7 +15,7 @@ public class ReloadCommandModule implements CommandModule { public void onCommandExecute(PPlayer pplayer, String[] args) { PlayerParticles playerParticles = PlayerParticles.getInstance(); LocaleManager localeManager = playerParticles.getManager(LocaleManager.class); - if (playerParticles.getManager(PermissionManager.class).canReloadPlugin(pplayer.getMessageDestination())) { + if (playerParticles.getManager(PermissionManager.class).canReloadPlugin(pplayer.getUnderlyingExecutor())) { playerParticles.reload(); ParticleEffect.reloadSettings(); DefaultStyles.reloadSettings(playerParticles.getManager(ParticleStyleManager.class)); diff --git a/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java b/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java index dda29e9..03b7b65 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java @@ -130,7 +130,7 @@ public class LocaleManager extends Manager { * @param stringPlaceholders The placeholders to apply */ public void sendMessage(PPlayer pplayer, String messageKey, StringPlaceholders stringPlaceholders) { - pplayer.getMessageDestination().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders))); + pplayer.getUnderlyingExecutor().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders))); } /** @@ -172,7 +172,7 @@ public class LocaleManager extends Manager { * @param stringPlaceholders The placeholders to apply */ public void sendSimpleMessage(PPlayer pplayer, String messageKey, StringPlaceholders stringPlaceholders) { - pplayer.getMessageDestination().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage(messageKey, stringPlaceholders))); + pplayer.getUnderlyingExecutor().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage(messageKey, stringPlaceholders))); } /** @@ -212,7 +212,7 @@ public class LocaleManager extends Manager { * @param message The message to send */ public void sendCustomMessage(PPlayer pplayer, String message) { - this.sendCustomMessage(pplayer.getMessageDestination(), this.parsePlaceholders(pplayer.getPlayer(), message)); + this.sendCustomMessage(pplayer.getUnderlyingExecutor(), this.parsePlaceholders(pplayer.getPlayer(), message)); } /** diff --git a/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java b/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java index a65cf51..a751d3d 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/PermissionManager.java @@ -2,12 +2,14 @@ package dev.esophose.playerparticles.manager; import dev.esophose.playerparticles.PlayerParticles; import dev.esophose.playerparticles.manager.ConfigurationManager.Setting; +import dev.esophose.playerparticles.particles.OtherPPlayer; 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.List; import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.Permissible; @@ -83,7 +85,11 @@ public class PermissionManager extends Manager { * @return If the player has reached the max number of particles in their active group */ public boolean hasPlayerReachedMaxParticles(PPlayer pplayer) { - if (PPermission.PARTICLES_UNLIMITED.check(pplayer.getPlayer())) + if (PPermission.PARTICLES_UNLIMITED.check(pplayer.getUnderlyingExecutor())) + return false; + + PPlayer executor = this.getUnderlyingExecutorAsPPlayer(pplayer); + if (executor != pplayer) return false; return pplayer.getActiveParticles().size() >= Setting.MAX_PARTICLES.getInt(); @@ -96,10 +102,14 @@ public class PermissionManager extends Manager { * @return If the player has reached the max number of saved particle groups */ public boolean hasPlayerReachedMaxGroups(PPlayer pplayer) { - if (PPermission.GROUPS_UNLIMITED.check(pplayer.getPlayer())) + if (PPermission.GROUPS_UNLIMITED.check(pplayer.getUnderlyingExecutor())) return false; - return pplayer.getParticleGroups().size() - 1 >= Setting.MAX_GROUPS.getInt(); + PPlayer executor = this.getUnderlyingExecutorAsPPlayer(pplayer); + if (executor != pplayer) + return false; + + return executor.getParticleGroups().size() - 1 >= Setting.MAX_GROUPS.getInt(); } /** @@ -109,7 +119,7 @@ public class PermissionManager extends Manager { * @return If the player has permission to save groups */ public boolean canPlayerSaveGroups(PPlayer pplayer) { - if (PPermission.GROUPS_UNLIMITED.check(pplayer.getPlayer())) + if (PPermission.GROUPS_UNLIMITED.check(pplayer.getUnderlyingExecutor())) return true; return Setting.MAX_GROUPS.getInt() != 0; @@ -122,7 +132,11 @@ public class PermissionManager extends Manager { * @return If the player has reached the max number of fixed effects */ public boolean hasPlayerReachedMaxFixedEffects(PPlayer pplayer) { - if (PPermission.FIXED_UNLIMITED.check(pplayer.getPlayer())) + if (PPermission.FIXED_UNLIMITED.check(pplayer.getUnderlyingExecutor())) + return false; + + PPlayer executor = this.getUnderlyingExecutorAsPPlayer(pplayer); + if (executor != pplayer) return false; return pplayer.getFixedEffectIds().size() >= Setting.MAX_FIXED_EFFECTS.getInt(); @@ -140,11 +154,15 @@ public class PermissionManager extends Manager { /** * Gets the maximum number of particles a player is allowed to use * - * @param player The player to check + * @param pplayer The pplayer to check * @return The maximum number of particles based on the config.yml value, or unlimited */ - public int getMaxParticlesAllowed(Player player) { - if (PPermission.PARTICLES_UNLIMITED.check(player)) + public int getMaxParticlesAllowed(PPlayer pplayer) { + if (PPermission.PARTICLES_UNLIMITED.check(pplayer.getUnderlyingExecutor())) + return Integer.MAX_VALUE; + + PPlayer executor = this.getUnderlyingExecutorAsPPlayer(pplayer); + if (executor != pplayer) return Integer.MAX_VALUE; return Setting.MAX_PARTICLES.getInt(); @@ -176,8 +194,8 @@ public class PermissionManager extends Manager { * @param effect The effect to check * @return True if the player has permission to use the effect */ - public boolean hasEffectPermission(Player player, ParticleEffect effect) { - return PPermission.EFFECT.check(player, effect.getInternalName()); + public boolean hasEffectPermission(PPlayer player, ParticleEffect effect) { + return PPermission.EFFECT.check(player.getUnderlyingExecutor(), effect.getInternalName()); } /** @@ -188,8 +206,8 @@ public class PermissionManager extends Manager { * @param style The style to check * @return If the player has permission to use the style */ - public boolean hasStylePermission(Player player, ParticleStyle style) { - return PPermission.STYLE.check(player, style.getInternalName()); + public boolean hasStylePermission(PPlayer player, ParticleStyle style) { + return PPermission.STYLE.check(player.getUnderlyingExecutor(), style.getInternalName()); } /** @@ -198,7 +216,7 @@ public class PermissionManager extends Manager { * @param p The player to get effect names for * @return A String List of all effect names the given player has permission for */ - public List getEffectNamesUserHasPermissionFor(Player p) { + public List getEffectNamesUserHasPermissionFor(PPlayer p) { List list = new ArrayList<>(); for (ParticleEffect pe : ParticleEffect.getEnabledEffects()) if (this.hasEffectPermission(p, pe)) @@ -212,7 +230,7 @@ public class PermissionManager extends Manager { * @param p The player to get style names for * @return A String List of all style names the given player has permission for */ - public List getStyleNamesUserHasPermissionFor(Player p) { + public List getStyleNamesUserHasPermissionFor(PPlayer p) { List list = new ArrayList<>(); for (ParticleStyle ps : this.playerParticles.getManager(ParticleStyleManager.class).getStyles()) if (this.hasStylePermission(p, ps)) @@ -226,7 +244,7 @@ public class PermissionManager extends Manager { * @param p The player to get style names for * @return A String List of all fixable style names the given player has permission for */ - public List getFixableStyleNamesUserHasPermissionFor(Player p) { + public List getFixableStyleNamesUserHasPermissionFor(PPlayer p) { List list = new ArrayList<>(); for (ParticleStyle ps : this.playerParticles.getManager(ParticleStyleManager.class).getStyles()) if (ps.canBeFixed() && this.hasStylePermission(p, ps)) @@ -240,7 +258,7 @@ public class PermissionManager extends Manager { * @param p The player to get effects for * @return A List of all effects the given player has permission for */ - public List getEffectsUserHasPermissionFor(Player p) { + public List getEffectsUserHasPermissionFor(PPlayer p) { List list = new ArrayList<>(); for (ParticleEffect pe : ParticleEffect.getEnabledEffects()) if (this.hasEffectPermission(p, pe)) @@ -254,7 +272,7 @@ public class PermissionManager extends Manager { * @param p The player to get styles for * @return A List of all styles the given player has permission for */ - public List getStylesUserHasPermissionFor(Player p) { + public List getStylesUserHasPermissionFor(PPlayer p) { List list = new ArrayList<>(); for (ParticleStyle ps : this.playerParticles.getManager(ParticleStyleManager.class).getStyles()) if (this.hasStylePermission(p, ps)) @@ -268,8 +286,8 @@ public class PermissionManager extends Manager { * @param player The player to check the permission for * @return True if the player has permission */ - public boolean canUseFixedEffects(Player player) { - return PPermission.FIXED.check(player); + public boolean canUseFixedEffects(PPlayer player) { + return PPermission.FIXED.check(player.getUnderlyingExecutor()); } /** @@ -278,8 +296,8 @@ public class PermissionManager extends Manager { * @param player The player to check the permission for * @return True if the player has permission to use /pp fixed clear */ - public boolean canClearFixedEffects(Player player) { - return PPermission.FIXED_CLEAR.check(player); + public boolean canClearFixedEffects(PPlayer player) { + return PPermission.FIXED_CLEAR.check(player.getUnderlyingExecutor()); } /** @@ -288,8 +306,8 @@ public class PermissionManager extends Manager { * @param player The player to check the permission for * @return True if the player has permission to use /pp fixed teleport */ - public boolean canTeleportToFixedEffects(Player player) { - return PPermission.FIXED_TELEPORT.check(player); + public boolean canTeleportToFixedEffects(PPlayer player) { + return PPermission.FIXED_TELEPORT.check(player.getUnderlyingExecutor()); } /** @@ -298,8 +316,8 @@ public class PermissionManager extends Manager { * @param player The player to check the permission for * @return True if the player has permission to open the GUI */ - public boolean canOpenGui(Player player) { - return PPermission.GUI.check(player); + public boolean canOpenGui(PPlayer player) { + return PPermission.GUI.check(player.getUnderlyingExecutor()); } /** @@ -319,10 +337,30 @@ public class PermissionManager extends Manager { * @return If the player can use /ppo */ public boolean canOverride(CommandSender sender) { - if (!(sender instanceof Player)) + if (this.isConsole(sender)) return true; return PPermission.OVERRIDE.check(sender); } + private boolean isConsole(PPlayer pplayer) { + return this.isConsole(pplayer.getUnderlyingExecutor()); + } + + private boolean isConsole(CommandSender sender) { + return sender instanceof ConsoleCommandSender; + } + + private PPlayer getUnderlyingExecutorAsPPlayer(PPlayer pplayer) { + if (pplayer instanceof OtherPPlayer) { + OtherPPlayer other = (OtherPPlayer) pplayer; + CommandSender executor = other.getUnderlyingExecutor(); + if (this.isConsole(executor)) + return null; + Player executingPlayer = (Player) executor; + return this.playerParticles.getManager(DataManager.class).getPPlayer(executingPlayer.getUniqueId()); + } + return pplayer; + } + } diff --git a/src/main/java/dev/esophose/playerparticles/particles/OtherPPlayer.java b/src/main/java/dev/esophose/playerparticles/particles/OtherPPlayer.java index e65d822..ea62313 100644 --- a/src/main/java/dev/esophose/playerparticles/particles/OtherPPlayer.java +++ b/src/main/java/dev/esophose/playerparticles/particles/OtherPPlayer.java @@ -21,9 +21,9 @@ public class OtherPPlayer extends PPlayer { } /** - * @return The CommandSender where messages should be sent to + * @return the underlying CommandSender who executed the command */ - public CommandSender getMessageDestination() { + public CommandSender getUnderlyingExecutor() { return this.sender; } diff --git a/src/main/java/dev/esophose/playerparticles/particles/PPlayer.java b/src/main/java/dev/esophose/playerparticles/particles/PPlayer.java index a011221..b45de08 100644 --- a/src/main/java/dev/esophose/playerparticles/particles/PPlayer.java +++ b/src/main/java/dev/esophose/playerparticles/particles/PPlayer.java @@ -65,20 +65,18 @@ public class PPlayer { } /** - * Gets the Player from their UUID - * - * @return The player if they are online, null if they are offline + * @return the underlying CommandSender who executed the command */ public Player getPlayer() { return Bukkit.getPlayer(this.playerUUID); } /** - * Gets the destination for messages + * Gets the underlying CommandSender who executed the command * * @return The destination for messages */ - public CommandSender getMessageDestination() { + public CommandSender getUnderlyingExecutor() { return this.getPlayer(); }