/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.google.common.collect.Iterables * com.google.gson.JsonObject * com.mojang.brigadier.ImmutableStringReader * com.mojang.brigadier.Message * com.mojang.brigadier.StringReader * com.mojang.brigadier.arguments.ArgumentType * com.mojang.brigadier.context.CommandContext * com.mojang.brigadier.exceptions.CommandSyntaxException * com.mojang.brigadier.exceptions.SimpleCommandExceptionType * com.mojang.brigadier.suggestion.Suggestions * com.mojang.brigadier.suggestion.SuggestionsBuilder */ package net.minecraft.commands.arguments; import com.google.common.collect.Iterables; import com.google.gson.JsonObject; import com.mojang.brigadier.ImmutableStringReader; import com.mojang.brigadier.Message; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.arguments.ArgumentType; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.concurrent.CompletableFuture; import net.minecraft.commands.CommandBuildContext; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.commands.arguments.selector.EntitySelector; import net.minecraft.commands.arguments.selector.EntitySelectorParser; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.permissions.Permissions; import net.minecraft.world.entity.Entity; public class EntityArgument implements ArgumentType { private static final Collection EXAMPLES = Arrays.asList("Player", "0123", "@e", "@e[type=foo]", "dd12be42-52a9-4a91-a8a1-11c01849e498"); public static final SimpleCommandExceptionType ERROR_NOT_SINGLE_ENTITY = new SimpleCommandExceptionType((Message)Component.translatable("argument.entity.toomany")); public static final SimpleCommandExceptionType ERROR_NOT_SINGLE_PLAYER = new SimpleCommandExceptionType((Message)Component.translatable("argument.player.toomany")); public static final SimpleCommandExceptionType ERROR_ONLY_PLAYERS_ALLOWED = new SimpleCommandExceptionType((Message)Component.translatable("argument.player.entities")); public static final SimpleCommandExceptionType NO_ENTITIES_FOUND = new SimpleCommandExceptionType((Message)Component.translatable("argument.entity.notfound.entity")); public static final SimpleCommandExceptionType NO_PLAYERS_FOUND = new SimpleCommandExceptionType((Message)Component.translatable("argument.entity.notfound.player")); public static final SimpleCommandExceptionType ERROR_SELECTORS_NOT_ALLOWED = new SimpleCommandExceptionType((Message)Component.translatable("argument.entity.selector.not_allowed")); private final boolean single; private final boolean playersOnly; protected EntityArgument(boolean single, boolean playersOnly) { this.single = single; this.playersOnly = playersOnly; } public static EntityArgument entity() { return new EntityArgument(true, false); } public static Entity getEntity(CommandContext context, String name) throws CommandSyntaxException { return ((EntitySelector)context.getArgument(name, EntitySelector.class)).findSingleEntity((CommandSourceStack)context.getSource()); } public static EntityArgument entities() { return new EntityArgument(false, false); } public static Collection getEntities(CommandContext context, String name) throws CommandSyntaxException { Collection result = EntityArgument.getOptionalEntities(context, name); if (result.isEmpty()) { throw NO_ENTITIES_FOUND.create(); } return result; } public static Collection getOptionalEntities(CommandContext context, String name) throws CommandSyntaxException { return ((EntitySelector)context.getArgument(name, EntitySelector.class)).findEntities((CommandSourceStack)context.getSource()); } public static Collection getOptionalPlayers(CommandContext context, String name) throws CommandSyntaxException { return ((EntitySelector)context.getArgument(name, EntitySelector.class)).findPlayers((CommandSourceStack)context.getSource()); } public static EntityArgument player() { return new EntityArgument(true, true); } public static ServerPlayer getPlayer(CommandContext context, String name) throws CommandSyntaxException { return ((EntitySelector)context.getArgument(name, EntitySelector.class)).findSinglePlayer((CommandSourceStack)context.getSource()); } public static EntityArgument players() { return new EntityArgument(false, true); } public static Collection getPlayers(CommandContext context, String name) throws CommandSyntaxException { List players = ((EntitySelector)context.getArgument(name, EntitySelector.class)).findPlayers((CommandSourceStack)context.getSource()); if (players.isEmpty()) { throw NO_PLAYERS_FOUND.create(); } return players; } public EntitySelector parse(StringReader reader) throws CommandSyntaxException { return this.parse(reader, true); } public EntitySelector parse(StringReader reader, S source) throws CommandSyntaxException { return this.parse(reader, EntitySelectorParser.allowSelectors(source)); } private EntitySelector parse(StringReader reader, boolean allowSelectors) throws CommandSyntaxException { boolean start = false; EntitySelectorParser parser = new EntitySelectorParser(reader, allowSelectors); EntitySelector selector = parser.parse(); if (selector.getMaxResults() > 1 && this.single) { if (this.playersOnly) { reader.setCursor(0); throw ERROR_NOT_SINGLE_PLAYER.createWithContext((ImmutableStringReader)reader); } reader.setCursor(0); throw ERROR_NOT_SINGLE_ENTITY.createWithContext((ImmutableStringReader)reader); } if (selector.includesEntities() && this.playersOnly && !selector.isSelfSelector()) { reader.setCursor(0); throw ERROR_ONLY_PLAYERS_ALLOWED.createWithContext((ImmutableStringReader)reader); } return selector; } public CompletableFuture listSuggestions(CommandContext contextBuilder, SuggestionsBuilder builder) { Object object = contextBuilder.getSource(); if (object instanceof SharedSuggestionProvider) { SharedSuggestionProvider source = (SharedSuggestionProvider)object; StringReader reader = new StringReader(builder.getInput()); reader.setCursor(builder.getStart()); EntitySelectorParser parser = new EntitySelectorParser(reader, source.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS)); try { parser.parse(); } catch (CommandSyntaxException commandSyntaxException) { // empty catch block } return parser.fillSuggestions(builder, suggestions -> { Collection onlinePlayerNames = source.getOnlinePlayerNames(); Collection suggestedNames = this.playersOnly ? onlinePlayerNames : Iterables.concat(onlinePlayerNames, source.getSelectedEntities()); SharedSuggestionProvider.suggest(suggestedNames, suggestions); }); } return Suggestions.empty(); } public Collection getExamples() { return EXAMPLES; } public static class Info implements ArgumentTypeInfo { private static final byte FLAG_SINGLE = 1; private static final byte FLAG_PLAYERS_ONLY = 2; @Override public void serializeToNetwork(Template template, FriendlyByteBuf out) { int flags = 0; if (template.single) { flags |= 1; } if (template.playersOnly) { flags |= 2; } out.writeByte(flags); } @Override public Template deserializeFromNetwork(FriendlyByteBuf in) { byte flags = in.readByte(); return new Template((flags & 1) != 0, (flags & 2) != 0); } @Override public void serializeToJson(Template template, JsonObject out) { out.addProperty("amount", template.single ? "single" : "multiple"); out.addProperty("type", template.playersOnly ? "players" : "entities"); } @Override public Template unpack(EntityArgument argument) { return new Template(argument.single, argument.playersOnly); } public final class Template implements ArgumentTypeInfo.Template { private final boolean single; private final boolean playersOnly; private Template(boolean single, boolean playersOnly) { this.single = single; this.playersOnly = playersOnly; } @Override public EntityArgument instantiate(CommandBuildContext context) { return new EntityArgument(this.single, this.playersOnly); } @Override public ArgumentTypeInfo type() { return Info.this; } } } }