diff options
author | TheJumper <maximilian.springer@web.de> | 2014-02-23 18:43:47 +0100 |
---|---|---|
committer | TheJumper <maximilian.springer@web.de> | 2014-02-23 18:43:47 +0100 |
commit | 72dd48f7e741217077f82d9c8ec7e55618102bd6 (patch) | |
tree | ae346f75dc629d57886d398581bcf672334c9e84 | |
parent | Fixed Formatting, Added DropChance attributes to Monsters (diff) | |
download | cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar.gz cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar.bz2 cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar.lz cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar.xz cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.tar.zst cuberite-72dd48f7e741217077f82d9c8ec7e55618102bd6.zip |
-rw-r--r-- | src/WorldStorage/NBTChunkSerializer.cpp | 15 | ||||
-rw-r--r-- | src/WorldStorage/WSSAnvil.cpp | 22 | ||||
-rw-r--r-- | src/WorldStorage/WSSAnvil.h | 4 |
3 files changed, 31 insertions, 10 deletions
diff --git a/src/WorldStorage/NBTChunkSerializer.cpp b/src/WorldStorage/NBTChunkSerializer.cpp index 5bcaf06bd..b9d92d2df 100644 --- a/src/WorldStorage/NBTChunkSerializer.cpp +++ b/src/WorldStorage/NBTChunkSerializer.cpp @@ -407,16 +407,15 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster) } } // switch (payload) - m_Writer.BeginList("DropChances", TAG_Float); - m_Writer.AddFloat("", a_Monster->GetDropChanceWeapon()); - m_Writer.AddFloat("", a_Monster->GetDropChanceHelmet()); - m_Writer.AddFloat("", a_Monster->GetDropChanceChestplate()); - m_Writer.AddFloat("", a_Monster->GetDropChanceLeggings()); - m_Writer.AddFloat("", a_Monster->GetDropChanceBoots()); - m_Writer.EndList(); - m_Writer.BeginCompound(""); AddBasicEntity(a_Monster, EntityClass); + m_Writer.BeginList("DropChances", TAG_Float); + m_Writer.AddFloat("", a_Monster->GetDropChanceWeapon()); + m_Writer.AddFloat("", a_Monster->GetDropChanceHelmet()); + m_Writer.AddFloat("", a_Monster->GetDropChanceChestplate()); + m_Writer.AddFloat("", a_Monster->GetDropChanceLeggings()); + m_Writer.AddFloat("", a_Monster->GetDropChanceBoots()); + m_Writer.EndList(); switch (a_Monster->GetMobType()) { case cMonster::mtBat: diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index a5f4e1b25..10c8d1f51 100644 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -2167,10 +2167,10 @@ bool cWSSAnvil::LoadEntityBaseFromNBT(cEntity & a_Entity, const cParsedNBT & a_N -bool LoadMonsterBaseFromNBT(cMonster & a_Monster, const cParsedNBT & a_NBT, int a_TagIdx) +bool cWSSAnvil::LoadMonsterBaseFromNBT(cMonster & a_Monster, const cParsedNBT & a_NBT, int a_TagIdx) { float DropChance[5]; - if (!LoadDoublesListFromNBT(DropChance, 5, a_NBT, a_NBT.FindChildByName(a_TagIdx, "DropChance"))) + if (!LoadFloatsListFromNBT(DropChance, 5, a_NBT, a_NBT.FindChildByName(a_TagIdx, "DropChance"))) { return false; } @@ -2228,6 +2228,24 @@ bool cWSSAnvil::LoadDoublesListFromNBT(double * a_Doubles, int a_NumDoubles, con +bool cWSSAnvil::LoadFloatsListFromNBT(float * a_Floats, int a_NumFloats, const cParsedNBT & a_NBT, int a_TagIdx) +{ + if ((a_TagIdx < 0) || (a_NBT.GetType(a_TagIdx) != TAG_List) || (a_NBT.GetChildrenType(a_TagIdx) != TAG_Float)) + { + return false; + } + int idx = 0; + for (int Tag = a_NBT.GetFirstChild(a_TagIdx); (Tag > 0) && (idx < a_NumFloats); Tag = a_NBT.GetNextSibling(Tag), ++idx) + { + a_Floats[idx] = a_NBT.GetFloat(Tag); + } // for Tag - PosTag[] + return (idx == a_NumFloats); // Did we read enough doubles? +} + + + + + 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"); diff --git a/src/WorldStorage/WSSAnvil.h b/src/WorldStorage/WSSAnvil.h index 6c6444dae..4acf3f2a1 100644 --- a/src/WorldStorage/WSSAnvil.h +++ b/src/WorldStorage/WSSAnvil.h @@ -10,6 +10,7 @@ #include "WorldStorage.h" #include "FastNBT.h" +#include "../Mobs/Monster.h" @@ -203,6 +204,9 @@ protected: /// Loads an array of doubles of the specified length from the specified NBT list tag a_TagIdx; returns true if successful bool LoadDoublesListFromNBT(double * a_Doubles, int a_NumDoubles, const cParsedNBT & a_NBT, int a_TagIdx); + /// Loads an array of floats of the specified length from the specified NBT list tag a_TagIdx; returns true if successful + bool LoadFloatsListFromNBT(float * a_Floats, int a_NumFloats, 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 bool GetBlockEntityNBTPos(const cParsedNBT & a_NBT, int a_TagIdx, int & a_X, int & a_Y, int & a_Z); |