Made help argument optionable (to support the NotSetup)

This commit is contained in:
Poslovitch 2017-05-31 17:06:10 +02:00
parent bafff8cdee
commit 0980ab8358
3 changed files with 51 additions and 64 deletions

View File

@ -7,7 +7,7 @@ import us.tastybento.bskyblock.BSkyBlock;
public class AdminCommand extends BSBCommand{ public class AdminCommand extends BSBCommand{
public AdminCommand(BSkyBlock plugin) { public AdminCommand(BSkyBlock plugin) {
super(plugin); super(plugin, true);
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }

View File

@ -13,7 +13,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter; import org.bukkit.command.TabCompleter;
import us.tastybento.bskyblock.BSkyBlock; import us.tastybento.bskyblock.BSkyBlock;
import us.tastybento.bskyblock.util.Util;
/** /**
* Abstract class that handles commands and tabs. It makes the commands code modular * Abstract class that handles commands and tabs. It makes the commands code modular
@ -23,56 +22,48 @@ import us.tastybento.bskyblock.util.Util;
*/ */
public abstract class BSBCommand implements CommandExecutor, TabCompleter{ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
private Map<String, CommandArgumentHandler> arguments; private Map<String, CommandArgumentHandler> arguments;
private boolean help;
protected BSBCommand(BSkyBlock plugin){
protected BSBCommand(BSkyBlock plugin, boolean help){
arguments = new HashMap<String, CommandArgumentHandler>(); arguments = new HashMap<String, CommandArgumentHandler>();
this.help = help;
// Automatically register the help argument
registerArgument(new String[] {"help", "?"}, new CommandArgumentHandler() { // Register a help argument if needed
if(help){
@Override registerArgument(new String[] {"help", "?"}, new CommandArgumentHandler() {
public boolean canExecute(CommandSender sender, String label, String[] args) {
return true; // If the player can execute the command, he can receive help @Override
} public boolean canExecute(CommandSender sender, String label, String[] args) {
return true; // If the player can execute the command, he can receive help
@Override
public void onExecute(CommandSender sender, String label, String[] args) {
// Generate help
String help = plugin.getLocale(sender).get("help.header") + "\n";
for(String argument : arguments.keySet()){
CommandArgumentHandler cah = getArgumentHandler(argument);
if(cah.canExecute(sender, label, args) && cah.getHelp(sender, label) != null) {
help += getHelpMessage(sender, label, argument, cah.getHelp(sender, label)) + "\n";
}
} }
//TODO: multiple pages @Override
public void onExecute(CommandSender sender, String label, String[] args) {
Util.sendMessage(sender, help); // TODO send help
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, String label, String[] args) { public List<String> onTabComplete(CommandSender sender, String label, String[] args) {
return null; // Doesn't have options for tab-completion return null; // Doesn't have options for tab-completion
} }
@Override @Override
public String[] getHelp(CommandSender sender, String label) { public String[] getHelp(CommandSender sender, String label) {
return null; // Obviously, don't send any help message. return null; // Obviously, don't send any help message.
} }
}); });
}
// Register other arguments // Register other arguments
setup(); setup();
} }
/** /**
* Setup the command arguments * Setup the command arguments
*/ */
public abstract void setup(); public abstract void setup();
/** /**
* Check if the sender can use the command * Check if the sender can use the command
* @param sender * @param sender
@ -80,7 +71,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
* @return if the sender can use the command * @return if the sender can use the command
*/ */
public abstract boolean canExecute(CommandSender sender, String label); public abstract boolean canExecute(CommandSender sender, String label);
/** /**
* This code is executed when no arguments is specified for the command * This code is executed when no arguments is specified for the command
* @param sender * @param sender
@ -88,17 +79,17 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
* @param args * @param args
*/ */
public abstract void onExecuteDefault(CommandSender sender, String label, String[] args); public abstract void onExecuteDefault(CommandSender sender, String label, String[] args);
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args){ public boolean onCommand(CommandSender sender, Command command, String label, String[] args){
if(this.canExecute(sender, label)){ if(this.canExecute(sender, label)){
if(args.length >= 1){ if(args.length >= 1){
if(arguments.get(args[0]) != null){ if(arguments.containsKey(args[0]) && arguments.get(args[0]).canExecute(sender, label, args)){
if(arguments.get(args[0]).canExecute(sender, label, args)){ arguments.get(args[0]).onExecute(sender, label, args);
arguments.get(args[0]).onExecute(sender, label, args); } else if(help) {
} arguments.get("?").onExecute(sender, label, args);
} else { } else {
arguments.get("help").onExecute(sender, label, args); this.onExecuteDefault(sender, label, args);
} }
} else { } else {
this.onExecuteDefault(sender, label, args); this.onExecuteDefault(sender, label, args);
@ -106,7 +97,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
} }
return true; return true;
} }
@Override @Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args){ public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args){
List<String> options = new ArrayList<String>(); List<String> options = new ArrayList<String>();
@ -128,7 +119,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
} }
return options; return options;
} }
public abstract class CommandArgumentHandler{ public abstract class CommandArgumentHandler{
/** /**
* Check if the sender can use the argument * Check if the sender can use the argument
@ -138,7 +129,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
* @return if the sender can use the argument * @return if the sender can use the argument
*/ */
public abstract boolean canExecute(CommandSender sender, String label, String[] args); public abstract boolean canExecute(CommandSender sender, String label, String[] args);
/** /**
* Code to execute for this argument * Code to execute for this argument
* @param sender * @param sender
@ -146,7 +137,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
* @param args * @param args
*/ */
public abstract void onExecute(CommandSender sender, String label, String[] args); public abstract void onExecute(CommandSender sender, String label, String[] args);
/** /**
* Request a list of tab-completion options with the argument * Request a list of tab-completion options with the argument
* @param sender * @param sender
@ -155,7 +146,7 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
* @return the list of options * @return the list of options
*/ */
public abstract List<String> onTabComplete(CommandSender sender, String label, String[] args); public abstract List<String> onTabComplete(CommandSender sender, String label, String[] args);
/** /**
* Get help information * Get help information
* <code>new String[] {arguments, description};</code> * <code>new String[] {arguments, description};</code>
@ -165,20 +156,16 @@ public abstract class BSBCommand implements CommandExecutor, TabCompleter{
*/ */
public abstract String[] getHelp(CommandSender sender, String label); public abstract String[] getHelp(CommandSender sender, String label);
} }
public void registerArgument(String[] args, CommandArgumentHandler handler){ public void registerArgument(String[] args, CommandArgumentHandler handler){
Arrays.asList(args).forEach(arg -> arguments.put(arg, handler)); Arrays.asList(args).forEach(arg -> arguments.put(arg, handler));
} }
public Map<String, CommandArgumentHandler> getArguments(){ public Map<String, CommandArgumentHandler> getArguments(){
return arguments; return arguments;
} }
public CommandArgumentHandler getArgumentHandler(String argument){ public CommandArgumentHandler getArgumentHandler(String argument){
return arguments.get(argument); return arguments.get(argument);
} }
public String getHelpMessage(CommandSender sender, String label, String argument, String[] helpData){
return ""; //TODO help
}
} }

View File

@ -22,7 +22,7 @@ public class IslandCommand extends BSBCommand{
private BSkyBlock plugin; private BSkyBlock plugin;
public IslandCommand(BSkyBlock plugin) { public IslandCommand(BSkyBlock plugin) {
super(plugin); super(plugin, true);
this.plugin = plugin; this.plugin = plugin;
} }
@ -310,7 +310,7 @@ public class IslandCommand extends BSBCommand{
// Explain command // Explain command
if(args.length == 1){ if(args.length == 1){
Util.sendMessage(player, getHelpMessage(player, label, args[0], getHelp(sender, label))); //TODO Util.sendMessage(player, getHelpMessage(player, label, args[0], getHelp(sender, label)));
return; return;
} }