Skip to content

Commit 086ce74

Browse files
author
damt
committed
[+] Fixed sub-commands not executing, and added getSubCommand(String[]) method
1 parent aa9298f commit 086ce74

File tree

4 files changed

+69
-17
lines changed

4 files changed

+69
-17
lines changed

src/main/java/xyz/damt/command/command/Command.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.lang.reflect.Method;
1717
import java.util.ArrayList;
18+
import java.util.Arrays;
1819
import java.util.LinkedList;
1920
import java.util.List;
2021

@@ -37,6 +38,7 @@ public class Command {
3738
private final List<CommandParameter> commandParameters = new ArrayList<>();
3839

3940
private boolean player;
41+
private boolean subCommand;
4042
private String permission, permissionMessage;
4143

4244
/**
@@ -64,6 +66,32 @@ public Command(Object object, String name, String[] aliases, Method method, Stri
6466
this.commandExecutor = new CommandExecutor(this);
6567
}
6668

69+
/**
70+
* Gets a sub command
71+
*
72+
* @param args arguments
73+
* @return {@link Command}
74+
*/
75+
76+
public final Command getSubCommand(String[] args) {
77+
for (Command command : subCommands) {
78+
String[] commandArg = command.getName().split(" ");
79+
80+
List<String> strings = new ArrayList<>(Arrays.asList(commandArg));
81+
List<String> argsList = new ArrayList<>(Arrays.asList(args));
82+
83+
strings.removeIf(s -> !argsList.contains(s));
84+
85+
commandArg = strings.toArray(new String[0]);
86+
87+
if (commandArg.length != 0 && commandArg[commandArg.length - 1].equalsIgnoreCase(args[args.length - 1])) {
88+
return command;
89+
}
90+
}
91+
92+
return null;
93+
}
94+
6795
/**
6896
* Executes the command
6997
*
@@ -72,11 +100,11 @@ public Command(Object object, String name, String[] aliases, Method method, Stri
72100
*/
73101

74102
@SneakyThrows
75-
public void execute(CommandSender commandSender, String[] args) {
103+
public void execute(CommandSender commandSender, String[] args, boolean skip) {
76104

77105
if (async) {
78106
CommandHandler.getInstance().getJavaPlugin().getServer().getScheduler()
79-
.runTaskAsynchronously(CommandHandler.getInstance().getJavaPlugin(), () -> execute(commandSender, args));
107+
.runTaskAsynchronously(CommandHandler.getInstance().getJavaPlugin(), () -> execute(commandSender, args, skip));
80108
return;
81109
}
82110

@@ -95,12 +123,36 @@ public void execute(CommandSender commandSender, String[] args) {
95123
return;
96124
}
97125

126+
Command subCommand = getSubCommand(args);
127+
128+
if (!skip) {
129+
if (subCommand == null) {
130+
if (helpCommandService == null) {
131+
this.execute(commandSender, args, true);
132+
return;
133+
}
134+
135+
helpCommandService.get(this, getSubCommands()).forEach(commandSender::sendMessage);
136+
return;
137+
}
138+
}
139+
98140
if (args.length < commandParameters.size()) {
99141
commandSender.sendMessage(ChatColor.RED + "Wrong Usage: " + usage);
100142
return;
101143
}
102144

103145
List<Object> objects = new ArrayList<>();
146+
List<CommandParameter> commandParameters = this.commandParameters;
147+
148+
Method method = this.method;
149+
Object object = this.object;
150+
151+
if (!skip) {
152+
commandParameters = this.subCommand && subCommand != null ? subCommand.getCommandParameters() : this.commandParameters;
153+
method = this.subCommand && subCommand != null ? subCommand.getMethod() : this.method;
154+
object = this.subCommand && subCommand != null ? subCommand.getObject() : this.object;
155+
}
104156

105157
if (player) {
106158
Player player = (Player) commandSender;

src/main/java/xyz/damt/command/command/CommandFinder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ private final void edit() {
8686
return;
8787

8888
List<Command> subCommands = getCommands(args[0]);
89+
subCommands.forEach(command1 -> command1.setSubCommand(true));
90+
8991
command.getSubCommands().addAll(subCommands);
9092
});
9193
}
Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
11
package xyz.damt.command.complete.impl;
22

3+
import org.bukkit.plugin.java.JavaPlugin;
4+
import xyz.damt.command.CommandHandler;
35
import xyz.damt.command.command.Command;
46
import xyz.damt.command.complete.TabComplete;
57

8+
import java.util.Collections;
69
import java.util.List;
7-
import java.util.stream.Collectors;
10+
import java.util.logging.Level;
811

912
public class DefaultTabCompleter implements TabComplete {
1013

1114
@Override
1215
public List<String> get(Command command, List<Command> subCommands, String[] args) {
13-
final List<String> strings = subCommands.stream().map(Command::getName).collect(Collectors.toList());
14-
15-
for (String string : strings) {
16-
final String[] stringArgs = string.split("\\s+");
17-
strings.remove(string);
18-
19-
for (int i = args.length; i < stringArgs.length; i++) {
20-
strings.add(stringArgs[i]);
21-
}
22-
}
23-
24-
return strings;
16+
JavaPlugin javaPlugin = CommandHandler.getInstance().getJavaPlugin();
17+
javaPlugin.getLogger().log(Level.SEVERE, "Default Tab Completion Is not created yet, make your own!");
18+
return Collections.emptyList();
2519
}
2620

2721
}

src/main/java/xyz/damt/command/executor/CommandExecutor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public CommandExecutor(Command command) {
4141

4242
@Override
4343
public boolean execute(CommandSender commandSender, String s, String[] strings) {
44-
command.execute(commandSender, strings);
44+
command.execute(commandSender, strings, false);
4545
return false;
4646
}
4747

@@ -64,8 +64,12 @@ public List<String> tabComplete(CommandSender sender, String alias, String[] arg
6464

6565
CommandParameter commandParameter = command.getCommandParameters().get(args.length - 1);
6666

67-
if (commandParameter == null)
67+
if (commandParameter == null) {
68+
if (command.getTabComplete() == null)
69+
return Collections.emptyList();
70+
6871
return command.getTabComplete().get(command, command.getSubCommands(), args);
72+
}
6973

7074
return commandParameter.getCommandProvider().suggestions(commandParameter);
7175
}

0 commit comments

Comments
 (0)