mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 07:06:44 +01:00
Fix tab completion and usage
This commit is contained in:
parent
c058614fcc
commit
3d087b1bbe
@ -34,19 +34,22 @@ import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.PlotId;
|
||||
import com.plotsquared.core.util.MainUtil;
|
||||
import com.plotsquared.core.util.MathMan;
|
||||
import com.plotsquared.core.util.TabCompletions;
|
||||
import com.plotsquared.core.util.query.PlotQuery;
|
||||
import com.plotsquared.core.util.query.SortingStrategy;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@CommandDeclaration(command = "home",
|
||||
description = "Teleport to your plot(s)",
|
||||
permission = "plots.home",
|
||||
usage = "/plot home [<page>|<alias>|<area;x;y>|<area> <x;y>]",
|
||||
usage = "/plot home [<page>|<alias>|<area;x;y>|<area> <x;y>|<area> <page>]",
|
||||
aliases = {"h"},
|
||||
requiredType = RequiredType.PLAYER,
|
||||
category = CommandCategory.TELEPORT)
|
||||
@ -166,4 +169,28 @@ public class HomeCommand extends Command {
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Command> tab(PlotPlayer player, String[] args, boolean space) {
|
||||
final List<Command> completions = new ArrayList<>();
|
||||
switch (args.length - 1) {
|
||||
case 0:
|
||||
completions.addAll(
|
||||
TabCompletions.completeAreas(args[0]));
|
||||
if (args[0].isEmpty()) {
|
||||
// if no input is given, only suggest 1 - 3
|
||||
completions.addAll(
|
||||
TabCompletions.asCompletions("1", "2", "3"));
|
||||
break;
|
||||
}
|
||||
// complete more numbers from the already given input
|
||||
completions.addAll(
|
||||
TabCompletions.completeNumbers(args[0], 10, 999));
|
||||
break;
|
||||
case 1:
|
||||
completions.addAll(
|
||||
TabCompletions.completeNumbers(args[1], 10, 999));
|
||||
break;
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
}
|
||||
|
@ -40,12 +40,11 @@ import com.plotsquared.core.util.query.PlotQuery;
|
||||
import com.plotsquared.core.util.query.SortingStrategy;
|
||||
import com.plotsquared.core.util.task.RunnableVal2;
|
||||
import com.plotsquared.core.util.task.RunnableVal3;
|
||||
import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@ -54,7 +53,7 @@ import java.util.concurrent.TimeoutException;
|
||||
@CommandDeclaration(command = "visit",
|
||||
permission = "plots.visit",
|
||||
description = "Visit someones plot",
|
||||
usage = "/plot visit <<player>|<alias>|<world>> [#]",
|
||||
usage = "/plot visit <player>|<alias>|<plot> [area]|[#] [#]",
|
||||
aliases = {"v", "tp", "teleport", "goto", "warp"},
|
||||
requiredType = RequiredType.PLAYER,
|
||||
category = CommandCategory.TELEPORT)
|
||||
@ -153,7 +152,7 @@ public class Visit extends Command {
|
||||
int page = Integer.MIN_VALUE;
|
||||
|
||||
switch (args.length) {
|
||||
// /p v [...] [...] <page>
|
||||
// /p v <user> <area> <page>
|
||||
case 3:
|
||||
if (!MathMan.isInteger(args[2])) {
|
||||
Captions.NOT_VALID_NUMBER.send(player, "(1, ∞)");
|
||||
@ -228,24 +227,32 @@ public class Visit extends Command {
|
||||
}
|
||||
|
||||
@Override public Collection<Command> tab(PlotPlayer player, String[] args, boolean space) {
|
||||
final List<Command> completions = new LinkedList<>();
|
||||
final List<Command> completions = new ArrayList<>();
|
||||
switch (args.length - 1) {
|
||||
case 0:
|
||||
this.completeNumbers(completions, args[0], 0);
|
||||
completions.addAll(TabCompletions.completePlayers(args[0], Collections.emptyList()));
|
||||
break;
|
||||
case 1:
|
||||
if (MathMan.isInteger(args[0])) {
|
||||
completions.addAll(
|
||||
TabCompletions.completeAreas(args[1]));
|
||||
if (args[1].isEmpty()) {
|
||||
// if no input is given, only suggest 1 - 3
|
||||
completions.addAll(
|
||||
TabCompletions.asCompletions("1", "2", "3"));
|
||||
break;
|
||||
}
|
||||
this.completeNumbers(completions, args[1], 0);
|
||||
this.completeAreas(completions, args[1]);
|
||||
completions.addAll(
|
||||
TabCompletions.completeNumbers(args[1], 10, 999));
|
||||
break;
|
||||
case 2:
|
||||
if (MathMan.isInteger(args[1])) {
|
||||
if (args[2].isEmpty()) {
|
||||
// if no input is given, only suggest 1 - 3
|
||||
completions.addAll(
|
||||
TabCompletions.asCompletions("1", "2", "3"));
|
||||
break;
|
||||
}
|
||||
this.completeNumbers(completions, args[2], 0);
|
||||
completions.addAll(
|
||||
TabCompletions.completeNumbers(args[2], 10, 999));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ import com.plotsquared.core.command.RequiredType;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.uuid.UUIDMapping;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -136,6 +137,65 @@ public class TabCompletions {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of integer numbers matching the given input. If the input string
|
||||
* is empty, nothing will be returned. The list is unmodifiable.
|
||||
*
|
||||
* @param input Input to filter with
|
||||
* @param amountLimit Maximum amount of suggestions
|
||||
* @param highestLimit Highest number to include
|
||||
* @return Unmodifiable list of number completions
|
||||
*/
|
||||
@NotNull public List<Command> completeNumbers(@NotNull final String input,
|
||||
final int amountLimit, final int highestLimit) {
|
||||
if (input.isEmpty() || input.length() > highestLimit || !MathMan.isInteger(input)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
int offset;
|
||||
try {
|
||||
offset = Integer.parseInt(input) * 10;
|
||||
} catch (NumberFormatException ignored) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
final List<String> commands = new ArrayList<>();
|
||||
for (int i = offset; i < highestLimit && (offset - i + amountLimit) > 0; i++) {
|
||||
commands.add(String.valueOf(i));
|
||||
}
|
||||
return asCompletions(commands.toArray(new String[0]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of plot areas matching the given input.
|
||||
* The list is unmodifiable.
|
||||
*
|
||||
* @param input Input to filter with
|
||||
* @return Unmodifiable list of area completions
|
||||
*/
|
||||
@NotNull public List<Command> completeAreas(@NotNull final String input) {
|
||||
final List<Command> completions = new ArrayList<>();
|
||||
for (final PlotArea area : PlotSquared.get().getPlotAreas()) {
|
||||
String areaName = area.getWorldName();
|
||||
if (area.getId() != null) {
|
||||
areaName += ";" + area.getId();
|
||||
}
|
||||
if (!areaName.toLowerCase().startsWith(input.toLowerCase())) {
|
||||
continue;
|
||||
}
|
||||
completions.add(new Command(null, false, areaName, "",
|
||||
RequiredType.NONE, null) {});
|
||||
}
|
||||
return Collections.unmodifiableList(completions);
|
||||
}
|
||||
|
||||
@NotNull public List<Command> asCompletions(String... toFilter) {
|
||||
final List<Command> completions = new ArrayList<>();
|
||||
for (String completion : toFilter) {
|
||||
completions.add(new Command(null, false, completion, "",
|
||||
RequiredType.NONE, null) {});
|
||||
}
|
||||
return Collections.unmodifiableList(completions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param cacheIdentifier Cache key
|
||||
* @param input Command input
|
||||
|
Loading…
Reference in New Issue
Block a user