diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:23 +0100 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:23 +0100 |
commit | 44587e49ff1840219d9bc44844d4a3a6cd8ac5de (patch) | |
tree | 276ae9625795e9d79fc7db8592dbcb3a1af60928 /dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java | |
parent | 5e168847c2624b767deb9da310ecfdf169e0f43c (diff) |
Add dicore3-command
Diffstat (limited to 'dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java')
-rw-r--r-- | dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java new file mode 100644 index 0000000..7c0bc9d --- /dev/null +++ b/dicore3/command/src/main/java/io/dico/dicore/command/chat/help/defaults/SyntaxHelpTopic.java @@ -0,0 +1,74 @@ +package io.dico.dicore.command.chat.help.defaults; + +import io.dico.dicore.command.Command; +import io.dico.dicore.command.EMessageType; +import io.dico.dicore.command.ExecutionContext; +import io.dico.dicore.command.ICommandAddress; +import io.dico.dicore.command.chat.Formatting; +import io.dico.dicore.command.chat.help.IHelpComponent; +import io.dico.dicore.command.chat.help.IHelpTopic; +import io.dico.dicore.command.chat.help.SimpleHelpComponent; +import io.dico.dicore.command.parameter.Parameter; +import io.dico.dicore.command.parameter.ParameterList; +import org.bukkit.permissions.Permissible; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class SyntaxHelpTopic implements IHelpTopic { + + @Override + public List<IHelpComponent> getComponents(ICommandAddress target, Permissible viewer, ExecutionContext context) { + if (!target.hasCommand()) { + return Collections.emptyList(); + } + + String line = context.getFormat(EMessageType.SYNTAX) + "Syntax: " + + context.getFormat(EMessageType.INSTRUCTION) + target.getAddress() + + ' ' + getShortSyntax(target, context); + + return Collections.singletonList(new SimpleHelpComponent(line)); + } + + private static String getShortSyntax(ICommandAddress target, ExecutionContext ctx) { + StringBuilder syntax = new StringBuilder(); + if (target.hasCommand()) { + Formatting syntaxColor = ctx.getFormat(EMessageType.SYNTAX); + Formatting highlight = ctx.getFormat(EMessageType.HIGHLIGHT); + syntax.append(syntaxColor); + + Command command = target.getCommand(); + ParameterList list = command.getParameterList(); + Parameter<?, ?> repeated = list.getRepeatedParameter(); + + int requiredCount = list.getRequiredCount(); + List<Parameter<?, ?>> indexedParameters = list.getIndexedParameters(); + for (int i = 0, n = indexedParameters.size(); i < n; i++) { + syntax.append(i < requiredCount ? " <" : " ["); + Parameter<?, ?> param = indexedParameters.get(i); + syntax.append(param.getName()); + if (param == repeated) { + syntax.append(highlight).append("...").append(syntaxColor); + } + syntax.append(i < requiredCount ? '>' : ']'); + } + + Map<String, Parameter<?, ?>> parametersByName = list.getParametersByName(); + for (Parameter<?, ?> param : parametersByName.values()) { + if (param.isFlag()) { + syntax.append(" [").append(param.getName()); + if (param.expectsInput()) { + syntax.append(" <").append(param.getName()).append(">"); + } + syntax.append(']'); + } + } + + } else { + syntax.append(' '); + } + return syntax.toString(); + } + +} |