From b6e4147af4cdebba77f3597cc8e72bbd454314dc Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 28 Dec 2020 11:25:41 +0100 Subject: [PATCH] Add Basic TabCompleting --- .../src/de/steamwar/command/Argument.java | 17 +++++++++++++++++ .../src/de/steamwar/command/SWCommand.java | 14 ++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/SpigotCore_Main/src/de/steamwar/command/Argument.java b/SpigotCore_Main/src/de/steamwar/command/Argument.java index e231b8c..591cc38 100644 --- a/SpigotCore_Main/src/de/steamwar/command/Argument.java +++ b/SpigotCore_Main/src/de/steamwar/command/Argument.java @@ -23,9 +23,12 @@ package de.steamwar.command; import org.bukkit.Bukkit; +import java.util.Arrays; +import java.util.List; import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Collectors; public class Argument { @@ -66,4 +69,18 @@ public class Argument { return Optional.empty(); } + public Optional> tabCompleteSupplier(String s) { + try { + // Check if mappable + if (!s.isEmpty()) argumentType.mapper.apply(s); + List strings = Arrays.stream(tabCompletes).filter(t -> t.startsWith(s)).collect(Collectors.toList()); + if (strings.isEmpty()) strings.add(s); + return Optional.of(strings); + } catch (NumberFormatException e) { + return Optional.empty(); + } catch (Exception e) { + throw new SecurityException(e); + } + } + } diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java index 2a727ec..001605a 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java @@ -23,6 +23,8 @@ package de.steamwar.command; import org.bukkit.entity.Player; +import java.util.Arrays; +import java.util.List; import java.util.Optional; public class SWCommand { @@ -59,4 +61,16 @@ public class SWCommand { return Optional.of(executor.execute(player, new ArgumentMap(objects))); } + public Optional> tabComplete(String[] args) { + if (args.length > arguments.length) { + return Optional.empty(); + } + for (int i = 0; i < args.length - 1; i++) { + Optional optional = arguments[i].valueSupplier(args[i]); + if (!optional.isPresent()) return Optional.empty(); + } + int index = args.length - 1; + return arguments[index].tabCompleteSupplier(args[index]); + } + }