1
0

Add protocol mob ID remapping (#4538)

This commit is contained in:
Mat
2020-03-29 18:54:37 +03:00
committed by GitHub
parent aa9a16b0c6
commit 31ace87d28
11 changed files with 217 additions and 5 deletions

View File

@@ -27,6 +27,7 @@ Implements the 1.9 protocol classes:
#include "../StringCompression.h"
#include "../CompositeChat.h"
#include "../Statistics.h"
#include "../World.h"
#include "../WorldStorage/FastNBT.h"
@@ -1408,7 +1409,7 @@ void cProtocol_1_9_0::SendSpawnMob(const cMonster & a_Mob)
// TODO: Bad way to write a UUID, and it's not a true UUID, but this is functional for now.
Pkt.WriteBEUInt64(0);
Pkt.WriteBEUInt64(a_Mob.GetUniqueID());
Pkt.WriteBEUInt8(static_cast<Byte>(a_Mob.GetMobType()));
Pkt.WriteBEUInt8(static_cast<Byte>(GetProtocolMobType(a_Mob.GetMobType())));
Vector3d LastSentPos = a_Mob.GetLastSentPos();
Pkt.WriteBEDouble(LastSentPos.x);
Pkt.WriteBEDouble(LastSentPos.y);
@@ -1883,6 +1884,51 @@ int cProtocol_1_9_0::GetParticleID(const AString & a_ParticleName)
UInt32 cProtocol_1_9_0::GetProtocolMobType(eMonsterType a_MobType)
{
switch (a_MobType)
{
// Map invalid type to Giant for easy debugging (if this ever spawns, something has gone very wrong)
case mtInvalidType: return 52;
case mtBat: return 65;
case mtBlaze: return 61;
case mtCaveSpider: return 59;
case mtChicken: return 93;
case mtCow: return 92;
case mtCreeper: return 50;
case mtEnderDragon: return 63;
case mtEnderman: return 58;
case mtGhast: return 56;
case mtGiant: return 53;
case mtGuardian: return 68;
case mtHorse: return 100;
case mtIronGolem: return 99;
case mtMagmaCube: return 62;
case mtMooshroom: return 96;
case mtOcelot: return 98;
case mtPig: return 90;
case mtRabbit: return 101;
case mtSheep: return 91;
case mtSilverfish: return 60;
case mtSkeleton: return 51;
case mtSlime: return 55;
case mtSnowGolem: return 97;
case mtSpider: return 52;
case mtSquid: return 94;
case mtVillager: return 120;
case mtWitch: return 66;
case mtWither: return 64;
case mtWolf: return 95;
case mtZombie: return 54;
case mtZombiePigman: return 57;
}
UNREACHABLE("Unsupported mob type");
}
void cProtocol_1_9_0::FixItemFramePositions(int a_ObjectData, double & a_PosX, double & a_PosZ, double & a_Yaw)
{
switch (a_ObjectData)