From e5f5760fb1bc83b5c5d4f88df82818a74e501683 Mon Sep 17 00:00:00 2001 From: Esophose Date: Sat, 15 Dec 2018 18:48:07 -0700 Subject: [PATCH] Clean up code --- .../command/CommandModuleSecondary.java | 26 ++++++ .../command/HelpCommandModule.java | 1 + .../command/OtherCommandModule.java | 90 +++++++++++++++++++ .../command/ParticleCommandHandler.java | 74 ++------------- .../playerparticles/manager/LangManager.java | 2 +- src/lang/default.lang | 2 +- src/plugin.yml | 2 +- 7 files changed, 128 insertions(+), 69 deletions(-) create mode 100644 src/com/esophose/playerparticles/command/CommandModuleSecondary.java create mode 100644 src/com/esophose/playerparticles/command/OtherCommandModule.java diff --git a/src/com/esophose/playerparticles/command/CommandModuleSecondary.java b/src/com/esophose/playerparticles/command/CommandModuleSecondary.java new file mode 100644 index 0000000..1f5040b --- /dev/null +++ b/src/com/esophose/playerparticles/command/CommandModuleSecondary.java @@ -0,0 +1,26 @@ +package com.esophose.playerparticles.command; + +import java.util.List; + +import org.bukkit.command.CommandSender; + +public interface CommandModuleSecondary { + + /** + * Called when this command gets executed + * + * @param sender The CommandSender who executed this command + * @param args The arguments to this command + */ + public void onCommandExecute(CommandSender sender, String[] args); + + /** + * Called when a player tries to tab complete this command + * + * @param sender The CommandSender who is tab completing this command + * @param args Arguments typed so far + * @return A list of possible argument values + */ + public List onTabComplete(CommandSender sender, String[] args); + +} diff --git a/src/com/esophose/playerparticles/command/HelpCommandModule.java b/src/com/esophose/playerparticles/command/HelpCommandModule.java index b22d0bc..b5b2705 100644 --- a/src/com/esophose/playerparticles/command/HelpCommandModule.java +++ b/src/com/esophose/playerparticles/command/HelpCommandModule.java @@ -15,6 +15,7 @@ public class HelpCommandModule implements CommandModule { for (CommandModule cmd : cmds) if (!(cmd instanceof DefaultCommandModule)) CommandModule.printUsageWithDescription(pplayer, cmd); + LangManager.sendSimpleMessage(pplayer, Lang.COMMAND_DESCRIPTIONS_HELP_OTHER); } public List onTabComplete(PPlayer pplayer, String[] args) { diff --git a/src/com/esophose/playerparticles/command/OtherCommandModule.java b/src/com/esophose/playerparticles/command/OtherCommandModule.java new file mode 100644 index 0000000..132351e --- /dev/null +++ b/src/com/esophose/playerparticles/command/OtherCommandModule.java @@ -0,0 +1,90 @@ +package com.esophose.playerparticles.command; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; + +import com.esophose.playerparticles.manager.DataManager; +import com.esophose.playerparticles.manager.LangManager; +import com.esophose.playerparticles.manager.LangManager.Lang; +import com.esophose.playerparticles.manager.PermissionManager; +import com.esophose.playerparticles.particles.OtherPPlayer; +import com.esophose.playerparticles.particles.PPlayer; + +public class OtherCommandModule implements CommandModuleSecondary { + + public void onCommandExecute(CommandSender sender, String[] args) { + if (!PermissionManager.canOverride(sender)) { + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_NO_PERMISSION); + return; + } + + if (args.length < 2) { + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_MISSING_ARGS); + return; + } + + Player other = Bukkit.getPlayer(args[0]); + if (other == null) { + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_UNKNOWN_PLAYER, args[0]); + return; + } + + CommandModule commandModule = ParticleCommandHandler.findMatchingCommand(args[1]); + if (commandModule == null) { + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_UNKNOWN_COMMAND, args[1]); + return; + } + + if (commandModule.requiresEffects() && PermissionManager.getEffectNamesUserHasPermissionFor(other).isEmpty()) { + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_SUCCESS, other.getName()); + LangManager.sendCommandSenderMessage(sender, Lang.COMMAND_ERROR_NO_EFFECTS); + return; + } + + DataManager.getPPlayer(other.getUniqueId(), (pplayer) -> { + OtherPPlayer otherPPlayer = new OtherPPlayer(sender, pplayer); + + LangManager.sendCommandSenderMessage(sender, Lang.OTHER_SUCCESS, other.getName()); + + String[] cmdArgs = Arrays.copyOfRange(args, 2, args.length); + commandModule.onCommandExecute(otherPPlayer, cmdArgs); + }); + } + + public List onTabComplete(CommandSender sender, String[] args) { + List completions = new ArrayList(); + + if (args.length < 2) { + List playerNames = new ArrayList(); + for (Player player : Bukkit.getOnlinePlayers()) + playerNames.add(player.getName()); + + if (args.length == 0) completions = playerNames; + else StringUtil.copyPartialMatches(args[0], playerNames, completions); + } else if (args.length == 2) { + List commandNames = ParticleCommandHandler.getCommandNames(); + StringUtil.copyPartialMatches(args[1], commandNames, completions); + } else { + Player otherPlayer = Bukkit.getPlayer(args[0]); + if (otherPlayer != null) { + PPlayer other = DataManager.getPPlayer(otherPlayer.getUniqueId()); + if (other != null) { + CommandModule commandModule = ParticleCommandHandler.findMatchingCommand(args[1]); + if (commandModule != null) { + String[] cmdArgs = Arrays.copyOfRange(args, 2, args.length); + completions = commandModule.onTabComplete(other, cmdArgs); + } + } + } + } + + return completions; + } + +} diff --git a/src/com/esophose/playerparticles/command/ParticleCommandHandler.java b/src/com/esophose/playerparticles/command/ParticleCommandHandler.java index 6925b1f..5fd2282 100644 --- a/src/com/esophose/playerparticles/command/ParticleCommandHandler.java +++ b/src/com/esophose/playerparticles/command/ParticleCommandHandler.java @@ -4,27 +4,27 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; import com.esophose.playerparticles.manager.DataManager; import com.esophose.playerparticles.manager.LangManager; import com.esophose.playerparticles.manager.LangManager.Lang; import com.esophose.playerparticles.manager.PermissionManager; -import com.esophose.playerparticles.particles.OtherPPlayer; import com.esophose.playerparticles.particles.PPlayer; +import net.md_5.bungee.api.ChatColor; + public class ParticleCommandHandler implements CommandExecutor, TabCompleter { /** * A list of all commands */ private static List commands; + private static CommandModuleSecondary ppoCommand; static { commands = new ArrayList(); @@ -46,6 +46,8 @@ public class ParticleCommandHandler implements CommandExecutor, TabCompleter { commands.add(new ToggleCommandModule()); commands.add(new VersionCommandModule()); commands.add(new WorldsCommandModule()); + + ppoCommand = new OtherCommandModule(); } /** @@ -95,7 +97,7 @@ public class ParticleCommandHandler implements CommandExecutor, TabCompleter { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (cmd.getName().equalsIgnoreCase("pp")) { if (!(sender instanceof Player)) { - sender.sendMessage("Error: PlayerParticles only supports players executing commands."); + sender.sendMessage(ChatColor.RED + "Error: This command can only be executed by a player."); return true; } @@ -118,41 +120,7 @@ public class ParticleCommandHandler implements CommandExecutor, TabCompleter { } }); } else if (cmd.getName().equalsIgnoreCase("ppo")) { - if (!PermissionManager.canOverride(sender)) { - LangManager.sendCommandSenderMessage(sender, Lang.OTHER_NO_PERMISSION); - return true; - } - - if (args.length < 2) { - LangManager.sendCommandSenderMessage(sender, Lang.OTHER_MISSING_ARGS); - return true; - } - - Player other = Bukkit.getPlayer(args[0]); - if (other == null) { - LangManager.sendCommandSenderMessage(sender, Lang.OTHER_UNKNOWN_PLAYER, args[0]); - return true; - } - - CommandModule commandModule = findMatchingCommand(args[1]); - if (commandModule == null) { - LangManager.sendCommandSenderMessage(sender, Lang.OTHER_UNKNOWN_COMMAND, args[1]); - return true; - } - - if (commandModule.requiresEffects() && PermissionManager.getEffectNamesUserHasPermissionFor(other).isEmpty()) { - LangManager.sendCommandSenderMessage(sender, Lang.COMMAND_ERROR_NO_EFFECTS); - return true; - } - - DataManager.getPPlayer(other.getUniqueId(), (pplayer) -> { - OtherPPlayer otherPPlayer = new OtherPPlayer(sender, pplayer); - - LangManager.sendCommandSenderMessage(sender, Lang.OTHER_SUCCESS, other.getName()); - - String[] cmdArgs = Arrays.copyOfRange(args, 2, args.length); - commandModule.onCommandExecute(otherPPlayer, cmdArgs); - }); + ppoCommand.onCommandExecute(sender, args); } return true; @@ -185,33 +153,7 @@ public class ParticleCommandHandler implements CommandExecutor, TabCompleter { } } } else if (cmd.getName().equalsIgnoreCase("ppo")) { - List completions = new ArrayList(); - - if (args.length < 2) { - List playerNames = new ArrayList(); - for (Player player : Bukkit.getOnlinePlayers()) - playerNames.add(player.getName()); - - if (args.length == 0) completions = playerNames; - else StringUtil.copyPartialMatches(args[0], playerNames, completions); - } else if (args.length == 2) { - List commandNames = ParticleCommandHandler.getCommandNames(); - StringUtil.copyPartialMatches(args[1], commandNames, completions); - } else { - Player otherPlayer = Bukkit.getPlayer(args[0]); - if (otherPlayer != null) { - PPlayer other = DataManager.getPPlayer(otherPlayer.getUniqueId()); - if (other != null) { - CommandModule commandModule = findMatchingCommand(args[1]); - if (commandModule != null) { - String[] cmdArgs = Arrays.copyOfRange(args, 2, args.length); - completions = commandModule.onTabComplete(other, cmdArgs); - } - } - } - } - - return completions; + return ppoCommand.onTabComplete(sender, args); } return new ArrayList(); diff --git a/src/com/esophose/playerparticles/manager/LangManager.java b/src/com/esophose/playerparticles/manager/LangManager.java index 0bf6cf4..48dab4c 100644 --- a/src/com/esophose/playerparticles/manager/LangManager.java +++ b/src/com/esophose/playerparticles/manager/LangManager.java @@ -31,6 +31,7 @@ public class LangManager { COMMAND_DESCRIPTIONS_USAGE, COMMAND_DESCRIPTIONS_HELP_1, COMMAND_DESCRIPTIONS_HELP_2, + COMMAND_DESCRIPTIONS_HELP_OTHER, COMMAND_DESCRIPTION_ADD, COMMAND_DESCRIPTION_DATA, COMMAND_DESCRIPTION_DEFAULT, @@ -49,7 +50,6 @@ public class LangManager { COMMAND_DESCRIPTION_TOGGLE, COMMAND_DESCRIPTION_VERSION, COMMAND_DESCRIPTION_WORLDS, - COMMAND_DESCRIPTION_OTHER, // Sub-Command Usage COMMAND_DESCRIPTION_FIXED_CREATE, diff --git a/src/lang/default.lang b/src/lang/default.lang index c9c5c80..30b957f 100644 --- a/src/lang/default.lang +++ b/src/lang/default.lang @@ -18,6 +18,7 @@ command-descriptions: '&eThe following commands are available:' command-descriptions-usage: '&e/pp {0} {1}' command-descriptions-help-1: '&7> &b/pp {0} &e- {1}' command-descriptions-help-2: '&7> &b/pp {0} {1} &e- {2}' +command-descriptions-help-other: '&7> &b/ppo &e- Run a /pp command as a player' command-description-add: 'Add a new particle' command-description-data: 'Check what type of data an effect uses' command-description-default: 'The main command. By default, opens the GUI' @@ -36,7 +37,6 @@ command-description-styles: 'Display a list of styles you can use' command-description-toggle: 'Toggles particle visibility on/off' command-description-version: 'Display the plugin version and author' command-description-worlds: 'Find out what worlds particles are disabled in' -command-description-other: 'Execute a /pp command for another player' # Sub-Command Usage command-description-fixed-create: '&e/pp fixed create < |>