code: private static Geometry readPoints(GeometryFactory geomFactory, List<Integer> geomCmds, Vec2d cursor) {
  
          // Guard: must have header
          if(geomCmds.isEmpty()) {
              return null;
          }
  
          /** Geometry command index */
          int i = 0;
  
          // Read command header
          final int cmdHdr = geomCmds.get(i++);
          final int cmdLength = GeomCmdHdr.getCmdLength(cmdHdr);
          final GeomCmd cmd = GeomCmdHdr.getCmd(cmdHdr);
  
          // Guard: command type
          if(cmd != GeomCmd.MoveTo) {
              return null;
          }
  
          // Guard: minimum command length
          if(cmdLength < 1) {
              return null;
          }
  
          // Guard: header data unsupported by geometry command buffer
          //  (require header and at least 1 value * 2 params)
          if(cmdLength * GeomCmd.MoveTo.getParamCount() + 1 > geomCmds.size()) {
              return null;
          }
  
          final CoordinateSequence coordSeq = geomFactory.getCoordinateSequenceFactory().create(cmdLength, 2);
          int coordIndex = 0;
          Coordinate nextCoord;
  
          while(i < geomCmds.size() - 1) {
              cursor.add(
                      ZigZag.decode(geomCmds.get(i++)),
                      ZigZag.decode(geomCmds.get(i++))
              );
  
              nextCoord = coordSeq.getCoordinate(coordIndex++);
              nextCoord.setOrdinate(0, cursor.x);
              nextCoord.setOrdinate(1, cursor.y);
          }
  
          return coordSeq.size() == 1 ? geomFactory.createPoint(coordSeq) : geomFactory.createMultiPoint(coordSeq);
      }
docs: Create {@link Point} or {@link MultiPoint} from MVT geometry drawing commands.
  
  @param geomFactory creates JTS geometry
  @param geomCmds contains MVT geometry commands
  @param cursor contains current MVT extent position
  @return JTS geometry or null on failure