Skip to content

Commit

Permalink
Added help generator
Browse files Browse the repository at this point in the history
  • Loading branch information
vaperion committed Jul 12, 2021
1 parent d708e13 commit 8340764
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 4 deletions.
5 changes: 5 additions & 0 deletions src/main/java/me/vaperion/blade/Blade.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import me.vaperion.blade.command.argument.ProviderAnnotation;
import me.vaperion.blade.command.bindings.Binding;
import me.vaperion.blade.command.container.ContainerCreator;
import me.vaperion.blade.command.help.HelpGenerator;
import me.vaperion.blade.command.service.BladeCommandService;
import me.vaperion.blade.completer.TabCompleter;
import org.jetbrains.annotations.NotNull;
Expand All @@ -25,6 +26,7 @@ public class Blade {
private final String fallbackPrefix;
private final ContainerCreator<?> containerCreator;
private final TabCompleter tabCompleter;
private final HelpGenerator helpGenerator;

@Singular("bind0") private final Map<Map.Entry<Class<?>, Class<? extends ProviderAnnotation>>, BladeProvider<?>> customProviderMap;
@Singular private final List<Binding> bindings;
Expand Down Expand Up @@ -64,6 +66,9 @@ public Blade build() {
if (blade.tabCompleter != null)
blade.commandService.setTabCompleter(blade.tabCompleter);

if (blade.helpGenerator != null)
blade.commandService.setHelpGenerator(blade.helpGenerator);

for (Binding binding : blade.bindings) {
binding.bind(blade.commandService);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.stream.Collectors;

@Getter
public class BukkitCommandContainer extends Command implements ICommandContainer {
Expand Down Expand Up @@ -195,9 +196,24 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String alias, @No
String resolvedAlias = alias;

try {
String[] joined = joinAliasToArgs(alias, args);
String joinedStr = String.join(" ", joined);

Tuple<BladeCommand, String> resolved = resolveCommand(joinAliasToArgs(alias, args));
if (resolved == null) throw new BladeExitMessage("This command failed to execute as we couldn't find it's registration.");
BladeContext context = new BladeContext(new BukkitSender(sender), alias, args);

Tuple<BladeCommand, String> resolved = resolveCommand(joined);
if (resolved == null) {
List<BladeCommand> availableCommands = commandService.getAllBladeCommands()
.stream().filter(c -> Arrays.stream(c.getAliases()).anyMatch(a -> a.toLowerCase().startsWith(joinedStr)))
.filter(c -> this.checkPermission(sender, c).getLeft())
.collect(Collectors.toList());

for (String line : commandService.getHelpGenerator().generate(context, availableCommands)) {
sender.sendMessage(line);
}

return true;
}

Tuple<Boolean, String> permissionResult = checkPermission(sender, resolved.getLeft());
if (!permissionResult.getLeft()) throw new BladeExitMessage(permissionResult.getRight());
Expand All @@ -206,8 +222,6 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String alias, @No
resolvedAlias = resolved.getRight();
int offset = Math.min(args.length, resolvedAlias.split(" ").length - 1);

BladeContext context = new BladeContext(new BukkitSender(sender), alias, args);

if (command.isSenderParameter() && !command.getSenderType().isInstance(sender))
throw new BladeExitMessage("This command can only be executed by " + getSenderType(command.getSenderType()) + ".");

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/me/vaperion/blade/command/help/HelpGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package me.vaperion.blade.command.help;

import me.vaperion.blade.command.container.BladeCommand;
import me.vaperion.blade.command.context.BladeContext;
import org.jetbrains.annotations.NotNull;

import java.util.List;

@FunctionalInterface
public interface HelpGenerator {
@NotNull
List<String> generate(@NotNull BladeContext context, @NotNull List<BladeCommand> commands);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package me.vaperion.blade.command.help.impl;

import me.vaperion.blade.command.container.BladeCommand;
import me.vaperion.blade.command.context.BladeContext;
import me.vaperion.blade.command.exception.BladeExitMessage;
import me.vaperion.blade.command.help.HelpGenerator;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class DefaultHelpGenerator implements HelpGenerator {

@NotNull
@Override
public List<String> generate(@NotNull BladeContext context, @NotNull List<BladeCommand> commands) {
throw new BladeExitMessage("This command failed to execute as we couldn't find it's registration.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@
import me.vaperion.blade.command.container.BladeProviderContainer;
import me.vaperion.blade.command.container.ContainerCreator;
import me.vaperion.blade.command.container.ICommandContainer;
import me.vaperion.blade.command.help.HelpGenerator;
import me.vaperion.blade.command.help.impl.DefaultHelpGenerator;
import me.vaperion.blade.completer.TabCompleter;
import me.vaperion.blade.completer.impl.DefaultTabCompleter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.stream.Collectors;

public class BladeCommandService {

Expand All @@ -27,6 +30,7 @@ public class BladeCommandService {
@Setter @Getter private String fallbackPrefix = "blade";
@Setter @Getter private ContainerCreator<?> containerCreator = ContainerCreator.NONE;
@Setter @Getter private TabCompleter tabCompleter = new DefaultTabCompleter();
@Setter @Getter private HelpGenerator helpGenerator = new DefaultHelpGenerator();

@Getter private final BladeCommandRegistrar commandRegistrar = new BladeCommandRegistrar(this);
@Getter private final BladeCommandResolver commandResolver = new BladeCommandResolver(this);
Expand All @@ -37,6 +41,11 @@ public BladeCommandService() {
new DefaultBindings().bind(this);
}

@NotNull
public List<BladeCommand> getAllBladeCommands() {
return Collections.unmodifiableList(this.aliasCommands.values().stream().flatMap(List::stream).collect(Collectors.toList()));
}

@NotNull
public Map<String, ICommandContainer> getRegisteredCommands() {
return Collections.unmodifiableMap(this.containerMap);
Expand Down

0 comments on commit 8340764

Please sign in to comment.