summaryrefslogtreecommitdiffstats
path: root/src/WorldStorage/WSSAnvil.cpp
diff options
context:
space:
mode:
authorMat <mail@mathias.is>2020-04-04 13:44:17 +0200
committerGitHub <noreply@github.com>2020-04-04 13:44:17 +0200
commit60bcc06f43e0c249204149153976e534b239d138 (patch)
treedc3178edca8b8a0ad77b6002621fd5765398d8e6 /src/WorldStorage/WSSAnvil.cpp
parentManage block entity lifetime with unique_ptr (#4080) (diff)
downloadcuberite-60bcc06f43e0c249204149153976e534b239d138.tar
cuberite-60bcc06f43e0c249204149153976e534b239d138.tar.gz
cuberite-60bcc06f43e0c249204149153976e534b239d138.tar.bz2
cuberite-60bcc06f43e0c249204149153976e534b239d138.tar.lz
cuberite-60bcc06f43e0c249204149153976e534b239d138.tar.xz
cuberite-60bcc06f43e0c249204149153976e534b239d138.tar.zst
cuberite-60bcc06f43e0c249204149153976e534b239d138.zip
Diffstat (limited to 'src/WorldStorage/WSSAnvil.cpp')
-rwxr-xr-xsrc/WorldStorage/WSSAnvil.cpp37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp
index 65facd817..31934e181 100755
--- a/src/WorldStorage/WSSAnvil.cpp
+++ b/src/WorldStorage/WSSAnvil.cpp
@@ -1560,6 +1560,8 @@ void cWSSAnvil::LoadEntityFromNBT(cEntityList & a_Entities, const cParsedNBT & a
{ "minecraft:witch", &cWSSAnvil::LoadWitchFromNBT },
{ "WitherBoss", &cWSSAnvil::LoadWitherFromNBT },
{ "minecraft:wither", &cWSSAnvil::LoadWitherFromNBT },
+ { "WitherSkeleton", &cWSSAnvil::LoadWitherSkeletonFromNBT },
+ { "minecraft:wither_skeleton", &cWSSAnvil::LoadWitherSkeletonFromNBT },
{ "Wolf", &cWSSAnvil::LoadWolfFromNBT },
{ "minecraft:wolf", &cWSSAnvil::LoadWolfFromNBT },
{ "Zombie", &cWSSAnvil::LoadZombieFromNBT },
@@ -2660,15 +2662,20 @@ void cWSSAnvil::LoadSilverfishFromNBT(cEntityList & a_Entities, const cParsedNBT
void cWSSAnvil::LoadSkeletonFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
+ // Wither skeleton is a separate mob in Minecraft 1.11+, but we need this to
+ // load them from older worlds where wither skeletons were only a skeleton with a flag
int TypeIdx = a_NBT.FindChildByName(a_TagIdx, "SkeletonType");
- if (TypeIdx < 0)
+
+ std::unique_ptr<cMonster> Monster;
+ if ((TypeIdx > 0) && (a_NBT.GetByte(TypeIdx) == 1))
{
- return;
+ Monster = cpp14::make_unique<cWitherSkeleton>();
+ }
+ else
+ {
+ Monster = cpp14::make_unique<cSkeleton>();
}
- bool Type = ((a_NBT.GetByte(TypeIdx) == 1) ? true : false);
-
- std::unique_ptr<cSkeleton> Monster = cpp14::make_unique<cSkeleton>(Type);
if (!LoadEntityBaseFromNBT(*Monster.get(), a_NBT, a_TagIdx))
{
return;
@@ -2863,6 +2870,26 @@ void cWSSAnvil::LoadWitherFromNBT(cEntityList & a_Entities, const cParsedNBT & a
+void cWSSAnvil::LoadWitherSkeletonFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
+{
+ auto Monster = cpp14::make_unique<cWitherSkeleton>();
+ if (!LoadEntityBaseFromNBT(*Monster.get(), a_NBT, a_TagIdx))
+ {
+ return;
+ }
+
+ if (!LoadMonsterBaseFromNBT(*Monster.get(), a_NBT, a_TagIdx))
+ {
+ return;
+ }
+
+ a_Entities.emplace_back(std::move(Monster));
+}
+
+
+
+
+
void cWSSAnvil::LoadWolfFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cWolf> Monster = cpp14::make_unique<cWolf>();