Merge branch 'master' into MobSpawner
Conflicts: src/MobSpawner.h src/Mobs/Monster.h
This commit is contained in:
@@ -82,6 +82,18 @@ void cNBTChunkSerializer::Finish(void)
|
||||
memset(m_BlockLight, 0, sizeof(m_BlockLight));
|
||||
memset(m_BlockSkyLight, 0, sizeof(m_BlockSkyLight));
|
||||
}
|
||||
|
||||
// Check if "Entity" and "TileEntities" lists exists. MCEdit requires this.
|
||||
if (!m_HasHadEntity)
|
||||
{
|
||||
m_Writer.BeginList("Entities", TAG_Compound);
|
||||
m_Writer.EndList();
|
||||
}
|
||||
if (!m_HasHadBlockEntity)
|
||||
{
|
||||
m_Writer.BeginList("TileEntities", TAG_Compound);
|
||||
m_Writer.EndList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -472,35 +484,35 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
const char * EntityClass = NULL;
|
||||
switch (a_Monster->GetMobType())
|
||||
{
|
||||
case cMonster::mtBat: EntityClass = "Bat"; break;
|
||||
case cMonster::mtBlaze: EntityClass = "Blaze"; break;
|
||||
case cMonster::mtCaveSpider: EntityClass = "CaveSpider"; break;
|
||||
case cMonster::mtChicken: EntityClass = "Chicken"; break;
|
||||
case cMonster::mtCow: EntityClass = "Cow"; break;
|
||||
case cMonster::mtCreeper: EntityClass = "Creeper"; break;
|
||||
case cMonster::mtEnderDragon: EntityClass = "EnderDragon"; break;
|
||||
case cMonster::mtEnderman: EntityClass = "Enderman"; break;
|
||||
case cMonster::mtGhast: EntityClass = "Ghast"; break;
|
||||
case cMonster::mtGiant: EntityClass = "Giant"; break;
|
||||
case cMonster::mtHorse: EntityClass = "Horse"; break;
|
||||
case cMonster::mtIronGolem: EntityClass = "VillagerGolem"; break;
|
||||
case cMonster::mtMagmaCube: EntityClass = "LavaSlime"; break;
|
||||
case cMonster::mtMooshroom: EntityClass = "MushroomCow"; break;
|
||||
case cMonster::mtOcelot: EntityClass = "Ozelot"; break;
|
||||
case cMonster::mtPig: EntityClass = "Pig"; break;
|
||||
case cMonster::mtSheep: EntityClass = "Sheep"; break;
|
||||
case cMonster::mtSilverfish: EntityClass = "Silverfish"; break;
|
||||
case cMonster::mtSkeleton: EntityClass = "Skeleton"; break;
|
||||
case cMonster::mtSlime: EntityClass = "Slime"; break;
|
||||
case cMonster::mtSnowGolem: EntityClass = "SnowMan"; break;
|
||||
case cMonster::mtSpider: EntityClass = "Spider"; break;
|
||||
case cMonster::mtSquid: EntityClass = "Squid"; break;
|
||||
case cMonster::mtVillager: EntityClass = "Villager"; break;
|
||||
case cMonster::mtWitch: EntityClass = "Witch"; break;
|
||||
case cMonster::mtWither: EntityClass = "WitherBoss"; break;
|
||||
case cMonster::mtWolf: EntityClass = "Wolf"; break;
|
||||
case cMonster::mtZombie: EntityClass = "Zombie"; break;
|
||||
case cMonster::mtZombiePigman: EntityClass = "PigZombie"; break;
|
||||
case mtBat: EntityClass = "Bat"; break;
|
||||
case mtBlaze: EntityClass = "Blaze"; break;
|
||||
case mtCaveSpider: EntityClass = "CaveSpider"; break;
|
||||
case mtChicken: EntityClass = "Chicken"; break;
|
||||
case mtCow: EntityClass = "Cow"; break;
|
||||
case mtCreeper: EntityClass = "Creeper"; break;
|
||||
case mtEnderDragon: EntityClass = "EnderDragon"; break;
|
||||
case mtEnderman: EntityClass = "Enderman"; break;
|
||||
case mtGhast: EntityClass = "Ghast"; break;
|
||||
case mtGiant: EntityClass = "Giant"; break;
|
||||
case mtHorse: EntityClass = "Horse"; break;
|
||||
case mtIronGolem: EntityClass = "VillagerGolem"; break;
|
||||
case mtMagmaCube: EntityClass = "LavaSlime"; break;
|
||||
case mtMooshroom: EntityClass = "MushroomCow"; break;
|
||||
case mtOcelot: EntityClass = "Ozelot"; break;
|
||||
case mtPig: EntityClass = "Pig"; break;
|
||||
case mtSheep: EntityClass = "Sheep"; break;
|
||||
case mtSilverfish: EntityClass = "Silverfish"; break;
|
||||
case mtSkeleton: EntityClass = "Skeleton"; break;
|
||||
case mtSlime: EntityClass = "Slime"; break;
|
||||
case mtSnowGolem: EntityClass = "SnowMan"; break;
|
||||
case mtSpider: EntityClass = "Spider"; break;
|
||||
case mtSquid: EntityClass = "Squid"; break;
|
||||
case mtVillager: EntityClass = "Villager"; break;
|
||||
case mtWitch: EntityClass = "Witch"; break;
|
||||
case mtWither: EntityClass = "WitherBoss"; break;
|
||||
case mtWolf: EntityClass = "Wolf"; break;
|
||||
case mtZombie: EntityClass = "Zombie"; break;
|
||||
case mtZombiePigman: EntityClass = "PigZombie"; break;
|
||||
default:
|
||||
{
|
||||
ASSERT(!"Unhandled monster type");
|
||||
@@ -518,26 +530,28 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
m_Writer.AddFloat("", a_Monster->GetDropChanceBoots());
|
||||
m_Writer.EndList();
|
||||
m_Writer.AddByte("CanPickUpLoot", (char)a_Monster->CanPickUpLoot());
|
||||
m_Writer.AddString("CustomName", a_Monster->GetCustomName());
|
||||
m_Writer.AddByte("CustomNameVisible", (char)a_Monster->IsCustomNameAlwaysVisible());
|
||||
switch (a_Monster->GetMobType())
|
||||
{
|
||||
case cMonster::mtBat:
|
||||
case mtBat:
|
||||
{
|
||||
m_Writer.AddByte("BatFlags", ((const cBat *)a_Monster)->IsHanging());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtCreeper:
|
||||
case mtCreeper:
|
||||
{
|
||||
m_Writer.AddByte("powered", ((const cCreeper *)a_Monster)->IsCharged());
|
||||
m_Writer.AddByte("ignited", ((const cCreeper *)a_Monster)->IsBlowing());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtEnderman:
|
||||
case mtEnderman:
|
||||
{
|
||||
m_Writer.AddShort("carried", (Int16)((const cEnderman *)a_Monster)->GetCarriedBlock());
|
||||
m_Writer.AddShort("carriedData", (Int16)((const cEnderman *)a_Monster)->GetCarriedMeta());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtHorse:
|
||||
case mtHorse:
|
||||
{
|
||||
const cHorse & Horse = *((const cHorse *)a_Monster);
|
||||
m_Writer.AddByte("ChestedHorse", Horse.IsChested());
|
||||
@@ -550,38 +564,38 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
m_Writer.AddByte("Saddle", Horse.IsSaddled());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtMagmaCube:
|
||||
case mtMagmaCube:
|
||||
{
|
||||
m_Writer.AddInt("Size", ((const cMagmaCube *)a_Monster)->GetSize());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtSheep:
|
||||
case mtSheep:
|
||||
{
|
||||
m_Writer.AddByte("Sheared", ((const cSheep *)a_Monster)->IsSheared());
|
||||
m_Writer.AddByte("Color", ((const cSheep *)a_Monster)->GetFurColor());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtSlime:
|
||||
case mtSlime:
|
||||
{
|
||||
m_Writer.AddInt("Size", ((const cSlime *)a_Monster)->GetSize());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtSkeleton:
|
||||
case mtSkeleton:
|
||||
{
|
||||
m_Writer.AddByte("SkeletonType", (((const cSkeleton *)a_Monster)->IsWither() ? 1 : 0));
|
||||
break;
|
||||
}
|
||||
case cMonster::mtVillager:
|
||||
case mtVillager:
|
||||
{
|
||||
m_Writer.AddInt("Profession", ((const cVillager *)a_Monster)->GetVilType());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtWither:
|
||||
case mtWither:
|
||||
{
|
||||
m_Writer.AddInt("Invul", ((const cWither *)a_Monster)->GetWitherInvulnerableTicks());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtWolf:
|
||||
case mtWolf:
|
||||
{
|
||||
const cWolf & Wolf = *((cWolf *)a_Monster);
|
||||
if (!Wolf.GetOwnerName().empty())
|
||||
@@ -594,10 +608,10 @@ void cNBTChunkSerializer::AddMonsterEntity(cMonster * a_Monster)
|
||||
}
|
||||
m_Writer.AddByte("Sitting", Wolf.IsSitting() ? 1 : 0);
|
||||
m_Writer.AddByte("Angry", Wolf.IsAngry() ? 1 : 0);
|
||||
m_Writer.AddInt("CollarColor", Wolf.GetCollarColor());
|
||||
m_Writer.AddByte("CollarColor", (unsigned char)Wolf.GetCollarColor());
|
||||
break;
|
||||
}
|
||||
case cMonster::mtZombie:
|
||||
case mtZombie:
|
||||
{
|
||||
m_Writer.AddByte("IsVillager", (((const cZombie *)a_Monster)->IsVillagerZombie() ? 1 : 0));
|
||||
m_Writer.AddByte("IsBaby", (((const cZombie *)a_Monster)->IsBaby() ? 1 : 0));
|
||||
@@ -637,9 +651,9 @@ void cNBTChunkSerializer::AddProjectileEntity(cProjectileEntity * a_Projectile)
|
||||
{
|
||||
cArrowEntity * Arrow = (cArrowEntity *)a_Projectile;
|
||||
|
||||
m_Writer.AddInt("xTile", (Int16)Arrow->GetBlockHit().x);
|
||||
m_Writer.AddInt("yTile", (Int16)Arrow->GetBlockHit().y);
|
||||
m_Writer.AddInt("zTile", (Int16)Arrow->GetBlockHit().z);
|
||||
m_Writer.AddShort("xTile", (Int16)Arrow->GetBlockHit().x);
|
||||
m_Writer.AddShort("yTile", (Int16)Arrow->GetBlockHit().y);
|
||||
m_Writer.AddShort("zTile", (Int16)Arrow->GetBlockHit().z);
|
||||
m_Writer.AddByte("pickup", Arrow->GetPickupState());
|
||||
m_Writer.AddDouble("damage", Arrow->GetDamageCoeff());
|
||||
break;
|
||||
@@ -777,6 +791,22 @@ void cNBTChunkSerializer::LightIsValid(bool a_IsLightValid)
|
||||
|
||||
|
||||
|
||||
void cNBTChunkSerializer::HeightMap(const cChunkDef::HeightMap * a_HeightMap)
|
||||
{
|
||||
for (int RelX = 0; RelX < cChunkDef::Width; RelX++)
|
||||
{
|
||||
for (int RelZ = 0; RelZ < cChunkDef::Width; RelZ++)
|
||||
{
|
||||
int Height = cChunkDef::GetHeight(*a_HeightMap, RelX, RelZ);
|
||||
m_VanillaHeightMap[(RelZ << 4) | RelX] = Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cNBTChunkSerializer::BiomeData(const cChunkDef::BiomeMap * a_BiomeMap)
|
||||
{
|
||||
memcpy(m_Biomes, a_BiomeMap, sizeof(m_Biomes));
|
||||
|
||||
Reference in New Issue
Block a user