1
0

More changes to the denotch map converter. Added some tags. Still debugging some parsing issues.

git-svn-id: http://mc-server.googlecode.com/svn/trunk@30 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
admin@omencraft.com 2011-10-31 02:24:44 +00:00
parent e2f1cf51c7
commit 2e7781f7f0
4 changed files with 189 additions and 26 deletions

View File

@ -74,13 +74,13 @@ int main () {
quicksort(toffarr, 0, 1023); //sort the array from smallest to larget offset locations so we only have to read through the file once. quicksort(toffarr, 0, 1023); //sort the array from smallest to larget offset locations so we only have to read through the file once.
for ( short ia = 0; ia < 1024; ia++ ) {//a region file can hold a maximum of 1024 chunks (32*32) for ( short ia = 0; ia < 1024; ia++ ) {//a region file can hold a maximum of 1024 chunks (32*32)
if (ia == 31) { ia++; } if (ia < 35 ) { //only run chunk # 3
if (toffarr[ia] < 8192) { //offsets of less than 8192 are impossible. 0 means there is no chunk in a particular location. if (toffarr[ia] < 8192) { //offsets of less than 8192 are impossible. 0 means there is no chunk in a particular location.
if (toffarr[ia] > 0) { cout << "ERROR 2s31 IN COLLECTED CHUNK OFFSETS " << toffarr[ia]; fclose(f); return false; } //values between 0 and 8192 should be impossible. if (toffarr[ia] > 0) { cout << "ERROR 2s31 IN COLLECTED CHUNK OFFSETS " << toffarr[ia]; fclose(f); return false; } //values between 0 and 8192 should be impossible.
//This file does not contain the max 1024 chunks, skip until we get to the first //This file does not contain the max 1024 chunks, skip until we get to the first
} else { // found a chunk offset value } else { // found a chunk offset value
//Chunk data begins with a (big-endian) four-byte length field which indicates the exact length of the remaining chunk data in bytes. The following byte indicates the compression scheme used for chunk data, and the remaining (length-1) bytes are the compressed chunk data. //Chunk data begins with a (big-endian) four-byte length field which indicates the exact length of the remaining chunk data in bytes. The following byte indicates the compression scheme used for chunk data, and the remaining (length-1) bytes are the compressed chunk data.
printf("Working on chunk %i\n", ia); printf("Working on chunk %i :: %i\n", ia, toffarr[ia]);
if( fread( &byte1, sizeof(byte1), 1, f) != 1 ) { cout << "ERROR 2t32 READING FROM FILE " << SourceFile; fclose(f); return false; } if( fread( &byte1, sizeof(byte1), 1, f) != 1 ) { cout << "ERROR 2t32 READING FROM FILE " << SourceFile; fclose(f); return false; }
if( fread( &byte2, sizeof(byte2), 1, f) != 1 ) { cout << "ERROR 2y51 READING FROM FILE " << SourceFile; fclose(f); return false; } if( fread( &byte2, sizeof(byte2), 1, f) != 1 ) { cout << "ERROR 2y51 READING FROM FILE " << SourceFile; fclose(f); return false; }
if( fread( &byte3, sizeof(byte3), 1, f) != 1 ) { cout << "ERROR 3424 READING FROM FILE " << SourceFile; fclose(f); return false; } if( fread( &byte3, sizeof(byte3), 1, f) != 1 ) { cout << "ERROR 3424 READING FROM FILE " << SourceFile; fclose(f); return false; }
@ -128,7 +128,7 @@ int main () {
//testing of nbtparser. //testing of nbtparser.
cNBTData* NBTData = new cNBTData(BlockData, (testr)); cNBTData* NBTData = new cNBTData(BlockData, (int)DestSize);
NBTData->ParseData(); NBTData->ParseData();
//NBTData->PrintData(); //NBTData->PrintData();
NBTData->OpenCompound(""); NBTData->OpenCompound("");
@ -160,7 +160,8 @@ int main () {
//printf("array Blocks: %i\n", NBTData->GetByteArray("Blocks")[i]); //printf("array Blocks: %i\n", NBTData->GetByteArray("Blocks")[i]);
} }
//printf("xPos: %i\n", NBTData->GetInteger("xPos") ); printf("Coord(X,Z): %i,%i\n", NBTData->GetInteger("xPos"), NBTData->GetInteger("zPos") );
NBTData->CloseCompound();// Close the compounds after you're done NBTData->CloseCompound();// Close the compounds after you're done
NBTData->CloseCompound(); NBTData->CloseCompound();
@ -174,6 +175,7 @@ int main () {
} }
} }
} //only run chunk # 3
//if (ia == 30) { break; } //if (ia == 30) { break; }
} }
//return 0; //return 0;

