code: public boolean start() {
          synchronized (optOutLock) {
              // Did we opt out?
              if (isOptOut()) {
                  return false;
              }
  
              // Is metrics already running?
              if (thread != null) {
                  return true;
              }
  
              thread = new Thread(new Runnable() {
                  private boolean firstPost = true;
                  private long nextPost = 0L;
  
                  public void run() {
                      while (thread != null) {
                          if (nextPost == 0L || System.currentTimeMillis() > nextPost) {
                              try {
                                  // This has to be synchronized or it can collide with the disable method.
                                  synchronized (optOutLock) {
                                      // Disable Task, if it is running and the server owner decided to opt-out
                                      if (isOptOut() && thread != null) {
                                          Thread temp = thread;
                                          thread = null;
                                          // Tell all plotters to stop gathering information.
                                          for (Graph graph : graphs) {
                                              graph.onOptOut();
                                          }
                                          temp.interrupt(); // interrupting ourselves
                                          return;
                                      }
                                  }
  
                                  // We use the inverse of firstPost because if it is the first time we are posting,
                                  // it is not a interval ping, so it evaluates to FALSE
                                  // Each time thereafter it will evaluate to TRUE, i.e PING!
                                  postPlugin(!firstPost);
  
                                  // After the first post we set firstPost to false
                                  // Each post thereafter will be a ping
                                  firstPost = false;
                                  nextPost = System.currentTimeMillis() + (PING_INTERVAL * 60 * 1000);
                              } catch (IOException e) {
                                  if (debug) {
                                      System.out.println("[Metrics] " + e.getMessage());
                                  }
                              }
                          }
  
                          try {
                              Thread.sleep(100L);
                          } catch (InterruptedException e) {
                          }
                      }
                  }
              }, "MCStats / Plugin Metrics");
              thread.start();
  
              return true;
          }
      }
docs: Start measuring statistics. This will immediately create an async repeating task as the plugin and send the
  initial data to the metrics backend, and then after that it will post in increments of PING_INTERVAL * 1200
  ticks.
  
  @return True if statistics measuring is running, otherwise false.