// automatically generated by the FlatBuffers compiler, do not modify

package MyGame.Example;

import java.nio.*;
import java.lang.*;
import java.util.*;
import com.google.flatbuffers.*;

public class StatT {
  private String id;
  private long val;
  private int count;

  public String getId() { return id; }

  public void setId(String id) { this.id = id; }

  public long getVal() { return val; }

  public void setVal(long val) { this.val = val; }

  public int getCount() { return count; }

  public void setCount(int count) { this.count = count; }


  public StatT() {
    this.id = null;
    this.val = 0L;
    this.count = 0;
  }
}

