From 43b0e32e5e1a9ffa9751df931753631745ffd799 Mon Sep 17 00:00:00 2001 From: ulumulu1510 Date: Fri, 4 Sep 2015 18:15:47 +0200 Subject: [PATCH] Add Mson support to HelpCommand --- src/com/massivecraft/massivecore/Lang.java | 12 +- .../massivecore/cmd/ArgSetting.java | 22 +++- .../massivecore/cmd/HelpCommand.java | 13 +- .../massivecore/cmd/MassiveCommand.java | 117 +++++++++++------- .../cmd/MassiveCoreBukkitCommand.java | 2 +- .../massivecraft/massivecore/mson/Mson.java | 2 + 6 files changed, 104 insertions(+), 64 deletions(-) diff --git a/src/com/massivecraft/massivecore/Lang.java b/src/com/massivecraft/massivecore/Lang.java index 6efab92f..fd824bf7 100644 --- a/src/com/massivecraft/massivecore/Lang.java +++ b/src/com/massivecraft/massivecore/Lang.java @@ -1,5 +1,10 @@ package com.massivecraft.massivecore; +import org.bukkit.ChatColor; + +import com.massivecraft.massivecore.mson.Mson; +import static com.massivecraft.massivecore.mson.Mson.mson; + public class Lang { public static final String PERM_DEFAULT_DENIED_FORMAT = "You don't have permission to %s."; @@ -11,8 +16,9 @@ public class Lang public static final String COMMAND_TOO_FEW_ARGS = "Not enough command input. You should use it like this:"; public static final String COMMAND_TOO_MANY_ARGS = "Too much command input %s."; public static final String COMMAND_TOO_MANY_ARGS2 = "You should use the command like this:"; - public static final String COMMAND_NO_SUCH_SUB = "Couldn't find the command %s"; - public static final String COMMAND_SUGGEST_SUB = "Maybe you could try %s"; - public static final String COMMAND_GET_HELP = "Use %s to see commands."; + public static final Mson COMMAND_REPLACEMENT = mson("REPLACEMENT"); + public static final Mson COMMAND_NO_SUCH_SUB = mson("Couldn't find the command ", COMMAND_REPLACEMENT).color(ChatColor.YELLOW); + public static final Mson COMMAND_SUGGEST_SUB = mson("Maybe you could try ", COMMAND_REPLACEMENT).color(ChatColor.YELLOW); + public static final Mson COMMAND_GET_HELP = mson("Use ", COMMAND_REPLACEMENT, " to see commands.").color(ChatColor.YELLOW); public static final String COMMAND_TOO_MANY_TAB_SUGGESTIONS = "%d tab completions available. Be more specific and try again."; } diff --git a/src/com/massivecraft/massivecore/cmd/ArgSetting.java b/src/com/massivecraft/massivecore/cmd/ArgSetting.java index 7f524fa7..1253e38f 100644 --- a/src/com/massivecraft/massivecore/cmd/ArgSetting.java +++ b/src/com/massivecraft/massivecore/cmd/ArgSetting.java @@ -1,10 +1,13 @@ package com.massivecraft.massivecore.cmd; +import static com.massivecraft.massivecore.mson.Mson.mson; + import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.massivecraft.massivecore.cmd.arg.AR; import com.massivecraft.massivecore.cmd.arg.ARInteger; +import com.massivecraft.massivecore.mson.Mson; public class ArgSetting { @@ -176,13 +179,22 @@ public class ArgSetting return ! this.isRequiredFor(sender); } - public String getUseageTemplateDisplayFor(CommandSender sender) + public Mson getUseageTemplateDisplayFor(CommandSender sender) { - if (this.isRequiredFor(sender)) return "<" + this.getName() + ">"; + Mson ret; - String def = this.getDefaultDesc(); - def = (def != null ? "=" + def : ""); - return "[" + this.getName() + def + "]"; + if (this.isRequiredFor(sender)) + { + ret = mson("<" + this.getName() + ">"); + } + else + { + String def = this.getDefaultDesc(); + def = (def != null ? "=" + def : ""); + ret = mson("[" + this.getName() + def + "]"); + } + + return ret; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/cmd/HelpCommand.java b/src/com/massivecraft/massivecore/cmd/HelpCommand.java index 99e3aab7..604beaca 100644 --- a/src/com/massivecraft/massivecore/cmd/HelpCommand.java +++ b/src/com/massivecraft/massivecore/cmd/HelpCommand.java @@ -1,9 +1,10 @@ package com.massivecraft.massivecore.cmd; import java.util.ArrayList; +import java.util.List; import com.massivecraft.massivecore.MassiveException; -import com.massivecraft.massivecore.cmd.MassiveCommand; +import com.massivecraft.massivecore.mson.Mson; import com.massivecraft.massivecore.util.Txt; public class HelpCommand extends MassiveCommand @@ -41,18 +42,16 @@ public class HelpCommand extends MassiveCommand MassiveCommand parentCommand = this.getParentCommand(); // Create Lines - ArrayList lines = new ArrayList(); + List lines = new ArrayList(); for (String helpline : parentCommand.getHelp()) { - lines.add(Txt.parse("# " + helpline)); + lines.add(Mson.parse("# " + helpline)); } for (MassiveCommand subCommand : parentCommand.getSubCommands()) { - if (subCommand.isVisibleTo(sender)) - { - lines.add(subCommand.getUseageTemplate(this.getCommandChain(), true, true, sender)); - } + if ( ! subCommand.isVisibleTo(sender)) continue; + lines.add(subCommand.getUseageTemplate(this.getCommandChain(), true, true, sender)); } // Send Lines diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java b/src/com/massivecraft/massivecore/cmd/MassiveCommand.java index 7c49d6e0..fad1cdfe 100644 --- a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java +++ b/src/com/massivecraft/massivecore/cmd/MassiveCommand.java @@ -12,6 +12,7 @@ import java.util.Map.Entry; import java.util.Set; import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -131,8 +132,7 @@ public class MassiveCommand public void addSubCommand(MassiveCommand subCommand, int index) { - subCommand.commandChain.addAll(this.commandChain); - subCommand.commandChain.add(this); + subCommand.addToCommandChain(this); this.subCommands.add(index, subCommand); } @@ -465,6 +465,19 @@ public class MassiveCommand public List getCommandChain() { return this.commandChain; } public void setCommandChain(List commandChain) { this.commandChain = commandChain; } + // Adds command to tree structure + public void addToCommandChain(MassiveCommand command) + { + this.commandChain.add(0, command); + + List cmds = this.getSubCommands(); + + for (MassiveCommand cmd : cmds) + { + cmd.addToCommandChain(command); + } + } + public MassiveCommand getParentCommand() { List commandChain = this.getCommandChain(); @@ -772,15 +785,15 @@ public class MassiveCommand // Try Levenshtein List matches = this.getSimilarSubcommandAliases(arg, this.getMaxLevenshteinDistanceForArg(arg)); - Mixin.msgOne(sender, Lang.COMMAND_NO_SUCH_SUB, this.getUseageTemplate() + " " + arg); + Mixin.messageOne(sender, Lang.COMMAND_NO_SUCH_SUB.replaceAll(Lang.COMMAND_REPLACEMENT, this.getUseageTemplate(false).suggest(this, arg))); if ( ! matches.isEmpty()) { String suggest = Txt.parse(Txt.implodeCommaAnd(matches, ", ", " or ")); - Mixin.msgOne(sender, Lang.COMMAND_SUGGEST_SUB, this.getUseageTemplate() + " " + suggest); + Mixin.messageOne(sender, Lang.COMMAND_SUGGEST_SUB.replaceAll(Lang.COMMAND_REPLACEMENT, this.getUseageTemplate(false).suggest(this, suggest))); } else { - Mixin.msgOne(sender, Lang.COMMAND_GET_HELP, this.getUseageTemplate()); + Mixin.messageOne(sender, Lang.COMMAND_GET_HELP.replaceAll(Lang.COMMAND_REPLACEMENT, this.getUseageTemplate(false).suggest(this))); } } @@ -852,72 +865,80 @@ public class MassiveCommand // HELP AND USAGE INFORMATION // -------------------------------------------- // - public String getUseageTemplate(List commandChain, boolean addDesc, boolean onlyFirstAlias, CommandSender sender) + public static final Mson USAGE_TEMPLATE_CORE = Mson.mson("/").color(ChatColor.AQUA); + + public Mson getUseageTemplate(List commandChain, boolean addDesc, boolean onlyFirstAlias, CommandSender sender) { - StringBuilder ret = new StringBuilder(); + // Create Ret + Mson ret = USAGE_TEMPLATE_CORE; + List extra = new ArrayList(); + ret = ret.tooltip(Txt.parse("Click to %s", this.getCommandLine())); + + // Get commandchain List commands = new ArrayList(commandChain); commands.add(this); - String commandGoodColor = Txt.parse(""); - String commandBadColor = Txt.parse(""); - - ret.append(commandGoodColor); - ret.append('/'); - + // Add commands boolean first = true; - Iterator iter = commands.iterator(); - while(iter.hasNext()) + for (MassiveCommand command : commands) { - MassiveCommand mc = iter.next(); - if (sender != null && !mc.isRequirementsMet(sender, false)) - { - ret.append(commandBadColor); - } - else - { - ret.append(commandGoodColor); - } + Mson mson = null; if (first && onlyFirstAlias) { - ret.append(mc.getAliases().get(0)); + mson = mson(command.getAliases().get(0)); } else { - ret.append(Txt.implode(mc.getAliases(), ",")); + mson = mson(Txt.implode(command.getAliases(), ",")); } - if (iter.hasNext()) + if (sender != null && ! command.isRequirementsMet(sender, false)) { - ret.append(' '); + mson = mson.color(ChatColor.RED); + } + else + { + mson = mson.color(ChatColor.AQUA); } + if ( ! first) extra.add(Mson.SPACE); + extra.add(mson); first = false; } - - List args = this.getArgUseagesFor(sender); - - if (args.size() > 0) + + // Check if last command is parentCommand and make command suggestable/clickable + if (commands.get(commands.size() - 1).isParentCommand()) { - ret.append(Txt.parse("

")); - ret.append(' '); - ret.append(Txt.implode(args, " ")); + ret = ret.command(this); + } + else + { + ret = ret.suggest(this); } + // Add args + for (Mson arg : this.getArgUseagesFor(sender)) + { + extra.add(Mson.SPACE); + extra.add(arg.color(ChatColor.DARK_AQUA)); + } + + // Add desc if (addDesc) { - ret.append(' '); - ret.append(Txt.parse("")); - ret.append(this.getDesc()); + extra.add(Mson.SPACE); + extra.add(mson(this.getDesc()).color(ChatColor.YELLOW)); } - return ret.toString(); + // Return Ret + return ret.extra(extra); } - protected List getArgUseagesFor(CommandSender sender) + protected List getArgUseagesFor(CommandSender sender) { - List ret = new MassiveList(); + List ret = new MassiveList(); if (this.isUsingNewArgSystem()) { for (ArgSetting setting : this.getArgSettings()) @@ -929,7 +950,7 @@ public class MassiveCommand { for (String requiredArg : this.getRequiredArgs()) { - ret.add("<" + requiredArg + ">"); + ret.add(mson("<" + requiredArg + ">")); } for (Entry optionalArg : this.getOptionalArgs().entrySet()) @@ -943,29 +964,29 @@ public class MassiveCommand { val = "=" + val; } - ret.add("[" + optionalArg.getKey() + val + "]"); + ret.add(mson("[" + optionalArg.getKey() + val + "]")); } } return ret; } - public String getUseageTemplate(List commandChain, boolean addDesc, boolean onlyFirstAlias) + public Mson getUseageTemplate(List commandChain, boolean addDesc, boolean onlyFirstAlias) { return getUseageTemplate(commandChain, addDesc, onlyFirstAlias, sender); } - public String getUseageTemplate(List commandChain, boolean addDesc) + public Mson getUseageTemplate(List commandChain, boolean addDesc) { return getUseageTemplate(commandChain, addDesc, false); } - public String getUseageTemplate(boolean addDesc) + public Mson getUseageTemplate(boolean addDesc) { return getUseageTemplate(this.getCommandChain(), addDesc); } - public String getUseageTemplate() + public Mson getUseageTemplate() { return getUseageTemplate(false); } @@ -1015,7 +1036,7 @@ public class MassiveCommand public List getTabCompletions(List args, CommandSender sender) { - if (args == null) throw new IllegalArgumentException("args was mull"); + if (args == null) throw new NullPointerException("args"); if (sender == null) throw new IllegalArgumentException("sender was null"); if (args.isEmpty()) throw new IllegalArgumentException("args was empty"); diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java b/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java index f0f01221..bab6a5ad 100644 --- a/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java +++ b/src/com/massivecraft/massivecore/cmd/MassiveCoreBukkitCommand.java @@ -34,7 +34,7 @@ public class MassiveCoreBukkitCommand extends Command implements PluginIdentifia super( name, massiveCommand.getDesc(), - massiveCommand.getUseageTemplate(), + massiveCommand.getUseageTemplate().toPlain(true), Collections.emptyList() // We don't use aliases ); this.massiveCommand = massiveCommand; diff --git a/src/com/massivecraft/massivecore/mson/Mson.java b/src/com/massivecraft/massivecore/mson/Mson.java index 2fd6186d..a8bfa20e 100644 --- a/src/com/massivecraft/massivecore/mson/Mson.java +++ b/src/com/massivecraft/massivecore/mson/Mson.java @@ -40,6 +40,8 @@ public class Mson implements Serializable public static final LowercaseEnumAdapter ADAPTER_LOWERCASE_CHAT_COLOR = LowercaseEnumAdapter.get(ChatColor.class); public static final LowercaseEnumAdapter ADAPTER_LOWERCASE_MSON_EVENT_ACTION = LowercaseEnumAdapter.get(MsonEventAction.class); + public static final transient Mson SPACE = mson(" "); + // -------------------------------------------- // // GSON // -------------------------------------------- //