// This Header is auto generated by BDSLiteLoader Toolchain
#pragma once
#define AUTO_GENERATED
#include "../Global.h"

#define BEFORE_EXTRA

#undef BEFORE_EXTRA

class CompoundTagVariant {

#define AFTER_EXTRA
public:
    inline Tag::Type getTagType() {
        return dAccess<Tag::Type, 40>(this);
    }
    inline Tag* asTag() {
        return (Tag*)this;
    }
    inline EndTag* asEndTag() {
        return (EndTag*)this;
    }
    inline ByteTag* asByteTag() {
        return (ByteTag*)this;
    }
    inline ShortTag* asShortTag(){
        return (ShortTag*)this;
    }
    inline IntTag* asIntTag(){
        return (IntTag*)this;
    }
    inline Int64Tag* asInt64Tag(){
        return (Int64Tag*)this;
    }
    inline FloatTag* asFloatTag(){
        return (FloatTag*)this;
    }
    inline DoubleTag* asDoubleTag(){
        return (DoubleTag*)this;
    }
    inline StringTag* asStringTag(){
        return (StringTag*)this;
    }
    inline ListTag* asListTag(){
        return (ListTag*)this;
    }
    inline CompoundTag* asCompoundTag(){
        return (CompoundTag*)this;
    }
    inline ByteArrayTag* asByteArrayTag(){
        return (ByteArrayTag*)this;
    }
    inline IntArrayTag* asIntArrayTag(){
        return (IntArrayTag*)this;
    }
#undef AFTER_EXTRA
#ifndef DISABLE_CONSTRUCTOR_PREVENTION_COMPOUNDTAGVARIANT
public:
    class CompoundTagVariant& operator=(class CompoundTagVariant const &) = delete;
    CompoundTagVariant(class CompoundTagVariant const &) = delete;
    CompoundTagVariant() = delete;
#endif

public:
#ifdef ENABLE_VIRTUAL_FAKESYMBOL_COMPOUNDTAGVARIANT
#endif
    MCAPI class Tag & emplace(class Tag &&);
    MCAPI class Tag * get();
    MCAPI class Tag const * get() const;
    MCAPI ~CompoundTagVariant();

};