Add Skulls/Heads
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "../BlockEntities/JukeboxEntity.h"
|
||||
#include "../BlockEntities/NoteEntity.h"
|
||||
#include "../BlockEntities/SignEntity.h"
|
||||
#include "../BlockEntities/SkullEntity.h"
|
||||
|
||||
#include "../Entities/Entity.h"
|
||||
#include "../Entities/FallingBlock.h"
|
||||
@@ -248,11 +249,25 @@ void cNBTChunkSerializer::AddCommandBlockEntity(cCommandBlockEntity * a_CmdBlock
|
||||
void cNBTChunkSerializer::AddSignEntity(cSignEntity * a_Sign)
|
||||
{
|
||||
m_Writer.BeginCompound("");
|
||||
AddBasicTileEntity(a_Sign, "Sign");
|
||||
m_Writer.AddString("Text1", a_Sign->GetLine(0));
|
||||
m_Writer.AddString("Text2", a_Sign->GetLine(1));
|
||||
m_Writer.AddString("Text3", a_Sign->GetLine(2));
|
||||
m_Writer.AddString("Text4", a_Sign->GetLine(3));
|
||||
AddBasicTileEntity(a_Sign, "Sign");
|
||||
m_Writer.AddString("Text1", a_Sign->GetLine(0));
|
||||
m_Writer.AddString("Text2", a_Sign->GetLine(1));
|
||||
m_Writer.AddString("Text3", a_Sign->GetLine(2));
|
||||
m_Writer.AddString("Text4", a_Sign->GetLine(3));
|
||||
m_Writer.EndCompound();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cNBTChunkSerializer::AddSkullEntity(cSkullEntity * a_Skull)
|
||||
{
|
||||
m_Writer.BeginCompound("");
|
||||
AddBasicTileEntity(a_Skull, "Skull");
|
||||
m_Writer.AddByte ("SkullType", a_Skull->GetSkullType() & 0xFF);
|
||||
m_Writer.AddByte ("Rot", a_Skull->GetRotation() & 0xFF);
|
||||
m_Writer.AddString("ExtraType", a_Skull->GetOwner());
|
||||
m_Writer.EndCompound();
|
||||
}
|
||||
|
||||
@@ -668,6 +683,7 @@ void cNBTChunkSerializer::BlockEntity(cBlockEntity * a_Entity)
|
||||
case E_BLOCK_HOPPER: AddHopperEntity ((cHopperEntity *) a_Entity); break;
|
||||
case E_BLOCK_SIGN_POST:
|
||||
case E_BLOCK_WALLSIGN: AddSignEntity ((cSignEntity *) a_Entity); break;
|
||||
case E_BLOCK_HEAD: AddSkullEntity ((cSkullEntity *) a_Entity); break;
|
||||
case E_BLOCK_NOTE_BLOCK: AddNoteEntity ((cNoteEntity *) a_Entity); break;
|
||||
case E_BLOCK_JUKEBOX: AddJukeboxEntity ((cJukeboxEntity *) a_Entity); break;
|
||||
case E_BLOCK_COMMAND_BLOCK: AddCommandBlockEntity((cCommandBlockEntity *) a_Entity); break;
|
||||
|
||||
@@ -29,6 +29,7 @@ class cHopperEntity;
|
||||
class cJukeboxEntity;
|
||||
class cNoteEntity;
|
||||
class cSignEntity;
|
||||
class cSkullEntity;
|
||||
class cFallingBlock;
|
||||
class cMinecart;
|
||||
class cMinecartWithChest;
|
||||
@@ -93,6 +94,7 @@ protected:
|
||||
void AddJukeboxEntity (cJukeboxEntity * a_Jukebox);
|
||||
void AddNoteEntity (cNoteEntity * a_Note);
|
||||
void AddSignEntity (cSignEntity * a_Sign);
|
||||
void AddSkullEntity (cSkullEntity * a_Skull);
|
||||
void AddCommandBlockEntity(cCommandBlockEntity * a_CmdBlock);
|
||||
|
||||
// Entities:
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "../BlockEntities/JukeboxEntity.h"
|
||||
#include "../BlockEntities/NoteEntity.h"
|
||||
#include "../BlockEntities/SignEntity.h"
|
||||
#include "../BlockEntities/SkullEntity.h"
|
||||
|
||||
|
||||
#include "../Mobs/Monster.h"
|
||||
@@ -597,6 +598,10 @@ void cWSSAnvil::LoadBlockEntitiesFromNBT(cBlockEntityList & a_BlockEntities, con
|
||||
{
|
||||
LoadSignFromNBT(a_BlockEntities, a_NBT, Child);
|
||||
}
|
||||
else if (strncmp(a_NBT.GetData(sID), "Skull", a_NBT.GetDataLength(sID)) == 0)
|
||||
{
|
||||
LoadSkullFromNBT(a_BlockEntities, a_NBT, Child);
|
||||
}
|
||||
else if (strncmp(a_NBT.GetData(sID), "Trap", a_NBT.GetDataLength(sID)) == 0)
|
||||
{
|
||||
LoadDispenserFromNBT(a_BlockEntities, a_NBT, Child);
|
||||
@@ -927,6 +932,41 @@ void cWSSAnvil::LoadSignFromNBT(cBlockEntityList & a_BlockEntities, const cParse
|
||||
|
||||
|
||||
|
||||
void cWSSAnvil::LoadSkullFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
|
||||
{
|
||||
ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
|
||||
int x, y, z;
|
||||
if (!GetBlockEntityNBTPos(a_NBT, a_TagIdx, x, y, z))
|
||||
{
|
||||
return;
|
||||
}
|
||||
std::auto_ptr<cSkullEntity> Skull(new cSkullEntity(E_BLOCK_HEAD, x, y, z, m_World));
|
||||
|
||||
int currentLine = a_NBT.FindChildByName(a_TagIdx, "SkullType");
|
||||
if (currentLine >= 0)
|
||||
{
|
||||
Skull->SetSkullType(static_cast<eSkullType>(a_NBT.GetByte(currentLine)));
|
||||
}
|
||||
|
||||
currentLine = a_NBT.FindChildByName(a_TagIdx, "Rot");
|
||||
if (currentLine >= 0)
|
||||
{
|
||||
Skull->SetRotation(static_cast<eSkullRotation>(a_NBT.GetByte(currentLine)));
|
||||
}
|
||||
|
||||
currentLine = a_NBT.FindChildByName(a_TagIdx, "ExtraType");
|
||||
if (currentLine >= 0)
|
||||
{
|
||||
Skull->SetOwner(a_NBT.GetString(currentLine));
|
||||
}
|
||||
|
||||
a_BlockEntities.push_back(Skull.release());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cWSSAnvil::LoadCommandBlockFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx)
|
||||
{
|
||||
ASSERT(a_NBT.GetType(a_TagIdx) == TAG_Compound);
|
||||
|
||||
@@ -139,6 +139,7 @@ protected:
|
||||
void LoadJukeboxFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
void LoadNoteFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
void LoadSignFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
void LoadSkullFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
void LoadCommandBlockFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
|
||||
void LoadEntityFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_EntityTagIdx, const char * a_IDTag, int a_IDTagLength);
|
||||
|
||||
Reference in New Issue
Block a user