/// <exception cref="CommandSyntaxException" />
        public override double Parse(IStringReader reader)
        {
            var start  = reader.Cursor;
            var result = reader.ReadDouble();

            if (result < Minimum)
            {
                reader.Cursor = start;
                throw CommandSyntaxException.BuiltInExceptions.DoubleTooLow().CreateWithContext(reader, result, Minimum);
            }
            if (result > Maximum)
            {
                reader.Cursor = start;
                throw CommandSyntaxException.BuiltInExceptions.DoubleTooHigh().CreateWithContext(reader, result, Maximum);
            }
            return(result);
        }
        public ReadResults ReadInteger(out WorldCoordinate result)
        {
            result = default;
            if (!StringReader.CanRead())
            {
                return(ReadResults.Failure(CommandError.ExpectedBlockPosition().WithContext(StringReader)));
            }
            if (StringReader.Peek() == '^')
            {
                return(ReadResults.Failure(CommandError.MixedCoordinateType().WithContext(StringReader)));
            }

            bool isRelative = IsRelative();

            double value = 0.0d;

            if (!StringReader.AtEndOfArgument())
            {
                if (UseBedrock && !IsNumberPart(StringReader.Peek()))
                {
                    result = new WorldCoordinate(value, isRelative);
                    return(ReadResults.Success());
                }

                ReadResults readResults;
                if (isRelative)
                {
                    readResults = StringReader.ReadDouble(out value);
                }
                else
                {
                    readResults = StringReader.ReadInteger(out int integerValue);
                    value       = integerValue;
                }
                if (!readResults.Successful)
                {
                    return(readResults);
                }
            }

            result = new WorldCoordinate(value, isRelative);
            return(ReadResults.Success());
        }
 private ReadResults ReadDouble(out double result)
 {
     result = default;
     if (!StringReader.CanRead())
     {
         return(ReadResults.Failure(CommandError.ExpectedCoordinate().WithContext(StringReader)));
     }
     if (StringReader.Peek() != '^')
     {
         return(ReadResults.Failure(CommandError.MixedCoordinateType().WithContext(StringReader)));
     }
     StringReader.Skip();
     if (StringReader.AtEndOfArgument() || (UseBedrock && !IsNumberPart(StringReader.Peek())))
     {
         result = 0.0d;
         return(ReadResults.Success());
     }
     else
     {
         return(StringReader.ReadDouble(out result));
     }
 }
        public ReadResults Parse(IStringReader reader, DispatcherResources resources, out double result)
        {
            int         start       = reader.GetCursor();
            ReadResults readResults = reader.ReadDouble(out result);

            if (readResults.Successful)
            {
                if (result < Minimum)
                {
                    reader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.DoubleTooLow(result, Minimum).WithContext(reader)));
                }

                if (result > Maximum)
                {
                    reader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.DoubleTooHigh(result, Maximum).WithContext(reader)));
                }
            }

            return(readResults);
        }