Add Mson support to HelpCommand
This commit is contained in:
parent
a364395042
commit
43b0e32e5e
@ -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 = "<b>You don't have permission to <h>%s<b>.";
|
||||
@ -11,8 +16,9 @@ public class Lang
|
||||
public static final String COMMAND_TOO_FEW_ARGS = "<b>Not enough command input. <i>You should use it like this:";
|
||||
public static final String COMMAND_TOO_MANY_ARGS = "<b>Too much command input %s<b>.";
|
||||
public static final String COMMAND_TOO_MANY_ARGS2 = "<i>You should use the command like this:";
|
||||
public static final String COMMAND_NO_SUCH_SUB = "<b>Couldn't find the command <c>%s";
|
||||
public static final String COMMAND_SUGGEST_SUB = "<i>Maybe you could try %s";
|
||||
public static final String COMMAND_GET_HELP = "<i>Use %s <i>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 = "<h>%d <b>tab completions available. Be more specific and try again.";
|
||||
}
|
||||
|
@ -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<T>
|
||||
{
|
||||
@ -176,13 +179,22 @@ public class ArgSetting<T>
|
||||
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;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
@ -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<String> lines = new ArrayList<String>();
|
||||
List<Mson> lines = new ArrayList<Mson>();
|
||||
for (String helpline : parentCommand.getHelp())
|
||||
{
|
||||
lines.add(Txt.parse("<a>#<i> " + helpline));
|
||||
lines.add(Mson.parse("<a>#<i> " + 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
|
||||
|
@ -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<MassiveCommand> getCommandChain() { return this.commandChain; }
|
||||
public void setCommandChain(List<MassiveCommand> commandChain) { this.commandChain = commandChain; }
|
||||
|
||||
// Adds command to tree structure
|
||||
public void addToCommandChain(MassiveCommand command)
|
||||
{
|
||||
this.commandChain.add(0, command);
|
||||
|
||||
List<MassiveCommand> cmds = this.getSubCommands();
|
||||
|
||||
for (MassiveCommand cmd : cmds)
|
||||
{
|
||||
cmd.addToCommandChain(command);
|
||||
}
|
||||
}
|
||||
|
||||
public MassiveCommand getParentCommand()
|
||||
{
|
||||
List<MassiveCommand> commandChain = this.getCommandChain();
|
||||
@ -772,15 +785,15 @@ public class MassiveCommand
|
||||
// Try Levenshtein
|
||||
List<String> 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, "<i>, <c>", " <i>or <c>"));
|
||||
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<MassiveCommand> commandChain, boolean addDesc, boolean onlyFirstAlias, CommandSender sender)
|
||||
{
|
||||
StringBuilder ret = new StringBuilder();
|
||||
public static final Mson USAGE_TEMPLATE_CORE = Mson.mson("/").color(ChatColor.AQUA);
|
||||
|
||||
public Mson getUseageTemplate(List<MassiveCommand> commandChain, boolean addDesc, boolean onlyFirstAlias, CommandSender sender)
|
||||
{
|
||||
// Create Ret
|
||||
Mson ret = USAGE_TEMPLATE_CORE;
|
||||
List<Mson> extra = new ArrayList<Mson>();
|
||||
|
||||
ret = ret.tooltip(Txt.parse("<i>Click to <c>%s<i>", this.getCommandLine()));
|
||||
|
||||
// Get commandchain
|
||||
List<MassiveCommand> commands = new ArrayList<MassiveCommand>(commandChain);
|
||||
commands.add(this);
|
||||
|
||||
String commandGoodColor = Txt.parse("<c>");
|
||||
String commandBadColor = Txt.parse("<bad>");
|
||||
|
||||
ret.append(commandGoodColor);
|
||||
ret.append('/');
|
||||
|
||||
// Add commands
|
||||
boolean first = true;
|
||||
Iterator<MassiveCommand> 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<String> 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("<p>"));
|
||||
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("<i>"));
|
||||
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<String> getArgUseagesFor(CommandSender sender)
|
||||
protected List<Mson> getArgUseagesFor(CommandSender sender)
|
||||
{
|
||||
List<String> ret = new MassiveList<String>();
|
||||
List<Mson> ret = new MassiveList<Mson>();
|
||||
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<String, String> 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<MassiveCommand> commandChain, boolean addDesc, boolean onlyFirstAlias)
|
||||
public Mson getUseageTemplate(List<MassiveCommand> commandChain, boolean addDesc, boolean onlyFirstAlias)
|
||||
{
|
||||
return getUseageTemplate(commandChain, addDesc, onlyFirstAlias, sender);
|
||||
}
|
||||
|
||||
public String getUseageTemplate(List<MassiveCommand> commandChain, boolean addDesc)
|
||||
public Mson getUseageTemplate(List<MassiveCommand> 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<String> getTabCompletions(List<String> 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");
|
||||
|
||||
|
@ -34,7 +34,7 @@ public class MassiveCoreBukkitCommand extends Command implements PluginIdentifia
|
||||
super(
|
||||
name,
|
||||
massiveCommand.getDesc(),
|
||||
massiveCommand.getUseageTemplate(),
|
||||
massiveCommand.getUseageTemplate().toPlain(true),
|
||||
Collections.<String>emptyList() // We don't use aliases
|
||||
);
|
||||
this.massiveCommand = massiveCommand;
|
||||
|
@ -40,6 +40,8 @@ public class Mson implements Serializable
|
||||
public static final LowercaseEnumAdapter<ChatColor> ADAPTER_LOWERCASE_CHAT_COLOR = LowercaseEnumAdapter.get(ChatColor.class);
|
||||
public static final LowercaseEnumAdapter<MsonEventAction> ADAPTER_LOWERCASE_MSON_EVENT_ACTION = LowercaseEnumAdapter.get(MsonEventAction.class);
|
||||
|
||||
public static final transient Mson SPACE = mson(" ");
|
||||
|
||||
// -------------------------------------------- //
|
||||
// GSON
|
||||
// -------------------------------------------- //
|
||||
|
Loading…
Reference in New Issue
Block a user