diff options
Diffstat (limited to 'src/WorldStorage')
-rw-r--r-- | src/WorldStorage/NBTChunkSerializer.cpp | 10 | ||||
-rwxr-xr-x | src/WorldStorage/WSSAnvil.cpp | 33 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/WorldStorage/NBTChunkSerializer.cpp b/src/WorldStorage/NBTChunkSerializer.cpp index f78f7029f..d159f6e49 100644 --- a/src/WorldStorage/NBTChunkSerializer.cpp +++ b/src/WorldStorage/NBTChunkSerializer.cpp @@ -683,6 +683,16 @@ public: { mWriter.BeginCompound(""); AddBasicEntity(a_EnderCrystal, "EnderCrystal"); + mWriter.AddByte("ShowBottom", a_EnderCrystal->ShowsBottom() ? 1 : 0); + if (a_EnderCrystal->DisplaysBeam()) + { + mWriter.BeginCompound("BeamTarget"); + const auto & BeamTarget = a_EnderCrystal->GetBeamTarget(); + mWriter.AddInt("X", BeamTarget.x); + mWriter.AddInt("Y", BeamTarget.y); + mWriter.AddInt("Z", BeamTarget.z); + mWriter.EndCompound(); + } mWriter.EndCompound(); } diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index 03e60bb26..c7b4c7e1f 100755 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -1718,11 +1718,42 @@ void cWSSAnvil::LoadBoatFromNBT(cEntityList & a_Entities, const cParsedNBT & a_N void cWSSAnvil::LoadEnderCrystalFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx) { - auto EnderCrystal = std::make_unique<cEnderCrystal>(Vector3d()); + auto EnderCrystal = std::make_unique<cEnderCrystal>(Vector3d(), false); if (!LoadEntityBaseFromNBT(*EnderCrystal.get(), a_NBT, a_TagIdx)) { return; } + + int CurrentLine = a_NBT.FindChildByName(a_TagIdx, "BeamTarget"); + if (CurrentLine > 0) + { + EnderCrystal->SetDisplayBeam(true); + if (a_NBT.GetType(CurrentLine) == TAG_Compound) + { + Vector3d BeamTarget = {0, 0, 0}; + int CoordinateLine = a_NBT.FindChildByName(CurrentLine, "X"); + if (CoordinateLine > 0) + { + BeamTarget.x = a_NBT.GetInt(CoordinateLine); + } + CoordinateLine = a_NBT.FindChildByName(CurrentLine, "Y"); + if (CoordinateLine > 0) + { + BeamTarget.y = a_NBT.GetInt(CoordinateLine); + } + CoordinateLine = a_NBT.FindChildByName(CurrentLine, "Z"); + if (CoordinateLine > 0) + { + BeamTarget.z = a_NBT.GetInt(CoordinateLine); + } + } + } + CurrentLine = a_NBT.FindChildByName(a_TagIdx, "ShowBottom"); + if (CurrentLine > 0) + { + EnderCrystal->SetShowBottom(a_NBT.GetByte(CurrentLine) == 1); + } + a_Entities.emplace_back(std::move(EnderCrystal)); } |