Add cUUID class (#3871)
This commit is contained in:
committed by
Alexander Harkness
parent
86d52c3e17
commit
f4f2fc7c3d
@@ -7,6 +7,7 @@
|
||||
#include "EnchantmentSerializer.h"
|
||||
#include "../ItemGrid.h"
|
||||
#include "../StringCompression.h"
|
||||
#include "../UUID.h"
|
||||
#include "FastNBT.h"
|
||||
|
||||
#include "../BlockEntities/BeaconEntity.h"
|
||||
@@ -382,7 +383,7 @@ void cNBTChunkSerializer::AddMobHeadEntity(cMobHeadEntity * a_MobHead)
|
||||
|
||||
// The new Block Entity format for a Mob Head. See: https://minecraft.gamepedia.com/Head#Block_entity
|
||||
m_Writer.BeginCompound("Owner");
|
||||
m_Writer.AddString("Id", a_MobHead->GetOwnerUUID());
|
||||
m_Writer.AddString("Id", a_MobHead->GetOwnerUUID().ToShortString());
|
||||
m_Writer.AddString("Name", a_MobHead->GetOwnerName());
|
||||
m_Writer.BeginCompound("Properties");
|
||||
m_Writer.BeginList("textures", TAG_Compound);
|
||||
@@ -679,9 +680,9 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
{
|
||||
m_Writer.AddString("Owner", Wolf->GetOwnerName());
|
||||
}
|
||||
if (!Wolf->GetOwnerUUID().empty())
|
||||
if (!Wolf->GetOwnerUUID().IsNil())
|
||||
{
|
||||
m_Writer.AddString("OwnerUUID", Wolf->GetOwnerUUID());
|
||||
m_Writer.AddString("OwnerUUID", Wolf->GetOwnerUUID().ToShortString());
|
||||
}
|
||||
m_Writer.AddByte("Sitting", Wolf->IsSitting() ? 1 : 0);
|
||||
m_Writer.AddByte("Angry", Wolf->IsAngry() ? 1 : 0);
|
||||
@@ -709,9 +710,9 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
{
|
||||
m_Writer.AddString("Owner", Ocelot->GetOwnerName());
|
||||
}
|
||||
if (!Ocelot->GetOwnerUUID().empty())
|
||||
if (!Ocelot->GetOwnerUUID().IsNil())
|
||||
{
|
||||
m_Writer.AddString("OwnerUUID", Ocelot->GetOwnerUUID());
|
||||
m_Writer.AddString("OwnerUUID", Ocelot->GetOwnerUUID().ToShortString());
|
||||
}
|
||||
m_Writer.AddByte("Sitting", Ocelot->IsSitting() ? 1 : 0);
|
||||
m_Writer.AddInt ("CatType", Ocelot->GetOcelotType());
|
||||
|
||||
@@ -1398,12 +1398,13 @@ cBlockEntity * cWSSAnvil::LoadMobHeadFromNBT(const cParsedNBT & a_NBT, int a_Tag
|
||||
int ownerLine = a_NBT.FindChildByName(a_TagIdx, "Owner");
|
||||
if (ownerLine >= 0)
|
||||
{
|
||||
AString OwnerName, OwnerUUID, OwnerTexture, OwnerTextureSignature;
|
||||
AString OwnerName, OwnerTexture, OwnerTextureSignature;
|
||||
cUUID OwnerUUID;
|
||||
|
||||
currentLine = a_NBT.FindChildByName(ownerLine, "Id");
|
||||
if (currentLine >= 0)
|
||||
{
|
||||
OwnerUUID = a_NBT.GetString(currentLine);
|
||||
OwnerUUID.FromString(a_NBT.GetString(currentLine));
|
||||
}
|
||||
|
||||
currentLine = a_NBT.FindChildByName(ownerLine, "Name");
|
||||
@@ -2526,7 +2527,7 @@ void cWSSAnvil::LoadOcelotFromNBT(cEntityList & a_Entities, const cParsedNBT & a
|
||||
}
|
||||
|
||||
auto OwnerInfo = LoadEntityOwner(a_NBT, a_TagIdx);
|
||||
if (!OwnerInfo.first.empty() && !OwnerInfo.second.empty())
|
||||
if (!OwnerInfo.first.empty() && !OwnerInfo.second.IsNil())
|
||||
{
|
||||
Monster->SetOwner(OwnerInfo.first, OwnerInfo.second);
|
||||
Monster->SetIsTame(true);
|
||||
@@ -2927,7 +2928,7 @@ void cWSSAnvil::LoadWolfFromNBT(cEntityList & a_Entities, const cParsedNBT & a_N
|
||||
}
|
||||
|
||||
auto OwnerInfo = LoadEntityOwner(a_NBT, a_TagIdx);
|
||||
if (!OwnerInfo.first.empty() && !OwnerInfo.second.empty())
|
||||
if (!OwnerInfo.first.empty() && !OwnerInfo.second.IsNil())
|
||||
{
|
||||
Monster->SetOwner(OwnerInfo.first, OwnerInfo.second);
|
||||
Monster->SetIsTame(true);
|
||||
@@ -3064,43 +3065,39 @@ void cWSSAnvil::LoadPigZombieFromNBT(cEntityList & a_Entities, const cParsedNBT
|
||||
|
||||
|
||||
|
||||
std::pair<AString, AString> cWSSAnvil::LoadEntityOwner(const cParsedNBT & a_NBT, int a_TagIdx)
|
||||
std::pair<AString, cUUID> cWSSAnvil::LoadEntityOwner(const cParsedNBT & a_NBT, int a_TagIdx)
|
||||
{
|
||||
// Load the owner information. OwnerUUID or Owner may be specified, possibly both:
|
||||
AString OwnerUUID, OwnerName;
|
||||
AString OwnerName;
|
||||
cUUID OwnerUUID;
|
||||
int OwnerUUIDIdx = a_NBT.FindChildByName(a_TagIdx, "OwnerUUID");
|
||||
if (OwnerUUIDIdx > 0)
|
||||
{
|
||||
OwnerUUID = a_NBT.GetString(OwnerUUIDIdx);
|
||||
OwnerUUID.FromString(a_NBT.GetString(OwnerUUIDIdx));
|
||||
}
|
||||
int OwnerIdx = a_NBT.FindChildByName(a_TagIdx, "Owner");
|
||||
if (OwnerIdx > 0)
|
||||
{
|
||||
OwnerName = a_NBT.GetString(OwnerIdx);
|
||||
}
|
||||
if (OwnerName.empty() && OwnerUUID.empty())
|
||||
if (OwnerName.empty() && OwnerUUID.IsNil())
|
||||
{
|
||||
// There is no owner, bail out:
|
||||
return std::pair<AString, AString>();
|
||||
return {};
|
||||
}
|
||||
|
||||
// Convert name to UUID, if needed:
|
||||
if (OwnerUUID.empty())
|
||||
if (OwnerUUID.IsNil())
|
||||
{
|
||||
// This entity has only playername stored (pre-1.7.6), look up the UUID
|
||||
// The lookup is blocking, but we're running in a separate thread, so it's ok
|
||||
OwnerUUID = cRoot::Get()->GetMojangAPI().GetUUIDFromPlayerName(OwnerName);
|
||||
if (OwnerUUID.empty())
|
||||
if (OwnerUUID.IsNil())
|
||||
{
|
||||
// Not a known player, un-tame the entity by bailing out
|
||||
return std::pair<AString, AString>();
|
||||
return {};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Normalize the UUID:
|
||||
OwnerUUID = cMojangAPI::MakeUUIDShort(OwnerUUID);
|
||||
}
|
||||
|
||||
// Convert UUID to name, if needed:
|
||||
if (OwnerName.empty())
|
||||
@@ -3110,11 +3107,11 @@ std::pair<AString, AString> cWSSAnvil::LoadEntityOwner(const cParsedNBT & a_NBT,
|
||||
if (OwnerName.empty())
|
||||
{
|
||||
// Not a known player, un-tame the entity by bailing out
|
||||
return std::pair<AString, AString>();
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_pair(OwnerName, OwnerUUID);
|
||||
return { OwnerName, OwnerUUID };
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ class cItemGrid;
|
||||
class cMonster;
|
||||
class cProjectileEntity;
|
||||
class cHangingEntity;
|
||||
class cUUID;
|
||||
|
||||
|
||||
|
||||
@@ -230,8 +231,8 @@ protected:
|
||||
void LoadPigZombieFromNBT (cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
|
||||
/** Loads the owner name and UUID from the entity at the specified NBT tag.
|
||||
Returns a pair of {name, uuid}. If the entity is not owned, both are empty strings. */
|
||||
std::pair<AString, AString> LoadEntityOwner(const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
Returns a pair of {name, uuid}. If the entity is not owned, name is an empty string and uuid is nil. */
|
||||
std::pair<AString, cUUID> LoadEntityOwner(const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
|
||||
/** Loads entity common data from the NBT compound; returns true if successful */
|
||||
bool LoadEntityBaseFromNBT(cEntity & a_Entity, const cParsedNBT & a_NBT, int a_TagIdx);
|
||||
|
||||
Reference in New Issue
Block a user