Improves tab-completions for books with spaces
All checks were successful
EpicKnarvik97/Books-Without-Borders/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Books-Without-Borders/pipeline/head This commit looks good
This commit is contained in:
@@ -6,6 +6,7 @@ import net.knarcraft.bookswithoutborders.state.BookDirectory;
|
|||||||
import net.knarcraft.bookswithoutborders.utility.BookFileHelper;
|
import net.knarcraft.bookswithoutborders.utility.BookFileHelper;
|
||||||
import net.knarcraft.bookswithoutborders.utility.BookHelper;
|
import net.knarcraft.bookswithoutborders.utility.BookHelper;
|
||||||
import net.knarcraft.bookswithoutborders.utility.InputCleaningHelper;
|
import net.knarcraft.bookswithoutborders.utility.InputCleaningHelper;
|
||||||
|
import net.knarcraft.bookswithoutborders.utility.TabCompletionTypeHelper;
|
||||||
import net.knarcraft.knarlib.util.TabCompletionHelper;
|
import net.knarcraft.knarlib.util.TabCompletionHelper;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -14,7 +15,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -126,14 +126,11 @@ public class CommandDelete implements TabExecutor {
|
|||||||
BooksWithoutBorders.getAvailableBooks(sender, deletePublic),
|
BooksWithoutBorders.getAvailableBooks(sender, deletePublic),
|
||||||
InputCleaningHelper.mergeArguments(arguments, 0));
|
InputCleaningHelper.mergeArguments(arguments, 0));
|
||||||
if (arguments.length > 1) {
|
if (arguments.length > 1) {
|
||||||
List<String> cleaned = new ArrayList<>();
|
return TabCompletionTypeHelper.getCleanedTabCompletions(arguments, filtered);
|
||||||
for (String name : filtered) {
|
} else {
|
||||||
String[] parts = name.split(" ");
|
return filtered;
|
||||||
cleaned.add(parts[parts.length - 1]);
|
|
||||||
}
|
|
||||||
return cleaned;
|
|
||||||
}
|
}
|
||||||
return filtered;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -141,24 +141,39 @@ public class CommandGive implements TabExecutor {
|
|||||||
@Nullable
|
@Nullable
|
||||||
protected List<String> doTabCompletion(@NotNull CommandSender sender, @NotNull String[] arguments, boolean listPublic) {
|
protected List<String> doTabCompletion(@NotNull CommandSender sender, @NotNull String[] arguments, boolean listPublic) {
|
||||||
Server server = booksWithoutBorders.getServer();
|
Server server = booksWithoutBorders.getServer();
|
||||||
|
|
||||||
int argumentCount = arguments.length;
|
int argumentCount = arguments.length;
|
||||||
|
|
||||||
if (argumentCount == 1) {
|
if (argumentCount == 1) {
|
||||||
return TabCompletionHelper.filterMatchingContains(BooksWithoutBorders.getAvailableBooks(sender, listPublic), arguments[0]);
|
return TabCompletionHelper.filterMatchingContains(BooksWithoutBorders.getAvailableBooks(sender, listPublic), arguments[0]);
|
||||||
} else if (argumentCount > 2 && InputCleaningHelper.isBoolean(arguments[argumentCount - 2])) {
|
}
|
||||||
return List.of();
|
|
||||||
|
List<String> output = new ArrayList<>();
|
||||||
|
List<String> books = BooksWithoutBorders.getAvailableBooks(sender, listPublic);
|
||||||
|
List<String> filtered = TabCompletionHelper.filterMatchingContains(books,
|
||||||
|
InputCleaningHelper.mergeArguments(arguments, 0));
|
||||||
|
|
||||||
|
if (!filtered.isEmpty()) {
|
||||||
|
List<String> cleaned = TabCompletionTypeHelper.getCleanedTabCompletions(arguments, filtered);
|
||||||
|
if (!books.contains(InputCleaningHelper.mergeArguments(arguments, 1))) {
|
||||||
|
return cleaned;
|
||||||
|
} else {
|
||||||
|
output.addAll(cleaned);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argumentCount > 2 && InputCleaningHelper.isBoolean(arguments[argumentCount - 2])) {
|
||||||
|
return output;
|
||||||
} else if (argumentCount > 2 && server.getPlayer(arguments[argumentCount - 3]) != null && InputCleaningHelper.isInt(arguments[argumentCount - 2])) {
|
} else if (argumentCount > 2 && server.getPlayer(arguments[argumentCount - 3]) != null && InputCleaningHelper.isInt(arguments[argumentCount - 2])) {
|
||||||
return TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleans(), arguments[argumentCount - 1]);
|
output.addAll(TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleans(), arguments[argumentCount - 1]));
|
||||||
} else if (argumentCount > 2 && server.getPlayer(arguments[argumentCount - 2]) != null) {
|
} else if (argumentCount > 2 && server.getPlayer(arguments[argumentCount - 2]) != null) {
|
||||||
return TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleansAndNumbers(1, 3), arguments[argumentCount - 1]);
|
output.addAll(TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleansAndNumbers(1, 3), arguments[argumentCount - 1]));
|
||||||
} else {
|
} else {
|
||||||
List<String> players = new ArrayList<>();
|
List<String> players = new ArrayList<>();
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
players.add(player.getName());
|
players.add(player.getName());
|
||||||
}
|
}
|
||||||
return TabCompletionHelper.filterMatchingStartsWith(players, arguments[argumentCount - 1]);
|
output.addAll(TabCompletionHelper.filterMatchingStartsWith(players, arguments[argumentCount - 1]));
|
||||||
}
|
}
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -13,6 +13,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,13 +121,30 @@ public class CommandLoad implements TabExecutor {
|
|||||||
int argumentCount = arguments.length;
|
int argumentCount = arguments.length;
|
||||||
if (argumentCount == 1) {
|
if (argumentCount == 1) {
|
||||||
return TabCompletionHelper.filterMatchingContains(BooksWithoutBorders.getAvailableBooks(sender, loadPublic), arguments[0]);
|
return TabCompletionHelper.filterMatchingContains(BooksWithoutBorders.getAvailableBooks(sender, loadPublic), arguments[0]);
|
||||||
} else if (InputCleaningHelper.isBoolean(arguments[argumentCount - 2])) {
|
|
||||||
return List.of();
|
|
||||||
} else if (InputCleaningHelper.isInt(arguments[argumentCount - 2])) {
|
|
||||||
return TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleans(), arguments[argumentCount - 1]);
|
|
||||||
} else {
|
|
||||||
return TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleansAndNumbers(1, 3), arguments[argumentCount - 1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<String> output = new ArrayList<>();
|
||||||
|
List<String> books = BooksWithoutBorders.getAvailableBooks(sender, loadPublic);
|
||||||
|
List<String> filtered = TabCompletionHelper.filterMatchingContains(books,
|
||||||
|
InputCleaningHelper.mergeArguments(arguments, 0));
|
||||||
|
|
||||||
|
if (!filtered.isEmpty()) {
|
||||||
|
List<String> cleaned = TabCompletionTypeHelper.getCleanedTabCompletions(arguments, filtered);
|
||||||
|
if (!books.contains(InputCleaningHelper.mergeArguments(arguments, 1))) {
|
||||||
|
return cleaned;
|
||||||
|
} else {
|
||||||
|
output.addAll(cleaned);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InputCleaningHelper.isBoolean(arguments[argumentCount - 2])) {
|
||||||
|
return output;
|
||||||
|
} else if (InputCleaningHelper.isInt(arguments[argumentCount - 2])) {
|
||||||
|
output.addAll(TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleans(), arguments[argumentCount - 1]));
|
||||||
|
} else {
|
||||||
|
output.addAll(TabCompletionHelper.filterMatchingStartsWith(TabCompletionTypeHelper.getBooleansAndNumbers(1, 3), arguments[argumentCount - 1]));
|
||||||
|
}
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -59,4 +59,27 @@ public final class TabCompletionTypeHelper {
|
|||||||
return booleansAndNumbers;
|
return booleansAndNumbers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets tab-completions with only remaining text, from a list of full strings
|
||||||
|
*
|
||||||
|
* @param arguments <p>The arguments given by the user</p>
|
||||||
|
* @param filtered <p>Tab-completions filtered by user input</p>
|
||||||
|
* @return <p>The cleaned tab-completions</p>
|
||||||
|
*/
|
||||||
|
public static @NotNull List<String> getCleanedTabCompletions(@NotNull String[] arguments,
|
||||||
|
@NotNull List<String> filtered) {
|
||||||
|
List<String> cleaned = new ArrayList<>();
|
||||||
|
for (String name : filtered) {
|
||||||
|
String[] parts = name.split(" ");
|
||||||
|
if (parts[arguments.length - 2].equalsIgnoreCase(arguments[arguments.length - 2])) {
|
||||||
|
StringBuilder builder = new StringBuilder(parts[arguments.length - 1]);
|
||||||
|
for (int i = arguments.length; i < parts.length; i++) {
|
||||||
|
builder.append(" ").append(parts[i]);
|
||||||
|
}
|
||||||
|
cleaned.add(builder.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cleaned;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user