mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 12:27:59 +01:00
net.minecraft.commands.arguments(.{blocks|item})
This commit is contained in:
parent
a890e322f1
commit
f1ee7a0262
@ -0,0 +1,32 @@
|
|||||||
|
--- a/net/minecraft/commands/arguments/EntityArgument.java
|
||||||
|
+++ b/net/minecraft/commands/arguments/EntityArgument.java
|
||||||
|
@@ -105,9 +_,14 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
private EntitySelector parse(StringReader reader, boolean allowSelectors) throws CommandSyntaxException {
|
||||||
|
+ // CraftBukkit start
|
||||||
|
+ return this.parse(reader, allowSelectors, true);
|
||||||
|
+ }
|
||||||
|
+ private EntitySelector parse(StringReader reader, boolean allowSelectors, boolean overridePermissions) throws CommandSyntaxException {
|
||||||
|
+ // CraftBukkit end
|
||||||
|
int i = 0;
|
||||||
|
EntitySelectorParser entitySelectorParser = new EntitySelectorParser(reader, allowSelectors);
|
||||||
|
- EntitySelector entitySelector = entitySelectorParser.parse();
|
||||||
|
+ EntitySelector entitySelector = entitySelectorParser.parse(overridePermissions); // CraftBukkit
|
||||||
|
if (entitySelector.getMaxResults() > 1 && this.single) {
|
||||||
|
if (this.playersOnly) {
|
||||||
|
reader.setCursor(0);
|
||||||
|
@@ -129,7 +_,12 @@
|
||||||
|
if (context.getSource() instanceof SharedSuggestionProvider sharedSuggestionProvider) {
|
||||||
|
StringReader stringReader = new StringReader(builder.getInput());
|
||||||
|
stringReader.setCursor(builder.getStart());
|
||||||
|
- EntitySelectorParser entitySelectorParser = new EntitySelectorParser(stringReader, EntitySelectorParser.allowSelectors(sharedSuggestionProvider));
|
||||||
|
+ // Paper start - Fix EntityArgument permissions
|
||||||
|
+ final boolean permission = sharedSuggestionProvider instanceof CommandSourceStack stack
|
||||||
|
+ ? stack.bypassSelectorPermissions || stack.hasPermission(2, "minecraft.command.selector")
|
||||||
|
+ : sharedSuggestionProvider.hasPermission(2);
|
||||||
|
+ EntitySelectorParser entitySelectorParser = new EntitySelectorParser(stringReader, permission);
|
||||||
|
+ // Paper end - Fix EntityArgument permissions
|
||||||
|
|
||||||
|
try {
|
||||||
|
entitySelectorParser.parse();
|
@ -1,30 +1,30 @@
|
|||||||
--- a/net/minecraft/commands/arguments/MessageArgument.java
|
--- a/net/minecraft/commands/arguments/MessageArgument.java
|
||||||
+++ b/net/minecraft/commands/arguments/MessageArgument.java
|
+++ b/net/minecraft/commands/arguments/MessageArgument.java
|
||||||
@@ -40,6 +40,11 @@
|
@@ -40,6 +_,11 @@
|
||||||
|
|
||||||
public static void resolveChatMessage(CommandContext<CommandSourceStack> context, String name, Consumer<PlayerChatMessage> callback) throws CommandSyntaxException {
|
public static void resolveChatMessage(CommandContext<CommandSourceStack> context, String key, Consumer<PlayerChatMessage> callback) throws CommandSyntaxException {
|
||||||
MessageArgument.Message message = context.getArgument(name, MessageArgument.Message.class);
|
MessageArgument.Message message = context.getArgument(key, MessageArgument.Message.class);
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ resolveChatMessage(message, context, name, callback);
|
+ resolveChatMessage(message, context, key, callback);
|
||||||
+ }
|
+ }
|
||||||
+ public static void resolveChatMessage(MessageArgument.Message message, CommandContext<CommandSourceStack> context, String name, Consumer<PlayerChatMessage> callback) throws CommandSyntaxException {
|
+ public static void resolveChatMessage(MessageArgument.Message message, CommandContext<CommandSourceStack> context, String key, Consumer<PlayerChatMessage> callback) throws CommandSyntaxException {
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
CommandSourceStack commandSourceStack = context.getSource();
|
CommandSourceStack commandSourceStack = context.getSource();
|
||||||
Component component = message.resolveComponent(commandSourceStack);
|
Component component = message.resolveComponent(commandSourceStack);
|
||||||
CommandSigningContext commandSigningContext = commandSourceStack.getSigningContext();
|
CommandSigningContext signingContext = commandSourceStack.getSigningContext();
|
||||||
@@ -54,17 +59,21 @@
|
@@ -54,17 +_,21 @@
|
||||||
private static void resolveSignedMessage(Consumer<PlayerChatMessage> callback, CommandSourceStack source, PlayerChatMessage message) {
|
private static void resolveSignedMessage(Consumer<PlayerChatMessage> callback, CommandSourceStack source, PlayerChatMessage message) {
|
||||||
MinecraftServer minecraftServer = source.getServer();
|
MinecraftServer server = source.getServer();
|
||||||
CompletableFuture<FilteredText> completableFuture = filterPlainText(source, message);
|
CompletableFuture<FilteredText> completableFuture = filterPlainText(source, message);
|
||||||
- Component component = minecraftServer.getChatDecorator().decorate(source.getPlayer(), message.decoratedContent());
|
- Component component = server.getChatDecorator().decorate(source.getPlayer(), message.decoratedContent());
|
||||||
- source.getChatMessageChainer().append(completableFuture, filtered -> {
|
- source.getChatMessageChainer().append(completableFuture, filteredText -> {
|
||||||
- PlayerChatMessage playerChatMessage2 = message.withUnsignedContent(component).filter(filtered.mask());
|
- PlayerChatMessage playerChatMessage = message.withUnsignedContent(component).filter(filteredText.mask());
|
||||||
+ // Paper start - support asynchronous chat decoration
|
+ // Paper start - support asynchronous chat decoration
|
||||||
+ CompletableFuture<Component> componentFuture = minecraftServer.getChatDecorator().decorate(source.getPlayer(), source, message.decoratedContent());
|
+ CompletableFuture<Component> componentFuture = server.getChatDecorator().decorate(source.getPlayer(), source, message.decoratedContent());
|
||||||
+ source.getChatMessageChainer().append(CompletableFuture.allOf(completableFuture, componentFuture), filtered -> {
|
+ source.getChatMessageChainer().append(CompletableFuture.allOf(completableFuture, componentFuture), filtered -> {
|
||||||
+ PlayerChatMessage playerChatMessage2 = message.withUnsignedContent(componentFuture.join()).filter(completableFuture.join().mask());
|
+ PlayerChatMessage playerChatMessage = message.withUnsignedContent(componentFuture.join()).filter(completableFuture.join().mask());
|
||||||
+ // Paper end - support asynchronous chat decoration
|
+ // Paper end - support asynchronous chat decoration
|
||||||
callback.accept(playerChatMessage2);
|
callback.accept(playerChatMessage);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
--- a/net/minecraft/commands/arguments/blocks/BlockStateParser.java
|
||||||
|
+++ b/net/minecraft/commands/arguments/blocks/BlockStateParser.java
|
||||||
|
@@ -69,7 +_,7 @@
|
||||||
|
private final StringReader reader;
|
||||||
|
private final boolean forTesting;
|
||||||
|
private final boolean allowNbt;
|
||||||
|
- private final Map<Property<?>, Comparable<?>> properties = Maps.newHashMap();
|
||||||
|
+ private final Map<Property<?>, Comparable<?>> properties = Maps.newLinkedHashMap(); // CraftBukkit - stable
|
||||||
|
private final Map<String, String> vagueProperties = Maps.newHashMap();
|
||||||
|
private ResourceLocation id = ResourceLocation.withDefaultNamespace("");
|
||||||
|
@Nullable
|
@ -1,52 +0,0 @@
|
|||||||
--- a/net/minecraft/commands/arguments/EntityArgument.java
|
|
||||||
+++ b/net/minecraft/commands/arguments/EntityArgument.java
|
|
||||||
@@ -102,21 +102,27 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
private EntitySelector parse(StringReader reader, boolean allowAtSelectors) throws CommandSyntaxException {
|
|
||||||
+ // CraftBukkit start
|
|
||||||
+ return this.parse(reader, allowAtSelectors, false);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public EntitySelector parse(StringReader stringreader, boolean flag, boolean overridePermissions) throws CommandSyntaxException {
|
|
||||||
+ // CraftBukkit end
|
|
||||||
boolean flag1 = false;
|
|
||||||
- EntitySelectorParser argumentparserselector = new EntitySelectorParser(reader, allowAtSelectors);
|
|
||||||
- EntitySelector entityselector = argumentparserselector.parse();
|
|
||||||
+ EntitySelectorParser argumentparserselector = new EntitySelectorParser(stringreader, flag);
|
|
||||||
+ EntitySelector entityselector = argumentparserselector.parse(overridePermissions); // CraftBukkit
|
|
||||||
|
|
||||||
if (entityselector.getMaxResults() > 1 && this.single) {
|
|
||||||
if (this.playersOnly) {
|
|
||||||
- reader.setCursor(0);
|
|
||||||
- throw EntityArgument.ERROR_NOT_SINGLE_PLAYER.createWithContext(reader);
|
|
||||||
+ stringreader.setCursor(0);
|
|
||||||
+ throw EntityArgument.ERROR_NOT_SINGLE_PLAYER.createWithContext(stringreader);
|
|
||||||
} else {
|
|
||||||
- reader.setCursor(0);
|
|
||||||
- throw EntityArgument.ERROR_NOT_SINGLE_ENTITY.createWithContext(reader);
|
|
||||||
+ stringreader.setCursor(0);
|
|
||||||
+ throw EntityArgument.ERROR_NOT_SINGLE_ENTITY.createWithContext(stringreader);
|
|
||||||
}
|
|
||||||
} else if (entityselector.includesEntities() && this.playersOnly && !entityselector.isSelfSelector()) {
|
|
||||||
- reader.setCursor(0);
|
|
||||||
- throw EntityArgument.ERROR_ONLY_PLAYERS_ALLOWED.createWithContext(reader);
|
|
||||||
+ stringreader.setCursor(0);
|
|
||||||
+ throw EntityArgument.ERROR_ONLY_PLAYERS_ALLOWED.createWithContext(stringreader);
|
|
||||||
} else {
|
|
||||||
return entityselector;
|
|
||||||
}
|
|
||||||
@@ -129,7 +135,12 @@
|
|
||||||
StringReader stringreader = new StringReader(suggestionsbuilder.getInput());
|
|
||||||
|
|
||||||
stringreader.setCursor(suggestionsbuilder.getStart());
|
|
||||||
- EntitySelectorParser argumentparserselector = new EntitySelectorParser(stringreader, EntitySelectorParser.allowSelectors(icompletionprovider));
|
|
||||||
+ // Paper start - Fix EntityArgument permissions
|
|
||||||
+ final boolean permission = object instanceof CommandSourceStack stack
|
|
||||||
+ ? stack.bypassSelectorPermissions || stack.hasPermission(2, "minecraft.command.selector")
|
|
||||||
+ : icompletionprovider.hasPermission(2);
|
|
||||||
+ EntitySelectorParser argumentparserselector = new EntitySelectorParser(stringreader, permission);
|
|
||||||
+ // Paper end - Fix EntityArgument permissions
|
|
||||||
|
|
||||||
try {
|
|
||||||
argumentparserselector.parse();
|
|
@ -1,38 +0,0 @@
|
|||||||
--- a/net/minecraft/commands/arguments/blocks/BlockStateParser.java
|
|
||||||
+++ b/net/minecraft/commands/arguments/blocks/BlockStateParser.java
|
|
||||||
@@ -67,7 +67,7 @@
|
|
||||||
private final StringReader reader;
|
|
||||||
private final boolean forTesting;
|
|
||||||
private final boolean allowNbt;
|
|
||||||
- private final Map<Property<?>, Comparable<?>> properties = Maps.newHashMap();
|
|
||||||
+ private final Map<Property<?>, Comparable<?>> properties = Maps.newLinkedHashMap(); // CraftBukkit - stable
|
|
||||||
private final Map<String, String> vagueProperties = Maps.newHashMap();
|
|
||||||
private ResourceLocation id = ResourceLocation.withDefaultNamespace("");
|
|
||||||
@Nullable
|
|
||||||
@@ -275,7 +275,7 @@
|
|
||||||
Iterator iterator = property.getPossibleValues().iterator();
|
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
- T t0 = (Comparable) iterator.next();
|
|
||||||
+ T t0 = (T) iterator.next(); // CraftBukkit - decompile error
|
|
||||||
|
|
||||||
if (t0 instanceof Integer integer) {
|
|
||||||
builder.suggest(integer);
|
|
||||||
@@ -545,7 +545,7 @@
|
|
||||||
Optional<T> optional = property.getValue(value);
|
|
||||||
|
|
||||||
if (optional.isPresent()) {
|
|
||||||
- this.state = (BlockState) this.state.setValue(property, (Comparable) optional.get());
|
|
||||||
+ this.state = (BlockState) this.state.setValue(property, (T) optional.get()); // CraftBukkit - decompile error
|
|
||||||
this.properties.put(property, (Comparable) optional.get());
|
|
||||||
} else {
|
|
||||||
this.reader.setCursor(cursor);
|
|
||||||
@@ -581,7 +581,7 @@
|
|
||||||
private static <T extends Comparable<T>> void appendProperty(StringBuilder builder, Property<T> property, Comparable<?> value) {
|
|
||||||
builder.append(property.getName());
|
|
||||||
builder.append('=');
|
|
||||||
- builder.append(property.getName(value));
|
|
||||||
+ builder.append(property.getName((T) value)); // CraftBukkit - decompile error
|
|
||||||
}
|
|
||||||
|
|
||||||
public static record BlockResult(BlockState blockState, Map<Property<?>, Comparable<?>> properties, @Nullable CompoundTag nbt) {
|
|
@ -1,10 +0,0 @@
|
|||||||
--- a/net/minecraft/commands/arguments/item/ItemInput.java
|
|
||||||
+++ b/net/minecraft/commands/arguments/item/ItemInput.java
|
|
||||||
@@ -78,6 +78,6 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getItemName() {
|
|
||||||
- return this.item.unwrapKey().map(ResourceKey::location).orElseGet(() -> "unknown[" + this.item + "]").toString();
|
|
||||||
+ return this.item.unwrapKey().<Object>map(ResourceKey::location).orElseGet(() -> "unknown[" + this.item + "]").toString(); // Paper - decompile fix
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user