public ReadResults Read(Converter <string> function, Func <string, CommandError> invalidNumberErrorProvider, T minimum, T maximum, bool loopable, out Range <T> result) { result = default; if (!StringReader.CanRead()) { return(ReadResults.Failure(CommandError.ExpectedValueOrRange().WithContext(StringReader))); } int start = StringReader.GetCursor(); T? right; ReadResults readResults = ReadNumber(function, invalidNumberErrorProvider, out T? left); if (!readResults.Successful) { return(readResults); } if (StringReader.CanRead(2) && StringReader.Peek() == '.' && StringReader.Peek(1) == '.') { StringReader.Skip(2); readResults = ReadNumber(function, invalidNumberErrorProvider, out right); if (!readResults.Successful) { return(readResults); } } else { right = left; } if (left == null && right == null) { return(ReadResults.Failure(CommandError.ExpectedValueOrRange().WithContext(StringReader))); } if (left == null) { left = minimum; } if (right == null) { right = maximum; } if (!loopable && ((T)left).CompareTo((T)right) > 0) { StringReader.SetCursor(start); return(ReadResults.Failure(CommandError.RangeMinBiggerThanMax().WithContext(StringReader))); } result = new Range <T>((T)left, (T)right); return(ReadResults.Success()); }
private static string GetContext(IStringReader reader) { int minimum = Math.Max(reader.GetCursor() - 10, 0); int maximum = Math.Min(reader.GetCursor(), reader.GetLength()); StringBuilder builder = new StringBuilder($" at position {reader.GetCursor()}: "); if (minimum > 0) { builder.Append("..."); } builder.Append(reader.GetString()[minimum..maximum]);
public ReadResults ReadCompound(out INbtTag result) { CompoundNbtTag compound; result = compound = new CompoundNbtTag(); ReadResults readResults = Reader.Expect('{'); if (!readResults.Successful) { return(readResults); } Reader.SkipWhitespace(); while (Reader.CanRead() && Reader.Peek() != '}') { int start = Reader.GetCursor(); readResults = ReadKey(out string key); if (!readResults.Successful) { return(readResults); } if (string.IsNullOrEmpty(key)) { Reader.SetCursor(start); return(ReadResults.Failure(CommandError.ExpectedKey().WithContext(Reader))); } readResults = Reader.Expect(':'); if (!readResults.Successful) { return(readResults); } readResults = ReadValue(out INbtTag value); if (!readResults.Successful) { return(readResults); } compound.Add(key, value); if (!HasElementSeparator()) { break; } if (Reader.CanRead()) { continue; } return(ReadResults.Failure(CommandError.ExpectedKey().WithContext(Reader))); } return(Reader.Expect('}')); }
public ReadResults ReadDouble(out WorldCoordinate result) { result = default; if (!StringReader.CanRead()) { return(ReadResults.Failure(CommandError.ExpectedCoordinate().WithContext(StringReader))); } if (StringReader.Peek() == '^') { return(ReadResults.Failure(CommandError.MixedCoordinateType().WithContext(StringReader))); } bool isRelative = IsRelative(); int start = StringReader.GetCursor(); if (StringReader.AtEndOfArgument() || (UseBedrock && !IsNumberPart(StringReader.Peek()))) { result = new WorldCoordinate(isRelative ? 0.0d : 0.5d, isRelative); return(ReadResults.Success()); } ReadResults readResults = StringReader.ReadDouble(out double value); if (!readResults.Successful) { return(readResults); } string number = StringReader.GetString()[start..StringReader.GetCursor()];
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out NbtPath result) { result = default; int start = reader.GetCursor(); bool isRoot = true; ReadResults readResults; while (!reader.AtEndOfArgument()) { readResults = ParseNode(reader, isRoot); if (!readResults.Successful) { return(readResults); } isRoot = false; if (!reader.CanRead()) { continue; } char c = reader.Peek(); if (c == ' ' || c == '[' || c == '{') { continue; } readResults = reader.Expect('.'); if (!readResults.Successful) { return(readResults); } } result = new NbtPath(reader.GetString()[start..reader.GetCursor()]);
private static ReadResults ReadSort(EntitySelectorParser parser, IStringReader reader, string originalName, int previousStart, DispatcherResources resources) { if (parser.IsSorted()) { reader.SetCursor(previousStart); return(ReadResults.Failure(CommandError.InapplicableOption(originalName).WithContext(reader))); } int start = reader.GetCursor(); ReadResults readResults = reader.ReadUnquotedString(out string sort); if (!readResults.Successful) { return(readResults); } if (resources.Sorts.Contains(sort)) { parser.AddArgument(new ParsedArgument <Literal>(new Literal(sort), false)); return(ReadResults.Success()); } else { reader.SetCursor(start); return(ReadResults.Failure(CommandError.UnknownSort(sort).WithContext(reader))); } }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out EntitySelector result) { int start = reader.GetCursor(); EntitySelectorParser entitySelectorParser = new EntitySelectorParser(reader, resources, UseBedrock); ReadResults readResults = entitySelectorParser.Parse(out result); if (!readResults.Successful) { return(readResults); } if (result.MaxResults > 1 && SingleEntity) { reader.SetCursor(start); if (PlayersOnly) { return(ReadResults.Failure(CommandError.SelectorTooManyPlayers().WithContext(reader))); } else { return(ReadResults.Failure(CommandError.SelectorTooManyEntities().WithContext(reader))); } } if (result.IncludesEntities && PlayersOnly && !result.IsSelf) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.SelectorPlayersOnly().WithContext(reader))); } return(ReadResults.Success()); }
public EntitySelectorParser(IStringReader reader, DispatcherResources resources, bool useBedrock) { Reader = reader; Start = reader.GetCursor(); Resources = resources; UseBedrock = useBedrock; }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Message result) { result = default; string message = reader.GetRemaining(); Dictionary <int, EntitySelector> selectors = new Dictionary <int, EntitySelector>(); while (reader.CanRead()) { if (reader.Peek() == '@') { if (reader.CanRead(2) && "parse".Contains(reader.Peek(1))) { int start = reader.GetCursor(); ReadResults readResults = new EntitySelectorParser(reader, resources, UseBedrock).Parse(out EntitySelector entitySelector); if (!readResults.Successful) { return(readResults); } selectors.Add(start, entitySelector); } else { reader.Skip(2); } continue; } reader.Skip(); } result = new Message(message, selectors); return(ReadResults.Success()); }
public override ReadResults Parse(IStringReader reader, CommandContext builder, DispatcherResources resources) { int start = reader.GetCursor(); int end = Parse(reader); if (end > -1) { ParsedArgument <Literal> parsed = new ParsedArgument <Literal>(new Literal(reader.GetString()[start..end]), builder.InRoot);
public static ReadResults TryRead(IStringReader stringReader, out ResourceLocation result) { int start = stringReader.GetCursor(); while (stringReader.CanRead() && IsAllowedInResourceLocation(stringReader.Peek())) { stringReader.Skip(); } string input = stringReader.GetString()[start..stringReader.GetCursor()];
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out UUID result) { int start = reader.GetCursor(); while (reader.CanRead() && IsUuidPart(reader.Peek())) { reader.Skip(); } string uuid = reader.GetString()[start..reader.GetCursor()];
public ReadResults ByName(out ObjectiveCriterion result) { int start = StringReader.GetCursor(); while (!StringReader.AtEndOfArgument()) { StringReader.Skip(); } string criterion = StringReader.GetString()[start..StringReader.GetCursor()];
public ReadResults ReadSpecial(out IJsonArgument result) { int start = StringReader.GetCursor(); while (StringReader.CanRead() && IsAllowedInput(StringReader.Peek())) { StringReader.Skip(); } string s = StringReader.GetString()[start..StringReader.GetCursor()];
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Operation result) { result = default; int start = reader.GetCursor(); while (!reader.AtEndOfArgument()) { reader.Skip(); } string operation = reader.GetString()[start..reader.GetCursor()];
public CommandResults Parse(string command, IStringReader reader) { CommandContext contextBuilder = new CommandContext(reader.GetCursor()); ParseResults parseResults = ParseNodes(Root, reader, contextBuilder); if (parseResults.Reader.CanRead()) { if (parseResults.Errors.Count > 0) { return(new CommandResults(false, parseResults.Errors[^ 1], parseResults.Context.Results));
public IEnumerable <Node> GetRelevantNodes(IStringReader reader) { if (Literals.Count > 0) { int start = reader.GetCursor(); while (!reader.AtEndOfArgument()) { reader.Skip(); } string value = reader.GetString()[start..reader.GetCursor()];
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out StructureRotation result) { result = default; int start = reader.GetCursor(); while (reader.CanRead() && IsUnquotedStringPart(reader.Peek())) { reader.Skip(); } string structureRotation = reader.GetString()[start..reader.GetCursor()];
private ReadResults CheckComponents(EntitySelectorParser parser, IStringReader reader, DispatcherResources resources) { if (Contents != null) { CommandContext context = new CommandContext(reader.GetCursor()); ReadResults readResults = Contents.Parse(reader, context, resources); if (readResults.Successful) { parser.AddArgument(context.Results[0]); } return(readResults); } return(ReadResults.Success()); }
public override ReadResults Validate(JsonObject obj, string key, ComponentReader componentReader, Components components, IStringReader reader, int start, DispatcherResources resources) { ComponentArray componentArray = new ComponentArray(); int end = reader.GetCursor(); ReadResults readResults = componentArray.Validate(obj, key, componentReader, components, reader, start, resources); if (!readResults.Successful) { reader.SetCursor(end); ComponentRoot componentRoot = new ComponentRoot(); return(componentRoot.Validate(obj, key, componentReader, components, reader, start, resources)); } return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Angle result) { int start = reader.GetCursor(); ReadResults readResults = new AngleParser(reader).Read(out result); if (!readResults.Successful) { return(readResults); } if (float.IsNaN(result.Value) || float.IsInfinity(result.Value)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.InvalidAngle().WithContext(reader))); } return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out HashSet <char> result) { result = new HashSet <char>(); int start = reader.GetCursor(); while (!reader.AtEndOfArgument()) { char c = reader.Read(); if (!Characters.Contains(c) || result.Contains(c)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.InvalidSwizzle(Characters).WithContext(reader))); } result.Add(c); } return(ReadResults.Success()); }
private static ReadResults SetExecutor(EntitySelectorParser parser, IStringReader reader, bool negated, string originalName, int previousStart, DispatcherResources resources, bool useBedrock) { if (parser.IsTypeLimited()) { reader.SetCursor(previousStart); return(ReadResults.Failure(CommandError.InapplicableOption(originalName).WithContext(reader))); } int start = reader.GetCursor(); bool isTag = false; if (reader.CanRead() && reader.Peek() == '#') { reader.Skip(); isTag = true; } ReadResults readResults = ResourceLocation.TryRead(reader, out ResourceLocation entity); if (!readResults.Successful) { return(readResults); } if (ResourceLocation.PLAYER_ENTITY.Equals(entity) && !negated) { parser.SetIncludesEntities(false); } else if (useBedrock) { // Temporary return(ReadResults.Success()); } else if (!isTag) { if (!resources.Entities.Contains(entity)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.InvalidEntityType(entity).WithContext(reader))); } } parser.AddArgument(new ParsedArgument <Entity>(new Entity(entity, isTag), false)); return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out GameType result) { result = default; int start = reader.GetCursor(); ReadResults readResults = reader.ReadUnquotedString(out string gamemode); if (!readResults.Successful) { return(readResults); } if (!resources.Gamemodes.TryGet(gamemode, out result)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.UnknownGamemode(gamemode).WithContext(reader))); } return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Component result) { result = default; if (!reader.CanRead()) { return(ReadResults.Failure(CommandError.IncorrectArgument().WithContext(reader))); } int start = reader.GetCursor(); ReadResults readResults = new JsonReader(reader).ReadAny(out IJsonArgument json); if (!readResults.Successful) { return(readResults); } result = new Component(json); return(new ComponentReader(reader, start, resources).ValidateFromRoot(json, resources.Components)); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out ItemSlot result) { result = default; int start = reader.GetCursor(); ReadResults readResults = reader.ReadUnquotedString(out string slot); if (!readResults.Successful) { return(readResults); } if (!resources.ItemSlots.Contains(slot)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.UnknownSlot(slot).WithContext(reader))); } result = new Results.Arguments.ItemSlot(slot); return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Anchor result) { result = default; int start = reader.GetCursor(); ReadResults readResults = reader.ReadUnquotedString(out string anchor); if (!readResults.Successful) { return(readResults); } if (!resources.Anchors.Contains(anchor)) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.InvalidEntityAnchor(anchor).WithContext(reader))); } result = new Anchor(anchor); return(ReadResults.Success()); }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out long result) { int start = reader.GetCursor(); ReadResults readResults = reader.ReadLong(out result); if (readResults.Successful) { if (result < Minimum) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.LongTooLow(result, Minimum).WithContext(reader))); } if (result > Maximum) { reader.SetCursor(start); return(ReadResults.Failure(CommandError.LongTooHigh(result, Maximum).WithContext(reader))); } } return(readResults); }
private static ReadResults ReadGamemode(EntitySelectorParser parser, IStringReader reader, DispatcherResources resources) { int start = reader.GetCursor(); ReadResults readResults = reader.ReadUnquotedString(out string gamemode); if (!readResults.Successful) { return(readResults); } if (resources.Gamemodes.TryGet(gamemode, out _)) { parser.AddArgument(new ParsedArgument <Literal>(new Literal(gamemode), false)); return(ReadResults.Success()); } else { reader.SetCursor(start); return(ReadResults.Failure(CommandError.UnknownGamemode(gamemode).WithContext(reader))); } }
public ReadResults Parse(IStringReader reader, DispatcherResources resources, out ScoreHolder result) { result = default; if (reader.CanRead() && reader.Peek() == '@') { EntitySelectorParser entitySelectorParser = new EntitySelectorParser(reader, resources, UseBedrock); ReadResults readResults = entitySelectorParser.Parse(out EntitySelector entitySelector); if (!readResults.Successful) { return(readResults); } if (!Multiple && entitySelector.MaxResults > 1) { return(ReadResults.Failure(CommandError.SelectorTooManyEntities())); } result = new ScoreHolder(null, entitySelector); return(ReadResults.Success()); } if (UseBedrock) { ReadResults readResults = reader.ReadString(out string name); if (!readResults.Successful) { return(readResults); } result = new ScoreHolder(name, null); return(ReadResults.Success()); } else { int start = reader.GetCursor(); while (!reader.AtEndOfArgument()) { reader.Skip(); } string name = reader.GetString()[start..reader.GetCursor()];