View File

@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include "zlib.h" #include "zlib.h"
#include <assert.h> #include <assert.h>
#include <iostream>
#ifndef _WIN32 #ifndef _WIN32
#include <cstring> #include <cstring>
@ -31,6 +32,8 @@ cNBTData::cNBTData( char* a_Buffer, unsigned int a_BufferSize )
m_ParseFunctions[TAG_Short] = &cNBTData::ParseShort; m_ParseFunctions[TAG_Short] = &cNBTData::ParseShort;
m_ParseFunctions[TAG_Int] = &cNBTData::ParseInt; m_ParseFunctions[TAG_Int] = &cNBTData::ParseInt;
m_ParseFunctions[TAG_Long] = &cNBTData::ParseLong; m_ParseFunctions[TAG_Long] = &cNBTData::ParseLong;
m_ParseFunctions[TAG_Double] = &cNBTData::ParseDouble;
m_ParseFunctions[TAG_Float] = &cNBTData::ParseFloat;
m_ParseFunctions[TAG_String] = &cNBTData::ParseString; m_ParseFunctions[TAG_String] = &cNBTData::ParseString;
m_ParseFunctions[TAG_List] = &cNBTData::ParseList; m_ParseFunctions[TAG_List] = &cNBTData::ParseList;
m_ParseFunctions[TAG_Compound] = &cNBTData::ParseCompound; m_ParseFunctions[TAG_Compound] = &cNBTData::ParseCompound;
@ -41,6 +44,11 @@ cNBTData::cNBTData( char* a_Buffer, unsigned int a_BufferSize )
m_BufferSize = a_BufferSize; m_BufferSize = a_BufferSize;
m_Index = 0; m_Index = 0;
tm = false; //tm to true will print more information for test mode
if (m_BufferSize == 82659) {
tm = true;
}
m_CurrentCompound = this; m_CurrentCompound = this;
m_bDecompressed = true; m_bDecompressed = true;
@ -309,6 +317,41 @@ void cNBTCompound::Serialize(std::string & a_Buffer)
} }
a_Buffer.push_back( itr->second ); a_Buffer.push_back( itr->second );
} }
for( DoubleMap::iterator itr = m_Doubles.begin(); itr != m_Doubles.end(); itr++ )
{
a_Buffer.push_back( TAG_Double );
AppendShort( a_Buffer, (short)itr->first.size() );
if( itr->first.size() > 0 )
{
a_Buffer.append( itr->first.c_str(), itr->first.size() );
}
a_Buffer.push_back( itr->second );
}
for( FloatMap::iterator itr = m_Floats.begin(); itr != m_Floats.end(); itr++ )
{
a_Buffer.push_back( TAG_Float );
AppendShort( a_Buffer, (short)itr->first.size() );
if( itr->first.size() > 0 )
{
a_Buffer.append( itr->first.c_str(), itr->first.size() );
}
a_Buffer.push_back( itr->second );
}
for( LongMap::iterator itr = m_Longs.begin(); itr != m_Longs.end(); itr++ )
{
a_Buffer.push_back( TAG_Long );
AppendShort( a_Buffer, (short)itr->first.size() );
if( itr->first.size() > 0 )
{
a_Buffer.append( itr->first.c_str(), itr->first.size() );
}
a_Buffer.push_back( itr->second );
}
} }
void cNBTCompound::PrintData( int a_Depth, std::string a_Name ) void cNBTCompound::PrintData( int a_Depth, std::string a_Name )
@ -352,6 +395,21 @@ void cNBTCompound::PrintData( int a_Depth, std::string a_Name )
printf("%s SHORT %s (%i)\n", Prefix, itr->first.c_str(), itr->second ); printf("%s SHORT %s (%i)\n", Prefix, itr->first.c_str(), itr->second );
} }
for( FloatMap::iterator itr = m_Floats.begin(); itr != m_Floats.end(); itr++ )
{
printf("%s FLOAT %s (%f)\n", Prefix, itr->first.c_str(), itr->second );
}
for( LongMap::iterator itr = m_Longs.begin(); itr != m_Longs.end(); itr++ )
{
printf("%s LONG %s (%lli)\n", Prefix, itr->first.c_str(), itr->second );
}
for( DoubleMap::iterator itr = m_Doubles.begin(); itr != m_Doubles.end(); itr++ )
{
printf("%s Double %s (%f)\n", Prefix, itr->first.c_str(), itr->second );
}
for( ByteMap::iterator itr = m_Bytes.begin(); itr != m_Bytes.end(); itr++ ) for( ByteMap::iterator itr = m_Bytes.begin(); itr != m_Bytes.end(); itr++ )
{ {
printf("%s BYTE %s (%i)\n", Prefix, itr->first.c_str(), itr->second ); printf("%s BYTE %s (%i)\n", Prefix, itr->first.c_str(), itr->second );
@ -410,8 +468,10 @@ void cNBTData::ParseData()
while( m_Index < m_BufferSize ) while( m_Index < m_BufferSize )
{ {
//printf("m_BufferSize3: %i\n", m_BufferSize); if (tm) {
//printf("m_Index: %i\n", m_Index); printf("m_BufferSize3: %i\n", m_BufferSize);
printf("m_Index: %i\n", m_Index);
}
ParseTags(); ParseTags();
} }
} }
@ -428,12 +488,18 @@ void cNBTData::ParseTags()
//printf("m_Index1: %i\n\n\n\n", m_Index); //printf("m_Index1: %i\n\n\n\n", m_Index);
m_Index++; m_Index++;
//printf("Tag: %i\n", Tag); if (tm) {
printf("Tag: %i\n", Tag);
}
(*this.*m_ParseFunctions[ Tag ])(true); (*this.*m_ParseFunctions[ Tag ])(true);
} }
else if( Tag == TAG_End ) else if( Tag == TAG_End )
{ {
//printf("Tag End"); if (tm) {
printf("Tag End\n");
int n;
std::cin >> n;
}
m_Index++; m_Index++;
} }
else else
@ -478,6 +544,10 @@ void cNBTData::ParseList( bool a_bNamed )
//printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );//re //printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );//re
//}//re //}//re
if (tm) {
printf("List Name, tag, length: %s, %i, %i\n", Name.c_str(), (int)TagType, Length);
}
PutList( Name, TagType ); PutList( Name, TagType );
OpenList( Name ); OpenList( Name );
for(int i = 0; i < Length && m_Index < m_BufferSize; i++) for(int i = 0; i < Length && m_Index < m_BufferSize; i++)
@ -499,8 +569,9 @@ void cNBTData::ParseByte( bool a_bNamed )
char Value = ReadByte(); char Value = ReadByte();
PutByte( Name, Value ); PutByte( Name, Value );
if (tm) {
//printf("BYTE: %s %i\n", Name.c_str(), Value );//re printf("BYTE: %s %i\n", Name.c_str(), Value );//re
}
} }
void cNBTData::ParseShort( bool a_bNamed ) void cNBTData::ParseShort( bool a_bNamed )
@ -510,8 +581,9 @@ void cNBTData::ParseShort( bool a_bNamed )
short Value = ReadShort(); short Value = ReadShort();
PutShort( Name, Value ); PutShort( Name, Value );
if (tm) {
//printf("SHORT: %s %i\n", Name.c_str(), Value );//re printf("SHORT: %s %i\n", Name.c_str(), Value );//re
}
} }
void cNBTData::ParseInt( bool a_bNamed ) void cNBTData::ParseInt( bool a_bNamed )
@ -521,19 +593,63 @@ void cNBTData::ParseInt( bool a_bNamed )
int Value = ReadInt(); int Value = ReadInt();
PutInteger( Name, Value ); PutInteger( Name, Value );
if (tm) {
//printf("INT: %s %i\n", Name.c_str(), Value );//re printf("INT: %s %i\n", Name.c_str(), Value );//re
}
} }
void cNBTData::ParseLong( bool a_bNamed ) void cNBTData::ParseLong( bool a_bNamed )
{ {
if (tm) {
for(unsigned int i = (m_Index-10 > 0)?m_Index-10:0 ; i < m_Index+30 && i < m_BufferSize; i++) {
printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );
}
}
std::string Name; std::string Name;
if( a_bNamed ) Name = ReadName(); if( a_bNamed ) Name = ReadName();
long long Value = ReadLong(); long long Value = ReadLong();
PutInteger( Name, (int)Value ); //PutInteger( Name, (int)Value );
PutLong( Name, Value );
if (tm) {
printf("LONG: %s %lli\n", Name.c_str(), Value );//re
}
}
//printf("LONG: %s %lli\n", Name.c_str(), Value );//re void cNBTData::ParseDouble( bool a_bNamed )
{
if (tm) {
for(unsigned int i = (m_Index-10 > 0)?m_Index-10:0 ; i < m_Index+30 && i < m_BufferSize; i++) {
printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );
}
}
std::string Name;
if( a_bNamed ) Name = ReadName();
double Value = ReadDouble();
//PutInteger( Name, (int)Value );
PutDouble( Name, Value );
if (tm) {
printf("Double: %s %f\n", Name.c_str(), Value );//re
}
}
void cNBTData::ParseFloat( bool a_bNamed )
{
if (tm) {
for(unsigned int i = (m_Index-10 > 0)?m_Index-10:0 ; i < m_Index+30 && i < m_BufferSize; i++) {
printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );
}
}
std::string Name;
if( a_bNamed ) Name = ReadName();
float Value = ReadFloat();
//PutInteger( Name, (int)Value );
PutFloat( Name, Value );
if (tm) {
printf("Float: %s %f\n", Name.c_str(), Value );//re
}
} }
void cNBTData::ParseString( bool a_bNamed ) void cNBTData::ParseString( bool a_bNamed )
@ -543,8 +659,9 @@ void cNBTData::ParseString( bool a_bNamed )
std::string String = ReadName(); std::string String = ReadName();
PutString( Name, String ); PutString( Name, String );
if (tm) {
//printf("STRING: %s (%s)\n", Name.c_str(), String.c_str() );//re printf("STRING: %s (%s)\n", Name.c_str(), String.c_str() );//re
}
} }
void cNBTData::ParseByteArray( bool a_bNamed ) void cNBTData::ParseByteArray( bool a_bNamed )
@ -565,7 +682,11 @@ void cNBTData::ParseByteArray( bool a_bNamed )
PutByteArray( Name, ByteArray ); PutByteArray( Name, ByteArray );
//printf("VALUE: %s First 5 Chars: (%i,%i,%i,%i,%i)\n", Name.c_str(), ByteArray[0],ByteArray[1],ByteArray[2],ByteArray[3],ByteArray[4] );//re if (tm) {
for(unsigned int i = (m_Index-10 > 0)?m_Index-10:0 ; i < m_Index+10 && i < m_BufferSize; i++) {
printf("%02i %02x %3i %c\n", i, (unsigned char)m_Buffer[i], (unsigned char)m_Buffer[i], m_Buffer[i] );
}
}
} }
std::string cNBTData::ReadName() std::string cNBTData::ReadName()
@ -610,11 +731,34 @@ int cNBTData::ReadInt()
long long cNBTData::ReadLong() long long cNBTData::ReadLong()
{ {
if (tm) {
printf( "here1 : %i, m_Index: %i\n", (int)sizeof(long long), (int)m_Index );
}
long long Value = 0; long long Value = 0;
memcpy( &Value, m_Buffer+m_Index, sizeof(long long) ); memcpy( &Value, m_Buffer+m_Index, sizeof(long long) );
m_Index+=sizeof(long long); m_Index+=sizeof(long long);
if (tm) {
printf( "here2 : %i, m_Index: %i\n", (int)sizeof(long long), (int)m_Index );
}
return Value;
}
return ntohl( Value ); double cNBTData::ReadDouble()
{
double Value = 0;
memcpy( &Value, m_Buffer+m_Index, sizeof(double) );
m_Index+=sizeof(double);
return Value;
}
float cNBTData::ReadFloat()
{
float Value = 0;
memcpy( &Value, m_Buffer+m_Index, sizeof(float) );
m_Index+=sizeof(float);
return Value;
} }
void cNBTCompound::PutList( std::string Name, ENUM_TAG Type ) void cNBTCompound::PutList( std::string Name, ENUM_TAG Type )

