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

package MyGame.Example;

import com.google.flatbuffers.FlatBufferBuilder;

public class AnyAmbiguousAliasesUnion {
  private byte type;
  private Object value;

  public byte getType() { return type; }

  public void setType(byte type) { this.type = type; }

  public Object getValue() { return value; }

  public void setValue(Object value) { this.value = value; }

  public AnyAmbiguousAliasesUnion() {
    this.type = AnyAmbiguousAliases.NONE;
    this.value = null;
  }

  public MyGame.Example.MonsterT asM1() { return (MyGame.Example.MonsterT) value; }
  public MyGame.Example.MonsterT asM2() { return (MyGame.Example.MonsterT) value; }
  public MyGame.Example.MonsterT asM3() { return (MyGame.Example.MonsterT) value; }

  public static int pack(FlatBufferBuilder builder, AnyAmbiguousAliasesUnion _o) {
    switch (_o.type) {
      case AnyAmbiguousAliases.M1: return MyGame.Example.Monster.pack(builder, _o.asM1());
      case AnyAmbiguousAliases.M2: return MyGame.Example.Monster.pack(builder, _o.asM2());
      case AnyAmbiguousAliases.M3: return MyGame.Example.Monster.pack(builder, _o.asM3());
      default: return 0;
    }
  }
}

