Anvil: added support for signs (why was it still missing??)
git-svn-id: http://mc-server.googlecode.com/svn/trunk@616 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
3ef6ecb8d2
commit
a06b72c18d
@ -182,6 +182,14 @@ public:
|
|||||||
return NetworkToHostDouble8(m_Data + m_Tags[a_Tag].m_DataStart);
|
return NetworkToHostDouble8(m_Data + m_Tags[a_Tag].m_DataStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline AString GetString(int a_Tag) const
|
||||||
|
{
|
||||||
|
ASSERT(m_Tags[a_Tag].m_Type == TAG_String);
|
||||||
|
AString res;
|
||||||
|
res.assign(m_Data + m_Tags[a_Tag].m_DataStart, m_Tags[a_Tag].m_DataLength);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const char * m_Data;
|
const char * m_Data;
|
||||||
int m_Length;
|
int m_Length;
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
#include "BlockID.h"
|
#include "BlockID.h"
|
||||||
#include "cChestEntity.h"
|
#include "cChestEntity.h"
|
||||||
#include "cFurnaceEntity.h"
|
#include "cFurnaceEntity.h"
|
||||||
|
#include "cSignEntity.h"
|
||||||
#include "cItem.h"
|
#include "cItem.h"
|
||||||
#include "StringCompression.h"
|
#include "StringCompression.h"
|
||||||
#include "cEntity.h"
|
#include "cEntity.h"
|
||||||
#include "cBlockEntity.h"
|
|
||||||
#include "cMakeDir.h"
|
#include "cMakeDir.h"
|
||||||
#include "FastNBT.h"
|
#include "FastNBT.h"
|
||||||
|
|
||||||
@ -136,6 +136,18 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void 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));
|
||||||
|
m_Writer.EndCompound();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual bool LightIsValid(bool a_IsLightValid) override
|
virtual bool LightIsValid(bool a_IsLightValid) override
|
||||||
{
|
{
|
||||||
m_IsLightValid = a_IsLightValid;
|
m_IsLightValid = a_IsLightValid;
|
||||||
@ -168,8 +180,10 @@ protected:
|
|||||||
// Add tile-entity into NBT:
|
// Add tile-entity into NBT:
|
||||||
switch (a_Entity->GetBlockType())
|
switch (a_Entity->GetBlockType())
|
||||||
{
|
{
|
||||||
case E_BLOCK_CHEST: AddChestEntity ((cChestEntity *) a_Entity); break;
|
case E_BLOCK_CHEST: AddChestEntity ((cChestEntity *) a_Entity); break;
|
||||||
case E_BLOCK_FURNACE: AddFurnaceEntity((cFurnaceEntity *)a_Entity); break;
|
case E_BLOCK_FURNACE: AddFurnaceEntity((cFurnaceEntity *)a_Entity); break;
|
||||||
|
case E_BLOCK_SIGN_POST:
|
||||||
|
case E_BLOCK_WALLSIGN: AddSignEntity ((cSignEntity *) a_Entity); break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
ASSERT(!"Unhandled block entity saved into Anvil");
|
ASSERT(!"Unhandled block entity saved into Anvil");
|
||||||
@ -619,6 +633,10 @@ void cWSSAnvil::LoadBlockEntitiesFromNBT(cBlockEntityList & a_BlockEntities, con
|
|||||||
{
|
{
|
||||||
LoadFurnaceFromNBT(a_BlockEntities, a_NBT, Child);
|
LoadFurnaceFromNBT(a_BlockEntities, a_NBT, Child);
|
||||||
}
|
}
|
||||||
|
else if (strncmp(a_NBT.GetData(sID), "Sign", a_NBT.GetDataLength(sID)) == 0)
|
||||||
|
{
|
||||||
|
LoadSignFromNBT(a_BlockEntities, a_NBT, Child);
|
||||||
|
}
|
||||||
// TODO: Other block entities
|
// TODO: Other block entities
|
||||||
} // for Child - tag children
|
} // for Child - tag children
|
||||||
}
|
}
|
||||||
@ -740,6 +758,27 @@ void cWSSAnvil::LoadFurnaceFromNBT(cBlockEntityList & a_BlockEntities, const cPa
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cWSSAnvil::LoadSignFromNBT(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<cSignEntity> Sign(new cSignEntity(E_BLOCK_SIGN_POST, x, y, z, m_World));
|
||||||
|
int Text1 = a_NBT.FindChildByName(a_TagIdx, "Text1");
|
||||||
|
if (Text1 >= 0)
|
||||||
|
{
|
||||||
|
Sign->SetLine(0, a_NBT.GetString(Text1));
|
||||||
|
}
|
||||||
|
a_BlockEntities.push_back(Sign.release());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cWSSAnvil::GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z)
|
bool cWSSAnvil::GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z)
|
||||||
{
|
{
|
||||||
int x = a_NBT.FindChildByName(a_TagIdx, "x");
|
int x = a_NBT.FindChildByName(a_TagIdx, "x");
|
||||||
|
@ -110,6 +110,7 @@ protected:
|
|||||||
|
|
||||||
void LoadChestFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
void LoadChestFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||||
void LoadFurnaceFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
void LoadFurnaceFromNBT(cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||||
|
void LoadSignFromNBT (cBlockEntityList & a_BlockEntities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||||
|
|
||||||
/// Helper function for extracting the X, Y, and Z int subtags of a NBT compound; returns true if successful
|
/// Helper function for extracting the X, Y, and Z int subtags of a NBT compound; returns true if successful
|
||||||
bool GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z);
|
bool GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z);
|
||||||
|
Loading…
Reference in New Issue
Block a user