Add comprehensive suggestions to many commands.

All patterns now have suggestions, including recursive patterns.
Suggestions will suggest blocks and block states.
All masks now have suggestions, though mask intersections are not
yet supported due to issues with quotes strings.
EntityRemover and ItemFactory now also have completions, as well
as all RegistryConverters (though I am unsure how many are actually
used).

Also use paper's AsyncTabComplete event, if available.
This commit is contained in:
wizjany
2019-05-26 02:20:02 -04:00
parent 871c25e1cd
commit 6962b2e7b6
37 changed files with 463 additions and 64 deletions

View File

@ -19,6 +19,7 @@
package com.sk89q.worldedit.command.argument;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.command.util.EntityRemover;
import com.sk89q.worldedit.util.formatting.text.Component;
import com.sk89q.worldedit.util.formatting.text.TextComponent;
@ -30,12 +31,19 @@ import org.enginehub.piston.converter.SuccessfulConversion;
import org.enginehub.piston.inject.InjectedValueAccess;
import org.enginehub.piston.inject.Key;
import java.util.List;
import static org.enginehub.piston.converter.SuggestionHelper.limitByPrefix;
public class EntityRemoverConverter implements ArgumentConverter<EntityRemover> {
public static void register(CommandManager commandManager) {
commandManager.registerConverter(Key.of(EntityRemover.class), new EntityRemoverConverter());
}
private final List<String> suggestions
= ImmutableList.of("projectiles", "items", "paintings", "itemframes", "boats", "minecarts", "tnt", "xp", "all");
private EntityRemoverConverter() {
}
@ -46,6 +54,11 @@ public class EntityRemoverConverter implements ArgumentConverter<EntityRemover>
);
}
@Override
public List<String> getSuggestions(String input) {
return limitByPrefix(suggestions.stream(), input);
}
@Override
public ConversionResult<EntityRemover> convert(String argument, InjectedValueAccess context) {
try {

View File

@ -19,8 +19,6 @@
package com.sk89q.worldedit.command.argument;
import static org.enginehub.piston.converter.SuggestionHelper.limitByPrefix;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseItem;

View File

@ -21,6 +21,7 @@ package com.sk89q.worldedit.command.argument;
import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.registry.Keyed;
import com.sk89q.worldedit.registry.NamespacedRegistry;
import com.sk89q.worldedit.registry.Registry;
import com.sk89q.worldedit.util.formatting.text.Component;
import com.sk89q.worldedit.util.formatting.text.TextComponent;
@ -84,10 +85,12 @@ public final class RegistryConverter<V extends Keyed> implements ArgumentConvert
private final Registry<V> registry;
private final TextComponent choices;
private final boolean namespaced;
private RegistryConverter(Registry<V> registry) {
this.registry = registry;
this.choices = TextComponent.of("any " + registry.getName());
this.namespaced = registry instanceof NamespacedRegistry;
}
@Override
@ -106,6 +109,9 @@ public final class RegistryConverter<V extends Keyed> implements ArgumentConvert
@Override
public List<String> getSuggestions(String input) {
if (namespaced && input.indexOf(':') < 0) {
input = "minecraft:" + input;
}
return limitByPrefix(registry.keySet().stream(), input);
}
}