Skip to content

Commit

Permalink
Clean up code
Browse files Browse the repository at this point in the history
  • Loading branch information
Esophose committed Dec 16, 2018
1 parent a2d173d commit e5f5760
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 69 deletions.
Original file line number Diff line number Diff line change
@@ -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<String> onTabComplete(CommandSender sender, String[] args);

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public void onCommandExecute(PPlayer pplayer, String[] args) {
for (CommandModule cmd : cmds)
if (!(cmd instanceof DefaultCommandModule))
CommandModule.printUsageWithDescription(pplayer, cmd);
LangManager.sendSimpleMessage(pplayer, Lang.COMMAND_DESCRIPTIONS_HELP_OTHER);
}

public List<String> onTabComplete(PPlayer pplayer, String[] args) {
Expand Down
90 changes: 90 additions & 0 deletions src/com/esophose/playerparticles/command/OtherCommandModule.java
Original file line number Diff line number Diff line change
@@ -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<String> onTabComplete(CommandSender sender, String[] args) {
List<String> completions = new ArrayList<String>();

if (args.length < 2) {
List<String> playerNames = new ArrayList<String>();
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<String> 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;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,27 @@
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<CommandModule> commands;
private static CommandModuleSecondary ppoCommand;

static {
commands = new ArrayList<CommandModule>();
Expand All @@ -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();
}

/**
Expand Down Expand Up @@ -95,7 +97,7 @@ public static List<String> getCommandNames() {
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;
}

Expand All @@ -118,41 +120,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
}
});
} 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;
Expand Down Expand Up @@ -185,33 +153,7 @@ public List<String> onTabComplete(CommandSender sender, Command cmd, String alia
}
}
} else if (cmd.getName().equalsIgnoreCase("ppo")) {
List<String> completions = new ArrayList<String>();

if (args.length < 2) {
List<String> playerNames = new ArrayList<String>();
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<String> 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<String>();
Expand Down
2 changes: 1 addition & 1 deletion src/com/esophose/playerparticles/manager/LangManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public static enum Lang { // @formatter:off
COMMAND_DESCRIPTIONS_USAGE,
COMMAND_DESCRIPTIONS_HELP_1,
COMMAND_DESCRIPTIONS_HELP_2,
COMMAND_DESCRIPTIONS_HELP_OTHER,
COMMAND_DESCRIPTION_ADD,
COMMAND_DESCRIPTION_DATA,
COMMAND_DESCRIPTION_DEFAULT,
Expand All @@ -49,7 +50,6 @@ public static enum Lang { // @formatter:off
COMMAND_DESCRIPTION_TOGGLE,
COMMAND_DESCRIPTION_VERSION,
COMMAND_DESCRIPTION_WORLDS,
COMMAND_DESCRIPTION_OTHER,

// Sub-Command Usage
COMMAND_DESCRIPTION_FIXED_CREATE,
Expand Down
2 changes: 1 addition & 1 deletion src/lang/default.lang
Original file line number Diff line number Diff line change
Expand Up @@ -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 <player> <command> &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'
Expand All @@ -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 <<x> <y> <z>|<looking>> <effect> <style> [data] - Creates a new fixed effect'
Expand Down
2 changes: 1 addition & 1 deletion src/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ commands:
pp:
description: The main PlayerParticles command. By default, opens the GUI.
ppo:
description: The secondary PlayerParticles command. Used for modifying the particles of other players.
description: Allows executing a /pp command for another player.

0 comments on commit e5f5760

Please sign in to comment.