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

package MyGame.Example;

import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.BooleanVector;
import com.google.flatbuffers.ByteVector;
import com.google.flatbuffers.Constants;
import com.google.flatbuffers.DoubleVector;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.FloatVector;
import com.google.flatbuffers.IntVector;
import com.google.flatbuffers.LongVector;
import com.google.flatbuffers.ShortVector;
import com.google.flatbuffers.StringVector;
import com.google.flatbuffers.Struct;
import com.google.flatbuffers.Table;
import com.google.flatbuffers.UnionVector;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class StructOfStructsT {
  private MyGame.Example.AbilityT a;
  private MyGame.Example.TestT b;
  private MyGame.Example.AbilityT c;

  public MyGame.Example.AbilityT getA() { return a; }

  public void setA(MyGame.Example.AbilityT a) { this.a = a; }

  public MyGame.Example.TestT getB() { return b; }

  public void setB(MyGame.Example.TestT b) { this.b = b; }

  public MyGame.Example.AbilityT getC() { return c; }

  public void setC(MyGame.Example.AbilityT c) { this.c = c; }


  public StructOfStructsT() {
    this.a = new MyGame.Example.AbilityT();
    this.b = new MyGame.Example.TestT();
    this.c = new MyGame.Example.AbilityT();
  }
}

