### Elasticsearch Version

8.2.0

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

Elastic Cloud on GCP

### Problem Description

We use Mapbox GL JS to retrieve tiles from the new vector tile search API.

Everything work as expected until we try to extrude the features to display it in 3D:
```
map.addLayer({
          id: 'building_layer',
          type: "fill-extrusion",
          source: 'building_source',
          minzoom: 12,
          "source-layer": "hits",
          paint: {
            "fill-extrusion-color": "#00ade6",
            "fill-extrusion-height": 2,
          },
        });
```

As you can see on the image, the foreground extrusions is missing:
![Screen Shot 2022-05-06 at 4 44 36 PM](https://user-images.githubusercontent.com/8347022/167377262-420d7cef-dae7-4a4a-805a-93de5a0ebfac.png)

When I decode the tile using node-mapnik I get:
```
[{"name":"hits","extent":4096,"version":2,"features":[{"type":3,"properties":{"_id":"59633","_index":"building-v1","id":59633,"gross_floor":180,"floor_nb":2,"unit_nb":1,"protected_rank":0,"principal_type":"Zone d'habitation de très faible densité","city_name":"La Tour-de-Peilz"},"geometry":[9,934,5244,26,22,18,6,7,21,17,15]}]},{"name":"meta","extent":4096,"version":2,"features":[{"type":3,"properties":{"_shards.failed":0,"_shards.skipped":0,"_shards.successful":1,"_shards.total":1,"timed_out":false,"took":1},"geometry":[9,0,8192,26,8192,0,0,8191,8191,0,15]}]}]
```

Then when I try to get the validity report of this tile with node-mapnik I got the following error:
```
[Error: Vector Tile has POLYGON with first ring clockwise. It is not valid according to v2 of VT spec.]
```

As @iverase  mentionned it [here](https://discuss.elastic.co/t/foreground-extrusions-missing-with-vector-tile-returned-by-the-vector-tile-search-api/304137), this looks very similar to the bug fixed in the upstream library you are using and seems the fix has never been released:
https://github.com/wdtinc/mapbox-vector-tile-java/issues/36






### Steps to Reproduce

Create any index with a geoshape:
```
PUT /extrusion_issue
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_shape"
      }
    }
  }
}
```

Insert a document with polygon:
```
POST /extrusion_issue/_doc
{
  "location" : {
    "type" : "Polygon",
    "coordinates" : [
        [
          [
            6.865488747,
            46.459649483
          ],
          [
            6.865734629,
            46.459515699
          ],
          [
            6.865794859,
            46.45956863
          ],
          [
            6.865549366,
            46.459702596
          ],
          [
            6.865488747,
            46.459649483
          ]
        ]
      ]
  }
}
```

Use mapbox GL JS to retrieve the tile form the vector tile search API and extrude the polygon:
```
map.addLayer({
          id: 'building_layer',
          type: "fill-extrusion",
          source: 'building_source',
          minzoom: 12,
          "source-layer": "hits",
          paint: {
            "fill-extrusion-color": "#00ade6",
            "fill-extrusion-height": 2,
          },
        });
```


### Logs (if relevant)

_No response_
x-pack/plugin/vector-tile/src/main/java/org/elasticsearch/xpack/vectortile/feature/FeatureFactory.java
if (polygon.getNumberOfHoles() == 0) {
                return geomFactory.createPolygon(outerShell);
            }
            final org.locationtech.jts.geom.LinearRing[] holes = new org.locationtech.jts.geom.LinearRing[polygon.getNumberOfHoles()];
            for (int i = 0; i < polygon.getNumberOfHoles(); i++) {
                holes[i] = buildLinearRing(polygon.getHole(i));
            }
            return geomFactory.createPolygon(outerShell, holes);
        }
        private org.locationtech.jts.geom.LinearRing buildLinearRing(LinearRing ring) throws RuntimeException {
            final Coordinate[] coordinates = new Coordinate[ring.length()];
            for (int i = 0; i < ring.length(); i++) {
                final double x = SphericalMercatorUtils.lonToSphericalMercator(ring.getX(i));
                final double y = SphericalMercatorUtils.latToSphericalMercator(ring.getY(i));
                coordinates[i] = new Coordinate(x, y);
            }
            return geomFactory.createLinearRing(coordinates);
        }
        @Override
        public org.locationtech.jts.geom.Geometry visit(Rectangle rectangle) throws RuntimeException {
            final double xMin = SphericalMercatorUtils.lonToSphericalMercator(rectangle.getMinX());
            final double yMin = SphericalMercatorUtils.latToSphericalMercator(rectangle.getMinY());
            final double xMax = SphericalMercatorUtils.lonToSphericalMercator(rectangle.getMaxX());
            final double yMax = SphericalMercatorUtils.latToSphericalMercator(rectangle.getMaxY());
            final Envelope envelope = new Envelope(xMin, xMax, yMin, yMax);
            return geomFactory.toGeometry(envelope);
        }
    }
    private static class MvtCoordinateSequenceFilter implements CoordinateSequenceFilter {
        private final int extent;