
#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagLong public long getAsLong:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagLong public long getAsLong();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagLong public long getAsLong:asLong();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagLong public long getAsLong:d();
#case else:    #remap net.minecraft.nbt.NBTTagLong public long getAsLong:c();
#endselect

#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagInt public int getAsInt:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagInt public int getAsInt();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagInt public int getAsInt:asInt();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagInt public int getAsInt:e();
#case else:    #remap net.minecraft.nbt.NBTTagInt public int getAsInt:d();
#endselect

#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagShort public short getAsShort:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagShort public short getAsShort();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagShort public short getAsShort:asShort();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagShort public short getAsShort:f();
#case else:    #remap net.minecraft.nbt.NBTTagShort public short getAsShort:e();
#endselect

#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagByte public byte getAsByte:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagByte public byte getAsByte();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagByte public byte getAsByte:asByte();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagByte public byte getAsByte:g();
#case else:    #remap net.minecraft.nbt.NBTTagByte public byte getAsByte:f();
#endselect

#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagString public String getAsString:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagString public String getAsString();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagString public String getAsString:asString();
#case 1.13:    #remap net.minecraft.nbt.NBTTagString public String getAsString:b_();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagString public String getAsString:c_();
#case else:    #remap net.minecraft.nbt.NBTTagString public String getAsString:a_();
#endselect

#select version >=
#case 1.21.5:  #remap net.minecraft.nbt.NBTTagFloat public float getAsFloat:value();
#case 1.18:    #remap net.minecraft.nbt.NBTTagFloat public float getAsFloat();
#case 1.13.2:  #remap net.minecraft.nbt.NBTTagFloat public float getAsFloat:asFloat();
#case 1.10.2:  #remap net.minecraft.nbt.NBTTagFloat public float getAsFloat:i();
#case else:    #remap net.minecraft.nbt.NBTTagFloat public float getAsFloat:h();
#endselect

#if version < 1.18 && forge_nms_obfuscated
    #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble:h();
#else
  #select version >=
  #case 1.21.5:  #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble:value();
  #case 1.18:    #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble();
  #case 1.11:    #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble:asDouble();
  #case 1.10.2:  #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble:h();
  #case else:    #remap net.minecraft.nbt.NBTTagDouble public double getAsDouble:g();
  #endselect
#endif

#select version >=
#case 1.18:    #remap net.minecraft.nbt.NBTTagCompound public net.minecraft.nbt.NBTBase put(String name, net.minecraft.nbt.NBTBase value);
#case 1.14:    #remap net.minecraft.nbt.NBTTagCompound public net.minecraft.nbt.NBTBase put:set(String name, net.minecraft.nbt.NBTBase value);
#case else:    #remap net.minecraft.nbt.NBTTagCompound public void put:set(String name, net.minecraft.nbt.NBTBase value);
#endselect

#if version >= 1.18
    #remap net.minecraft.nbt.NBTTagCompound public void putInt(String name, int value);
    #remap net.minecraft.nbt.NBTTagCompound public void putBoolean(String name, boolean value);
    #remap net.minecraft.nbt.NBTTagCompound public void putByte(String name, byte value);
    #remap net.minecraft.nbt.NBTTagCompound public void putString(String name, String value);
#else
    #remap net.minecraft.nbt.NBTTagCompound public void putInt:setInt(String name, int value);
    #remap net.minecraft.nbt.NBTTagCompound public void putBoolean:setBoolean(String name, boolean value);
    #remap net.minecraft.nbt.NBTTagCompound public void putByte:setByte(String name, byte value);
    #remap net.minecraft.nbt.NBTTagCompound public void putString:setString(String name, String value);
#endif

#if version >= 1.18
    #remap net.minecraft.nbt.NBTTagCompound public boolean isEmpty();
#elseif forge_nms_obfuscated
    #remap net.minecraft.nbt.NBTTagCompound public boolean isEmpty:b_();
#else
    #remap net.minecraft.nbt.NBTTagCompound public boolean isEmpty();
#endif

#if version >= 1.18
    #remap net.minecraft.nbt.NBTTagList public boolean isEmpty();
#elseif forge_nms_obfuscated
    #remap net.minecraft.nbt.NBTTagList public boolean isEmpty:b_();
#else
    #remap net.minecraft.nbt.NBTTagList public boolean isEmpty();
#endif

#if version >= 1.16.5 && forge == mohist
    // Mohist 1.16.5+ remapping bug
    #remap net.minecraft.nbt.NBTTagList public NBTBase get:k(int index);
#elseif version >= 1.16.5 && forge == magma
    // Magma 1.16.5+ remapping bug
    #remap net.minecraft.nbt.NBTTagList public NBTBase get:k(int index);
#elseif version >= 1.13
    #remap net.minecraft.nbt.NBTTagList public NBTBase get(int index);
#elseif version >= 1.12
    #remap net.minecraft.nbt.NBTTagList public NBTBase get:i(int index);
#elseif version >= 1.9
    #remap net.minecraft.nbt.NBTTagList public NBTBase get:h(int index);
#else
    #remap net.minecraft.nbt.NBTTagList public NBTBase get:g(int index);
#endif

#if version >= 1.15 && version < 1.18
    #remap net.minecraft.nbt.NBTTagString   public static NBTTagString valueOf:a(String data);
    #remap net.minecraft.nbt.NBTTagByte     public static NBTTagByte valueOf:a(byte data);
    #remap net.minecraft.nbt.NBTTagShort    public static NBTTagShort valueOf:a(short data);
    #remap net.minecraft.nbt.NBTTagInt      public static NBTTagInt valueOf:a(int data);
    #remap net.minecraft.nbt.NBTTagLong     public static NBTTagLong valueOf:a(long data);
    #remap net.minecraft.nbt.NBTTagFloat    public static NBTTagFloat valueOf:a(float data);
    #remap net.minecraft.nbt.NBTTagDouble   public static NBTTagDouble valueOf:a(double data);
#else