View File

@ -38,7 +38,9 @@ public:
void PutByte( std::string Name, char Value ) { m_Bytes[Name] = Value; } void PutByte( std::string Name, char Value ) { m_Bytes[Name] = Value; }
void PutShort( std::string Name, short Value ) { m_Shorts[Name] = Value; } void PutShort( std::string Name, short Value ) { m_Shorts[Name] = Value; }
void PutInteger( std::string Name, int Value ) { m_Integers[Name] = Value; } void PutInteger( std::string Name, int Value ) { m_Integers[Name] = Value; }
void PutLong( std::string Name, long Value ) { m_Longs[Name] = Value; } void PutLong( std::string Name, long long Value ) { m_Longs[Name] = Value; }
void PutDouble( std::string Name, double Value ) { m_Doubles[Name] = Value; }
void PutFloat( std::string Name, float Value ) { m_Floats[Name] = Value; }
void PutString( std::string Name, std::string Value ) { m_Strings[Name] = Value; } void PutString( std::string Name, std::string Value ) { m_Strings[Name] = Value; }
void PutByteArray( std::string Name, char* ByteArray ) { m_ByteArrays[Name] = ByteArray; } void PutByteArray( std::string Name, char* ByteArray ) { m_ByteArrays[Name] = ByteArray; }
void PutCompound( std::string Name ); void PutCompound( std::string Name );
@ -47,7 +49,9 @@ public:
char GetByte( std::string Name ) { return m_Bytes[Name]; } char GetByte( std::string Name ) { return m_Bytes[Name]; }
short GetShort( std::string Name ) { return m_Shorts[Name]; } short GetShort( std::string Name ) { return m_Shorts[Name]; }
int GetInteger( std::string Name ) { return m_Integers[Name]; } int GetInteger( std::string Name ) { return m_Integers[Name]; }
long GetLong( std::string Name ) { return m_Longs[Name]; } long long GetLong( std::string Name ) { return m_Longs[Name]; }
double GetDouble( std::string Name ) { return m_Doubles[Name]; }
float GetFloat( std::string Name ) { return m_Floats[Name]; }
std::string GetString( std::string Name ) { return m_Strings[Name]; } std::string GetString( std::string Name ) { return m_Strings[Name]; }
char* GetByteArray( std::string Name ) { return m_ByteArrays[Name]; } char* GetByteArray( std::string Name ) { return m_ByteArrays[Name]; }
cNBTCompound* GetCompound( std::string Name ); cNBTCompound* GetCompound( std::string Name );
@ -72,7 +76,9 @@ private:
typedef std::map<std::string, char> ByteMap; typedef std::map<std::string, char> ByteMap;
typedef std::map<std::string, short> ShortMap; typedef std::map<std::string, short> ShortMap;
typedef std::map<std::string, int> IntegerMap; typedef std::map<std::string, int> IntegerMap;
typedef std::map<std::string, long> LongMap; typedef std::map<std::string, long long> LongMap;
typedef std::map<std::string, double> DoubleMap;
typedef std::map<std::string, float> FloatMap;
typedef std::map<std::string, std::string> StringMap; typedef std::map<std::string, std::string> StringMap;
typedef std::map<std::string, char*> ByteArrayMap; typedef std::map<std::string, char*> ByteArrayMap;
typedef std::map<std::string, cNBTCompound*> CompoundMap; typedef std::map<std::string, cNBTCompound*> CompoundMap;
@ -81,6 +87,8 @@ private:
ShortMap m_Shorts; ShortMap m_Shorts;
IntegerMap m_Integers; IntegerMap m_Integers;
LongMap m_Longs; LongMap m_Longs;
DoubleMap m_Doubles;
FloatMap m_Floats;
StringMap m_Strings; StringMap m_Strings;
ByteArrayMap m_ByteArrays; ByteArrayMap m_ByteArrays;
CompoundMap m_Compounds; CompoundMap m_Compounds;
@ -131,14 +139,18 @@ public:
void PutByte( std::string Name, char Value ) { m_CurrentCompound->PutByte( Name, Value ); } void PutByte( std::string Name, char Value ) { m_CurrentCompound->PutByte( Name, Value ); }
void PutShort( std::string Name, short Value ) { m_CurrentCompound->PutShort( Name, Value ); } void PutShort( std::string Name, short Value ) { m_CurrentCompound->PutShort( Name, Value ); }
void PutInteger( std::string Name, int Value ) { m_CurrentCompound->PutInteger( Name, Value ); } void PutInteger( std::string Name, int Value ) { m_CurrentCompound->PutInteger( Name, Value ); }
void PutLong( std::string Name, long Value ) { m_CurrentCompound->PutLong( Name, Value ); } void PutLong( std::string Name, long long Value ) { m_CurrentCompound->PutLong( Name, Value ); }
void PutDouble( std::string Name, double Value ) { m_CurrentCompound->PutDouble( Name, Value ); }
void PutFloat( std::string Name, float Value ) { m_CurrentCompound->PutFloat( Name, Value ); }
void PutString( std::string Name, std::string Value ) { m_CurrentCompound->PutString( Name, Value ); } void PutString( std::string Name, std::string Value ) { m_CurrentCompound->PutString( Name, Value ); }
void PutByteArray( std::string Name, char* ByteArray ) { m_CurrentCompound->PutByteArray( Name, ByteArray ); } void PutByteArray( std::string Name, char* ByteArray ) { m_CurrentCompound->PutByteArray( Name, ByteArray ); }
void PutCompound( std::string Name ) { m_CurrentCompound->PutCompound( Name ); } void PutCompound( std::string Name ) { m_CurrentCompound->PutCompound( Name ); }
void PutList( std::string Name, ENUM_TAG Type ) { m_CurrentCompound->PutList( Name, Type ); } void PutList( std::string Name, ENUM_TAG Type ) { m_CurrentCompound->PutList( Name, Type ); }
int GetInteger( std::string Name ) { return m_CurrentCompound->GetInteger(Name); } int GetInteger( std::string Name ) { return m_CurrentCompound->GetInteger(Name); }
long GetLong( std::string Name ) { return m_CurrentCompound->GetLong(Name); } long long GetLong( std::string Name ) { return m_CurrentCompound->GetLong(Name); }
double GetDouble( std::string Name ) { return m_CurrentCompound->GetDouble(Name); }
float GetFloat( std::string Name ) { return m_CurrentCompound->GetFloat(Name); }
std::string GetString( std::string Name ) { return m_CurrentCompound->GetString(Name); } std::string GetString( std::string Name ) { return m_CurrentCompound->GetString(Name); }
char* GetByteArray( std::string Name ) { return m_CurrentCompound->GetByteArray(Name); } char* GetByteArray( std::string Name ) { return m_CurrentCompound->GetByteArray(Name); }
cNBTCompound* GetCompound( std::string Name ) { return m_CurrentCompound->GetCompound(Name); } cNBTCompound* GetCompound( std::string Name ) { return m_CurrentCompound->GetCompound(Name); }
@ -163,6 +175,8 @@ private:
void ParseByteArray( bool a_bNamed ); void ParseByteArray( bool a_bNamed );
void ParseInt( bool a_bNamed ); void ParseInt( bool a_bNamed );
void ParseLong( bool a_bNamed ); void ParseLong( bool a_bNamed );
void ParseDouble( bool a_bNamed );
void ParseFloat( bool a_bNamed );
void ParseShort( bool a_bNamed ); void ParseShort( bool a_bNamed );
short ReadShort(); short ReadShort();
@ -170,12 +184,15 @@ private:
char ReadByte(); char ReadByte();
int ReadInt(); int ReadInt();
long long ReadLong(); long long ReadLong();
double ReadDouble();
float ReadFloat();
cNBTCompound* m_CurrentCompound; cNBTCompound* m_CurrentCompound;
char* m_Buffer; char* m_Buffer;
unsigned int m_BufferSize; unsigned int m_BufferSize;
unsigned int m_Index; unsigned int m_Index;
bool tm;
void (cNBTData::*m_ParseFunctions[TAG_NumTags])(bool); void (cNBTData::*m_ParseFunctions[TAG_NumTags])(bool);
}; };

Binary file not shown.