All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.NBTCompressedStreamTools Maven / Gradle / Ivy

There is a newer version: 2.4.0
Show newest version
package net.minecraft.server;

import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class NBTCompressedStreamTools {

  public static NBTTagCompound a(InputStream inputstream) throws IOException {
    DataInputStream datainputstream = new DataInputStream(new BufferedInputStream(new GZIPInputStream(inputstream)));

    NBTTagCompound nbttagcompound;

    try {
      nbttagcompound = a(datainputstream, NBTReadLimiter.a);
    } finally {
      datainputstream.close();
    }

    return nbttagcompound;
  }

  public static void a(NBTTagCompound nbttagcompound, OutputStream outputstream) throws IOException {
    try (DataOutputStream dataoutputstream = new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(outputstream)))) {
      a(nbttagcompound, (DataOutput) dataoutputstream);
    }
  }

  // ChestMC start - readable methods.
  public static void save(NBTTagCompound nbttagcompound, OutputStream outputstream) throws IOException {
    a(nbttagcompound, outputstream);
  }

  public static NBTTagCompound load(InputStream inputstream) throws IOException {
    return a(inputstream);
  }
  // ChestMC end.

  public static NBTTagCompound a(DataInputStream datainputstream) throws IOException {
    return a(datainputstream, NBTReadLimiter.a);
  }

  public static NBTTagCompound a(DataInput datainput, NBTReadLimiter nbtreadlimiter) throws IOException {
    // Spigot start
    if (datainput instanceof io.netty.buffer.ByteBufInputStream) {
      datainput = new DataInputStream(new org.spigotmc.LimitStream((InputStream) datainput, nbtreadlimiter));
    }
    // Spigot end
    NBTBase nbtbase = a(datainput, 0, nbtreadlimiter);

    if (nbtbase instanceof NBTTagCompound) {
      return (NBTTagCompound) nbtbase;
    } else {
      throw new IOException("Root tag must be a named compound tag");
    }
  }

  public static void a(NBTTagCompound nbttagcompound, DataOutput dataoutput) throws IOException {
    a((NBTBase) nbttagcompound, dataoutput);
  }

  private static void a(NBTBase nbtbase, DataOutput dataoutput) throws IOException {
    dataoutput.writeByte(nbtbase.getTypeId());
    if (nbtbase.getTypeId() != 0) {
      dataoutput.writeUTF("");
      nbtbase.write(dataoutput);
    }
  }

  private static NBTBase a(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException {
    byte b0 = datainput.readByte();

    if (b0 == 0) {
      return new NBTTagEnd();
    } else {
      datainput.readUTF();
      NBTBase nbtbase = NBTBase.createTag(b0);

      try {
        nbtbase.load(datainput, i, nbtreadlimiter);
        return nbtbase;
      } catch (IOException ioexception) {
        CrashReport crashreport = CrashReport.a(ioexception, "Loading NBT data");
        CrashReportSystemDetails crashreportsystemdetails = crashreport.a("NBT Tag");

        crashreportsystemdetails.a("Tag name", "[UNNAMED TAG]");
        crashreportsystemdetails.a("Tag type", b0);
        throw new ReportedException(crashreport);
      }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy