SPIGOT-4193: API for selecting entities by strings

This commit is contained in:
md_5
2019-01-31 15:08:25 +11:00
parent ed274c517f
commit ad6070dffd
5 changed files with 105 additions and 2 deletions

View File

@@ -132,7 +132,9 @@ import com.google.common.collect.MapMaker;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.tree.CommandNode;
import com.mojang.brigadier.tree.LiteralCommandNode;
@@ -1873,6 +1875,25 @@ public final class CraftServer implements Server {
return new CraftLootTable(key, registry.getLootTable(CraftNamespacedKey.toMinecraft(key)));
}
@Override
public List<Entity> selectEntities(CommandSender sender, String selector) {
Preconditions.checkArgument(selector != null, "Selector cannot be null");
Preconditions.checkArgument(sender != null, "Sender cannot be null");
ArgumentEntity arg = ArgumentEntity.b();
List<? extends net.minecraft.server.Entity> nms;
try {
StringReader reader = new StringReader(selector);
nms = arg.parse(reader, true).b(VanillaCommandWrapper.getListener(sender));
Preconditions.checkArgument(!reader.canRead(), "Spurious trailing data in selector: " + selector);
} catch (CommandSyntaxException ex) {
throw new IllegalArgumentException("Could not parse selector: " + selector, ex);
}
return new ArrayList<>(Lists.transform(nms, (entity) -> entity.getBukkitEntity()));
}
@Deprecated
@Override
public UnsafeValues getUnsafe() {