From 76fe648e85a7162db8c7c0893a5c321e0caefcab Mon Sep 17 00:00:00 2001 From: jojo Date: Mon, 28 Dec 2020 17:04:28 +0100 Subject: [PATCH] Fix Argument.ArgumentBuilder --- .../src/de/steamwar/command/Argument.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/SpigotCore_Main/src/de/steamwar/command/Argument.java b/SpigotCore_Main/src/de/steamwar/command/Argument.java index 24c550a..e1aae74 100644 --- a/SpigotCore_Main/src/de/steamwar/command/Argument.java +++ b/SpigotCore_Main/src/de/steamwar/command/Argument.java @@ -23,10 +23,7 @@ package de.steamwar.command; import org.bukkit.Bukkit; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -100,9 +97,33 @@ public class Argument { } } + public void generate(int n, Argument[] elements) { + if (n == 1 || n == 0) { + options.add(Arrays.copyOf(elements, elements.length)); + return; + } + for (int i = 0; i < n - 1; i++) { + generate(n - 1, elements); + if (n % 2 == 0) { + swap(elements, i, n - 1); + } else { + swap(elements, 0, n - 1); + } + } + generate(n - 1, elements); + } + + private void swap(Argument[] elements, int a, int b) { + Argument tmp = elements[a]; + elements[a] = elements[b]; + elements[b] = tmp; + } + private void generate(Argument[] arguments, int length, int startPosition, Argument[] result) { if (length == 0) { - options.add(Arrays.copyOf(result, result.length)); + Set> argumentSet = new HashSet<>(Arrays.asList(result)); + if (argumentSet.size() != result.length) return; + generate(result.length, Arrays.copyOf(result, result.length)); return; } for (int i = startPosition; i <= arguments.length - length; i++) { @@ -131,4 +152,11 @@ public class Argument { } + @Override + public String toString() { + return "Argument{" + + "tabCompletes=" + Arrays.toString(tabCompletes) + + '}'; + } + }