Files
MinecraftConsoles/Minecraft.World/NbtIo.cpp
ModMaker101 a9be52c41a Project modernization (#630)
* Fixed boats falling and a TP glitch #266

* Replaced every C-style cast with C++ ones

* Replaced every C-style cast with C++ ones

* Fixed boats falling and a TP glitch #266

* Updated NULL to nullptr and fixing some type issues

* Modernized and fixed a few bugs

- Replaced most instances of `NULL` with `nullptr`.
- Replaced most `shared_ptr(new ...)` with `make_shared`.
- Removed the `nullptr` macro as it was interfering with the actual nullptr keyword in some instances.

* Fixing more conflicts

* Replace int loops with size_t and start work on overrides
2026-03-08 09:56:03 +07:00

65 lines
2.0 KiB
C++

#include "stdafx.h"
#include "InputOutputStream.h"
#include "NbtIo.h"
CompoundTag *NbtIo::readCompressed(InputStream *in)
{
MemSect(26);
// 4J - this was using a try/finally block
DataInputStream dis = DataInputStream(in); // 4J - was new GZIPInputStream as well
CompoundTag *ret = NbtIo::read((DataInput *)&dis);
dis.close();
MemSect(0);
return ret;
}
void NbtIo::writeCompressed(CompoundTag *tag, OutputStream *out)
{
// 4J - this was using a try/finally block
// 4J Stu - Buffer output in 1024 byte chunks so that we can allocate properly in the save file
BufferedOutputStream bos = BufferedOutputStream( out, 1024 );
DataOutputStream dos = DataOutputStream(&bos); // 4J - was new GZIPOutputStream as well
NbtIo::write(tag, &dos);
dos.close();
}
// Reads tags from a stream created from the input buffer. Doesn't free the data in the source buffer.
CompoundTag *NbtIo::decompress(byteArray buffer)
{
ByteArrayInputStream bais = ByteArrayInputStream(buffer);
// 4J - this was using a try/finally block
DataInputStream in = DataInputStream(&bais); // 4J - was new GZIPInputStream as well
CompoundTag *ret = NbtIo::read((DataInput *)&in);
bais.reset(); // This stops the buffer referenced by the input stream from being freed when it goes out of context
in.close();
return ret;
}
byteArray NbtIo::compress(CompoundTag *tag)
{
// 4J - this was using a try/finally block
ByteArrayOutputStream baos = ByteArrayOutputStream();
DataOutputStream dos = DataOutputStream(&baos); // 4J - was new GZIPOutputStream as well
NbtIo::write(tag, &dos);
byteArray ret(baos.buf.length);
System::arraycopy(baos.buf,0,&ret,0,baos.buf.length);
dos.close();
return ret;
}
CompoundTag *NbtIo::read(DataInput *dis)
{
Tag *tag = Tag::readNamedTag(dis);
if( tag->getId() == Tag::TAG_Compound ) return static_cast<CompoundTag *>(tag);
if(tag!=nullptr) delete tag;
// Root tag must be a named compound tag
return nullptr;
}
void NbtIo::write(CompoundTag *tag, DataOutput *dos)
{
Tag::writeNamedTag(tag, dos);
}