SteamWar/SpigotCore
Archiviert
13
0

CommandFramework3 #94

Manuell gemergt
Zeanon hat 71 Commits von CommandFramework3 nach master 2021-03-30 21:15:40 +02:00 zusammengeführt
Nur Änderungen aus Commit 811bc921a4 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -35,6 +35,7 @@ public abstract class SWCommand {
Veraltet
Review

Da du glaube sowieso keinen Befehl doppelt einfügst und dann häufig drüberiterierst, wäre glaube ich eine ArrayList angebrachter.

Da du glaube sowieso keinen Befehl doppelt einfügst und dann häufig drüberiterierst, wäre glaube ich eine ArrayList angebrachter.
Veraltet
Review

Ich glaube eher eine LinkedList, weil ich nur drüber iteriere oder?

Ich glaube eher eine LinkedList, weil ich nur drüber iteriere oder?
Veraltet
Review

Nein, der Vorteil einer Linkedlist ist eher nur bei häufigem Entfernen aus der Mitte gegeben. Die ArrayList ist auch beim Iterieren schneller, weil da ja einfach nur der index um eins erhöht werden muss (bessere Speicherpositionierung)

Nein, der Vorteil einer Linkedlist ist eher nur bei häufigem Entfernen aus der Mitte gegeben. Die ArrayList ist auch beim Iterieren schneller, weil da ja einfach nur der index um eins erhöht werden muss (bessere Speicherpositionierung)
private final Set<InternalCommand> commandSet = new HashSet<>();
private final Set<InternalTabComplete> tabCompleteSet = new HashSet<>();
private final Map<Integer, Set<String>> subCommandTabCompletes = new HashMap<>();
private Consumer<CommandSender> helpMessage = sender -> {};
protected SWCommand(String command) {
@ -55,19 +56,30 @@ public abstract class SWCommand {
@Override
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
List<String> strings = new ArrayList<>();
List<String> strings = new ArrayList<>(subCommandTabCompletes.getOrDefault(args.length, new HashSet<>()));
for (InternalTabComplete internalTabComplete : tabCompleteSet) {
SWCommandUtils.TabComplete tabComplete = internalTabComplete.invoke(sender, args);
if (tabComplete != null) {
strings.addAll(tabComplete.tabCompletes);
}
}
strings = new ArrayList<>(strings);
for (int i = strings.size() - 1; i >= 0; i--) {
if (!strings.get(i).startsWith(args[args.length - 1])) {
strings.remove(i);
}
}
return strings;
}
});
for (Method method : getClass().getDeclaredMethods()) {
if (method.getDeclaredAnnotation(Register.class) == null) continue;
Register register = method.getDeclaredAnnotation(Register.class);
if (register == null) continue;
for (int i = 0; i < register.subCommand().length; i++) {
subCommandTabCompletes.computeIfAbsent(i, integer -> new HashSet<>()).add(register.subCommand()[i]);
}
if (!validMethod(method)) continue;
if (method.getReturnType() == Void.TYPE) {
commandSet.add(new InternalCommand(this, method));