Skip to content

Commit

Permalink
Add GlobalParser for Argumento.class
Browse files Browse the repository at this point in the history
  • Loading branch information
EverNife committed Jun 27, 2024
1 parent ed0d6d1 commit 7aba4e1
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package br.com.finalcraft.evernifecore.commands.finalcmd;

import br.com.finalcraft.evernifecore.EverNifeCore;
import br.com.finalcraft.evernifecore.argumento.Argumento;
import br.com.finalcraft.evernifecore.commands.finalcmd.accessvalidation.CMDAccessValidation;
import br.com.finalcraft.evernifecore.commands.finalcmd.annotations.FinalCMD;
import br.com.finalcraft.evernifecore.commands.finalcmd.annotations.data.CMDData;
Expand Down Expand Up @@ -44,6 +45,7 @@ public class FinalCMDManager {
static {
//The ArgParsers bellow will be available to all ECPlugins
//Needs to be registered here because we need them for plugins that load before EverNifeCore
ArgParserManager.addGlobalParser(Argumento.class, ArgParserArgumento.class);
ArgParserManager.addGlobalParser(String.class, ArgParserString.class);
ArgParserManager.addGlobalParser(Integer.class, ArgParserNumber.class);
ArgParserManager.addGlobalParser(Float.class, ArgParserNumber.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package br.com.finalcraft.evernifecore.commands.finalcmd.argument.parsers;

import br.com.finalcraft.evernifecore.argumento.Argumento;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgInfo;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.ArgParser;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.exception.ArgParseException;
import br.com.finalcraft.evernifecore.commands.finalcmd.argument.parsers.util.ArgsParserUtil;
import br.com.finalcraft.evernifecore.util.FCMessageUtil;
import com.google.common.collect.ImmutableList;
import org.apache.commons.lang3.Validate;
import org.bukkit.command.CommandSender;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.stream.Collectors;

public class ArgParserArgumento extends ArgParser<Argumento> {

private final List<String> possibilities;

public ArgParserArgumento(ArgInfo argInfo) {
super(argInfo);

//If context is empty, take the name for it
String context = argInfo.getArgData().getContext().isEmpty()
? argInfo.getArgData().getName()
: argInfo.getArgData().getContext();

possibilities = ImmutableList.copyOf(ArgsParserUtil.parseStringContextSelectional(context));

Validate.isTrue(possibilities.size() > 0, "Can't create a ArgParserString without at least one option! [context=='" + context + "']");
}

@Override
public Argumento parserArgument(@NotNull CommandSender sender, @NotNull Argumento argumento) throws ArgParseException {

if (possibilities.size() == 1){
return argumento.isEmpty() ? null : argumento;
}

for (String option : possibilities) {
if (option.equalsIgnoreCase(argumento.toString())){
return new Argumento(option);
}
}

if (argInfo.isRequired()){
FCMessageUtil.notWithinPossibilities(sender, argumento.toString(), possibilities);
throw new ArgParseException();
}

return Argumento.EMPTY_ARG;
}

@Override
public @NotNull List<String> tabComplete(TabContext tabContext) {

return possibilities.stream()
.filter(s -> StringUtil.startsWithIgnoreCase(s, tabContext.getLastWord()))
.sorted(String.CASE_INSENSITIVE_ORDER)
.collect(Collectors.toList());

}
}

0 comments on commit 7aba4e1

Please sign in to comment.