summaryrefslogtreecommitdiffstats
path: root/src/WorldStorage/WSSAnvil.cpp
diff options
context:
space:
mode:
author12xx12 <44411062+12xx12@users.noreply.github.com>2020-11-23 00:41:13 +0100
committerGitHub <noreply@github.com>2020-11-23 00:41:13 +0100
commite35519ec8ab1b958408ab2a90b88dffc1bcc7fb2 (patch)
tree3ed498478eabe7aa01b54f85d8ec9c2bc821fe66 /src/WorldStorage/WSSAnvil.cpp
parentAdd coloured glass pane recipes (#5032) (diff)
downloadcuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar.gz
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar.bz2
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar.lz
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar.xz
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.tar.zst
cuberite-e35519ec8ab1b958408ab2a90b88dffc1bcc7fb2.zip
Diffstat (limited to '')
-rw-r--r--src/WorldStorage/WSSAnvil.cpp518
1 files changed, 443 insertions, 75 deletions
diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp
index cfea33737..0e874df7c 100644
--- a/src/WorldStorage/WSSAnvil.cpp
+++ b/src/WorldStorage/WSSAnvil.cpp
@@ -7,6 +7,7 @@
#include "WSSAnvil.h"
#include "NBTChunkSerializer.h"
#include "EnchantmentSerializer.h"
+#include "NamespaceSerializer.h"
#include "zlib/zlib.h"
#include "json/json.h"
#include "../World.h"
@@ -583,7 +584,15 @@ void cWSSAnvil::LoadEntitiesFromNBT(cEntityList & a_Entities, const cParsedNBT &
{
continue;
}
- LoadEntityFromNBT(a_Entities, a_NBT, Child, a_NBT.GetData(sID), a_NBT.GetDataLength(sID));
+
+ try
+ {
+ LoadEntityFromNBT(a_Entities, a_NBT, Child, a_NBT.GetData(sID), a_NBT.GetDataLength(sID));
+ }
+ catch (...)
+ {
+ continue;
+ }
} // for Child - a_NBT[]
}
@@ -617,15 +626,28 @@ void cWSSAnvil::LoadBlockEntitiesFromNBT(cBlockEntities & a_BlockEntities, const
// Load the proper BlockEntity type based on the block type:
BLOCKTYPE BlockType = cChunkDef::GetBlock(a_BlockTypes, relPos);
NIBBLETYPE BlockMeta = cChunkDef::GetNibble(a_BlockMetas, relPos);
- auto be = LoadBlockEntityFromNBT(a_NBT, Child, absPos, BlockType, BlockMeta);
- if (be == nullptr)
+ OwnedBlockEntity Entity;
+
+ try
+ {
+ Entity = LoadBlockEntityFromNBT(a_NBT, Child, absPos, BlockType, BlockMeta);
+ }
+ catch (...)
{
continue;
}
+ // TODO: exception-ify the failure case
+ if (Entity == nullptr)
+ {
+ continue;
+ }
+
+ // Index computed before Entity moved.
+ const auto Idx = cChunkDef::MakeIndexNoCheck(Entity->GetRelPos());
+
// Add the BlockEntity to the loaded data:
- auto Idx = cChunkDef::MakeIndex(be->GetRelX(), be->GetPosY(), be->GetRelZ());
- a_BlockEntities.emplace(Idx, std::move(be));
+ a_BlockEntities.emplace(Idx, std::move(Entity));
} // for Child - tag children
}
@@ -1342,7 +1364,13 @@ OwnedBlockEntity cWSSAnvil::LoadMobSpawnerFromNBT(const cParsedNBT & a_NBT, int
int Type = a_NBT.FindChildByName(a_TagIdx, "EntityId");
if ((Type >= 0) && (a_NBT.GetType(Type) == TAG_String))
{
- eMonsterType MonsterType = cMonster::StringToMobType(a_NBT.GetString(Type));
+ const auto StatInfo = NamespaceSerializer::SplitNamespacedID(a_NBT.GetString(Type));
+ if (StatInfo.first == NamespaceSerializer::Namespace::Unknown)
+ {
+ return nullptr;
+ }
+
+ eMonsterType MonsterType = NamespaceSerializer::ToMonsterType(StatInfo.second);
if (MonsterType != eMonsterType::mtInvalidType)
{
MobSpawner->SetEntity(MonsterType);
@@ -1591,81 +1619,97 @@ void cWSSAnvil::LoadEntityFromNBT(cEntityList & a_Entities, const cParsedNBT & a
{ "SmallFireball", &cWSSAnvil::LoadFireChargeFromNBT },
{ "minecraft:small_fireball", &cWSSAnvil::LoadFireChargeFromNBT },
{ "ThrownEnderpearl", &cWSSAnvil::LoadThrownEnderpearlFromNBT },
- { "minecraft:ender_pearl", &cWSSAnvil::LoadThrownEnderpearlFromNBT },
- { "Bat", &cWSSAnvil::LoadBatFromNBT },
- { "minecraft:bat", &cWSSAnvil::LoadBatFromNBT },
- { "Blaze", &cWSSAnvil::LoadBlazeFromNBT },
- { "minecraft:blaze", &cWSSAnvil::LoadBlazeFromNBT },
- { "CaveSpider", &cWSSAnvil::LoadCaveSpiderFromNBT },
- { "minecraft:cave_spider", &cWSSAnvil::LoadCaveSpiderFromNBT },
- { "Chicken", &cWSSAnvil::LoadChickenFromNBT },
- { "minecraft:chicken", &cWSSAnvil::LoadChickenFromNBT },
- { "Cow", &cWSSAnvil::LoadCowFromNBT },
- { "minecraft:cow", &cWSSAnvil::LoadCowFromNBT },
- { "Creeper", &cWSSAnvil::LoadCreeperFromNBT },
- { "minecraft:creeper", &cWSSAnvil::LoadCreeperFromNBT },
- { "EnderDragon", &cWSSAnvil::LoadEnderDragonFromNBT },
- { "minecraft:ender_dragon", &cWSSAnvil::LoadEnderDragonFromNBT },
- { "Enderman", &cWSSAnvil::LoadEndermanFromNBT },
- { "minecraft:enderman", &cWSSAnvil::LoadEndermanFromNBT },
- { "Ghast", &cWSSAnvil::LoadGhastFromNBT },
- { "minecraft:ghast", &cWSSAnvil::LoadGhastFromNBT },
- { "Giant", &cWSSAnvil::LoadGiantFromNBT },
- { "minecraft:giant", &cWSSAnvil::LoadGiantFromNBT },
- { "Guardian", &cWSSAnvil::LoadGuardianFromNBT },
- { "minecraft:guardian", &cWSSAnvil::LoadGuardianFromNBT },
- { "Horse", &cWSSAnvil::LoadHorseFromNBT },
- { "minecraft:horse", &cWSSAnvil::LoadHorseFromNBT },
- { "Villager", &cWSSAnvil::LoadVillagerFromNBT },
- { "minecraft:villager", &cWSSAnvil::LoadVillagerFromNBT },
- { "VillagerGolem", &cWSSAnvil::LoadIronGolemFromNBT },
- { "minecraft:villager_golem", &cWSSAnvil::LoadIronGolemFromNBT },
- { "LavaSlime", &cWSSAnvil::LoadMagmaCubeFromNBT },
- { "minecraft:magma_cube", &cWSSAnvil::LoadMagmaCubeFromNBT },
- { "MushroomCow", &cWSSAnvil::LoadMooshroomFromNBT },
- { "minecraft:mooshroom", &cWSSAnvil::LoadMooshroomFromNBT },
- { "Ozelot", &cWSSAnvil::LoadOcelotFromNBT },
- { "minecraft:ocelot", &cWSSAnvil::LoadOcelotFromNBT },
- { "Pig", &cWSSAnvil::LoadPigFromNBT },
- { "minecraft:pig", &cWSSAnvil::LoadPigFromNBT },
- { "Rabbit", &cWSSAnvil::LoadRabbitFromNBT },
- { "minecraft:rabbit", &cWSSAnvil::LoadRabbitFromNBT },
- { "Sheep", &cWSSAnvil::LoadSheepFromNBT },
- { "minecraft:sheep", &cWSSAnvil::LoadSheepFromNBT },
- { "Silverfish", &cWSSAnvil::LoadSilverfishFromNBT },
- { "minecraft:silverfish", &cWSSAnvil::LoadSilverfishFromNBT },
- { "Skeleton", &cWSSAnvil::LoadSkeletonFromNBT },
- { "minecraft:skeleton", &cWSSAnvil::LoadSkeletonFromNBT },
- { "Slime", &cWSSAnvil::LoadSlimeFromNBT },
- { "minecraft:slime", &cWSSAnvil::LoadSlimeFromNBT },
- { "SnowMan", &cWSSAnvil::LoadSnowGolemFromNBT },
- { "minecraft:snowman", &cWSSAnvil::LoadSnowGolemFromNBT },
- { "Spider", &cWSSAnvil::LoadSpiderFromNBT },
- { "minecraft:spider", &cWSSAnvil::LoadSpiderFromNBT },
- { "Squid", &cWSSAnvil::LoadSquidFromNBT },
- { "minecraft:squid", &cWSSAnvil::LoadSquidFromNBT },
- { "Witch", &cWSSAnvil::LoadWitchFromNBT },
- { "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 },
- { "minecraft:zombie", &cWSSAnvil::LoadZombieFromNBT },
- { "PigZombie", &cWSSAnvil::LoadPigZombieFromNBT },
- { "minecraft:zombie_pigman", &cWSSAnvil::LoadPigZombieFromNBT },
- { "ZombieVillager", &cWSSAnvil::LoadZombieVillagerFromNBT },
- { "minecraft:zombie_villager", &cWSSAnvil::LoadZombieVillagerFromNBT },
+ { "minecraft:ender_pearl", &cWSSAnvil::LoadThrownEnderpearlFromNBT }
};
+ // TODO: flatten monster\projectile into one entity type enum
+
auto it = EntityTypeToFunction.find(AString(a_IDTag, a_IDTagLength));
if (it != EntityTypeToFunction.end())
{
(this->*it->second)(a_Entities, a_NBT, a_EntityTagIdx);
+ return;
+ }
+
+ const auto StatInfo = NamespaceSerializer::SplitNamespacedID({ a_IDTag, a_IDTagLength });
+ if (StatInfo.first == NamespaceSerializer::Namespace::Unknown)
+ {
+ return;
+ }
+
+ switch (NamespaceSerializer::ToMonsterType(StatInfo.second))
+ {
+ case mtBat: return LoadBatFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtBlaze: return LoadBlazeFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtCat: return LoadCatFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtCaveSpider: return LoadCaveSpiderFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtChicken: return LoadChickenFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtCod: return LoadCodFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtCow: return LoadCowFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtCreeper: return LoadCreeperFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtDolphin: return LoadDolphinFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtDonkey: return LoadDonkeyFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtDrowned: return LoadDrownedFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtElderGuardian: return LoadElderGuardianFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtEnderDragon: return LoadEnderDragonFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtEnderman: return LoadEndermanFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtEndermite: return LoadEndermiteFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtEvoker: return LoadEvokerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtFox: return LoadFoxFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtGhast: return LoadGhastFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtGiant: return LoadGiantFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtGuardian: return LoadGuardianFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtHorse: return LoadHorseFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtHoglin: return LoadHoglinFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtHusk: return LoadHuskFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtIllusioner: return LoadIllusionerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtIronGolem: return LoadVillagerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtLlama: return LoadIronGolemFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtMagmaCube: return LoadLlamaFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtMooshroom: return LoadMagmaCubeFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtMule: return LoadMooshroomFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtOcelot: return LoadMuleFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPanda: return LoadOcelotFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtParrot: return LoadPandaFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPhantom: return LoadParrotFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPig: return LoadPhantomFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPiglin: return LoadPigFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPiglinBrute: return LoadPiglinFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPillager: return LoadPiglinBruteFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPolarBear: return LoadPillagerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtPufferfish: return LoadPolarBearFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtRabbit: return LoadPufferfishFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtRavager: return LoadRabbitFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSalmon: return LoadRavagerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSheep: return LoadSalmonFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtShulker: return LoadSheepFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSilverfish: return LoadShulkerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSkeleton: return LoadSilverfishFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSkeletonHorse: return LoadSkeletonFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSlime: return LoadSlimeFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSnowGolem: return LoadSnowGolemFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSpider: return LoadSpiderFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtSquid: return LoadSquidFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtStray: return LoadStrayFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtStrider: return LoadStriderFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtTraderLlama: return LoadTraderLlamaFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtTropicalFish: return LoadTropicalFishFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtTurtle: return LoadTurtleFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtVex: return LoadVexFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtVillager: return LoadVillagerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtVindicator: return LoadVindicatorFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtWanderingTrader: return LoadWanderingTraderFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtWitch: return LoadWitchFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtWither: return LoadWitherFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtWitherSkeleton: return LoadWitherSkeletonFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtWolf: return LoadWolfFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtZoglin: return LoadZoglinFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtZombie: return LoadZombieFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtZombieHorse: return LoadZombieHorseFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtZombifiedPiglin: return LoadZombifiedPiglinFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtZombieVillager: return LoadZombieVillagerFromNBT(a_Entities, a_NBT, a_EntityTagIdx);
+ case mtInvalidType: break;
}
- // TODO: other entities
}
@@ -2290,6 +2334,15 @@ void cWSSAnvil::LoadBlazeFromNBT(cEntityList & a_Entities, const cParsedNBT & a_
+void cWSSAnvil::LoadCatFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadCaveSpiderFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cCaveSpider> Monster = std::make_unique<cCaveSpider>();
@@ -2330,6 +2383,15 @@ void cWSSAnvil::LoadChickenFromNBT(cEntityList & a_Entities, const cParsedNBT &
+void cWSSAnvil::LoadCodFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadCowFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cCow> Monster = std::make_unique<cCow>();
@@ -2370,6 +2432,42 @@ void cWSSAnvil::LoadCreeperFromNBT(cEntityList & a_Entities, const cParsedNBT &
+void cWSSAnvil::LoadDolphinFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadDonkeyFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadDrownedFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadElderGuardianFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadEnderDragonFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cEnderDragon> Monster = std::make_unique<cEnderDragon>();
@@ -2410,6 +2508,33 @@ void cWSSAnvil::LoadEndermanFromNBT(cEntityList & a_Entities, const cParsedNBT &
+void cWSSAnvil::LoadEndermiteFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadEvokerFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadFoxFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadGhastFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cGhast> Monster = std::make_unique<cGhast>();
@@ -2516,6 +2641,33 @@ void cWSSAnvil::LoadHorseFromNBT(cEntityList & a_Entities, const cParsedNBT & a_
+void cWSSAnvil::LoadHoglinFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadHuskFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadIllusionerFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadIronGolemFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cIronGolem> Monster = std::make_unique<cIronGolem>();
@@ -2536,6 +2688,15 @@ void cWSSAnvil::LoadIronGolemFromNBT(cEntityList & a_Entities, const cParsedNBT
+void cWSSAnvil::LoadLlamaFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadMagmaCubeFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
int SizeIdx = a_NBT.FindChildByName(a_TagIdx, "Size");
@@ -2585,6 +2746,15 @@ void cWSSAnvil::LoadMooshroomFromNBT(cEntityList & a_Entities, const cParsedNBT
+void cWSSAnvil::LoadMuleFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadOcelotFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cOcelot> Monster = std::make_unique<cOcelot>();
@@ -2639,6 +2809,33 @@ void cWSSAnvil::LoadOcelotFromNBT(cEntityList & a_Entities, const cParsedNBT & a
+void cWSSAnvil::LoadPandaFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadParrotFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadPhantomFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadPigFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cPig> Monster = std::make_unique<cPig>();
@@ -2672,6 +2869,51 @@ void cWSSAnvil::LoadPigFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NB
+void cWSSAnvil::LoadPiglinFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadPiglinBruteFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadPillagerFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadPolarBearFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadPufferfishFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadRabbitFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
int TypeIdx = a_NBT.FindChildByName(a_TagIdx, "RabbitType");
@@ -2716,6 +2958,24 @@ void cWSSAnvil::LoadRabbitFromNBT(cEntityList & a_Entities, const cParsedNBT & a
+void cWSSAnvil::LoadRavagerFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadSalmonFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadSheepFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
int ColorIdx = a_NBT.FindChildByName(a_TagIdx, "Color");
@@ -2762,6 +3022,15 @@ void cWSSAnvil::LoadSheepFromNBT(cEntityList & a_Entities, const cParsedNBT & a_
+void cWSSAnvil::LoadShulkerFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadSilverfishFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cSilverfish> Monster = std::make_unique<cSilverfish>();
@@ -2815,6 +3084,15 @@ void cWSSAnvil::LoadSkeletonFromNBT(cEntityList & a_Entities, const cParsedNBT &
+void cWSSAnvil::LoadSkeletonHorseFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadSlimeFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
int SizeIdx = a_NBT.FindChildByName(a_TagIdx, "Size");
@@ -2904,6 +3182,60 @@ void cWSSAnvil::LoadSquidFromNBT(cEntityList & a_Entities, const cParsedNBT & a_
+void cWSSAnvil::LoadStrayFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadStriderFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadTraderLlamaFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadTropicalFishFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadTurtleFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadVexFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadVillagerFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
int TypeIdx = a_NBT.FindChildByName(a_TagIdx, "Profession");
@@ -2946,6 +3278,24 @@ void cWSSAnvil::LoadVillagerFromNBT(cEntityList & a_Entities, const cParsedNBT &
+void cWSSAnvil::LoadVindicatorFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadWanderingTraderFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadWitchFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cWitch> Monster = std::make_unique<cWitch>();
@@ -3088,6 +3438,15 @@ void cWSSAnvil::LoadWolfFromNBT(cEntityList & a_Entities, const cParsedNBT & a_N
+void cWSSAnvil::LoadZoglinFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
void cWSSAnvil::LoadZombieFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cZombie> Monster = std::make_unique<cZombie>();
@@ -3121,7 +3480,16 @@ void cWSSAnvil::LoadZombieFromNBT(cEntityList & a_Entities, const cParsedNBT & a
-void cWSSAnvil::LoadPigZombieFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
+void cWSSAnvil::LoadZombieHorseFromNBT(cEntityList &a_Entities, const cParsedNBT &a_NBT, int a_TagIdx)
+{
+ // TODO
+}
+
+
+
+
+
+void cWSSAnvil::LoadZombifiedPiglinFromNBT(cEntityList & a_Entities, const cParsedNBT & a_NBT, int a_TagIdx)
{
std::unique_ptr<cZombiePigman> Monster = std::make_unique<cZombiePigman>();
if (!LoadEntityBaseFromNBT(*Monster.get(), a_NBT, a_TagIdx))