mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-25 20:16:19 +01:00
SPIGOT-4193: API for selecting entities by strings
This commit is contained in:
parent
ed274c517f
commit
ad6070dffd
19
nms-patches/ArgumentEntity.patch
Normal file
19
nms-patches/ArgumentEntity.patch
Normal file
@ -0,0 +1,19 @@
|
||||
--- a/net/minecraft/server/ArgumentEntity.java
|
||||
+++ b/net/minecraft/server/ArgumentEntity.java
|
||||
@@ -84,9 +84,15 @@
|
||||
}
|
||||
|
||||
public EntitySelector parse(StringReader stringreader) throws CommandSyntaxException {
|
||||
+ // CraftBukkit start
|
||||
+ return parse(stringreader, false);
|
||||
+ }
|
||||
+
|
||||
+ public EntitySelector parse(StringReader stringreader, boolean overridePermissions) throws CommandSyntaxException {
|
||||
+ // CraftBukkit end
|
||||
boolean flag = false;
|
||||
ArgumentParserSelector argumentparserselector = new ArgumentParserSelector(stringreader);
|
||||
- EntitySelector entityselector = argumentparserselector.s();
|
||||
+ EntitySelector entityselector = argumentparserselector.s(overridePermissions); // CraftBukkit
|
||||
|
||||
if (entityselector.a() > 1 && this.h) {
|
||||
if (this.i) {
|
63
nms-patches/ArgumentParserSelector.patch
Normal file
63
nms-patches/ArgumentParserSelector.patch
Normal file
@ -0,0 +1,63 @@
|
||||
--- a/net/minecraft/server/ArgumentParserSelector.java
|
||||
+++ b/net/minecraft/server/ArgumentParserSelector.java
|
||||
@@ -98,8 +98,14 @@
|
||||
}
|
||||
|
||||
public ArgumentParserSelector(StringReader stringreader, boolean flag) {
|
||||
- this.q = CriterionConditionValue.c.e;
|
||||
- this.r = CriterionConditionValue.d.e;
|
||||
+ // CraftBukkit start - decompile error
|
||||
+ try {
|
||||
+ this.q = (CriterionConditionValue.c) Class.forName("net.minecraft.server.CriterionConditionValue$c").getDeclaredField("e").get(null);
|
||||
+ this.r = (CriterionConditionValue.d) Class.forName("net.minecraft.server.CriterionConditionValue$d").getDeclaredField("e").get(null);
|
||||
+ } catch (Exception ex) {
|
||||
+ throw new AssertionError(ex);
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
this.y = CriterionConditionRange.a;
|
||||
this.z = CriterionConditionRange.a;
|
||||
this.A = (entity) -> {
|
||||
@@ -126,7 +132,7 @@
|
||||
axisalignedbb = this.a(this.v == null ? 0.0D : this.v, this.w == null ? 0.0D : this.w, this.x == null ? 0.0D : this.x);
|
||||
}
|
||||
|
||||
- Function function;
|
||||
+ Function<Vec3D, Vec3D> function; // CraftBukkit - decompile error
|
||||
|
||||
if (this.s == null && this.t == null && this.u == null) {
|
||||
function = (vec3d) -> {
|
||||
@@ -187,8 +193,10 @@
|
||||
};
|
||||
}
|
||||
|
||||
- protected void b() throws CommandSyntaxException {
|
||||
- this.T = true;
|
||||
+ // CraftBukkit start
|
||||
+ protected void b(boolean overridePermissions) throws CommandSyntaxException {
|
||||
+ this.T = !overridePermissions;
|
||||
+ // CraftBukkit end
|
||||
this.G = this::d;
|
||||
if (!this.l.canRead()) {
|
||||
throw ArgumentParserSelector.d.createWithContext(this.l);
|
||||
@@ -431,6 +439,12 @@
|
||||
}
|
||||
|
||||
public EntitySelector s() throws CommandSyntaxException {
|
||||
+ // CraftBukkit start
|
||||
+ return s(false);
|
||||
+ }
|
||||
+
|
||||
+ public EntitySelector s(boolean overridePermissions) throws CommandSyntaxException {
|
||||
+ // CraftBukkit end
|
||||
this.E = this.l.getCursor();
|
||||
this.G = this::b;
|
||||
if (this.l.canRead() && this.l.peek() == '@') {
|
||||
@@ -439,7 +453,7 @@
|
||||
}
|
||||
|
||||
this.l.skip();
|
||||
- this.b();
|
||||
+ this.b(overridePermissions); // CraftBukkit
|
||||
} else {
|
||||
this.c();
|
||||
}
|
@ -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() {
|
||||
|
@ -505,7 +505,7 @@ public class CraftBlockData implements BlockData {
|
||||
|
||||
StringReader reader = new StringReader(data);
|
||||
ArgumentBlock arg = new ArgumentBlock(reader, false).a(false);
|
||||
Preconditions.checkArgument(!reader.canRead(), "Spurious trailing data");
|
||||
Preconditions.checkArgument(!reader.canRead(), "Spurious trailing data: " + data);
|
||||
|
||||
blockData = arg.getBlockData();
|
||||
parsed = arg.getStateMap();
|
||||
|
@ -63,7 +63,7 @@ public final class VanillaCommandWrapper extends BukkitCommand {
|
||||
return results;
|
||||
}
|
||||
|
||||
private CommandListenerWrapper getListener(CommandSender sender) {
|
||||
public static CommandListenerWrapper getListener(CommandSender sender) {
|
||||
if (sender instanceof Player) {
|
||||
return ((CraftPlayer) sender).getHandle().getCommandListener();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user