From b93d1b5027afc55be3a5e1c882c023d400f2bbfa Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Mon, 25 Nov 2013 20:04:01 +0100 Subject: Implented Spawn Experience Orb packet. --- source/Protocol/Protocol.h | 1 + source/Protocol/Protocol125.cpp | 18 ++++++++++++++++++ source/Protocol/Protocol125.h | 1 + source/Protocol/Protocol17x.cpp | 15 +++++++++++++++ source/Protocol/Protocol17x.h | 1 + source/Protocol/ProtocolRecognizer.cpp | 10 ++++++++++ source/Protocol/ProtocolRecognizer.h | 1 + 7 files changed, 47 insertions(+) (limited to 'source/Protocol') diff --git a/source/Protocol/Protocol.h b/source/Protocol/Protocol.h index 542060ece..18cf3676a 100644 --- a/source/Protocol/Protocol.h +++ b/source/Protocol/Protocol.h @@ -86,6 +86,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) = 0; virtual void SendRespawn (void) = 0; virtual void SendExperience (void) = 0; + virtual void SendExperienceOrb (const cEntity & a_Entity) = 0; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) = 0; // a_Src coords are Block * 8 virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) = 0; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) = 0; diff --git a/source/Protocol/Protocol125.cpp b/source/Protocol/Protocol125.cpp index 54be65b12..3b753479d 100644 --- a/source/Protocol/Protocol125.cpp +++ b/source/Protocol/Protocol125.cpp @@ -17,6 +17,7 @@ Documentation: #include "../World.h" #include "ChunkDataSerializer.h" #include "../Entities/Entity.h" +#include "../Entities/ExpOrb.h" #include "../Mobs/Monster.h" #include "../Entities/Pickup.h" #include "../Entities/Player.h" @@ -72,6 +73,7 @@ enum PACKET_ENT_STATUS = 0x26, PACKET_ATTACH_ENTITY = 0x27, PACKET_METADATA = 0x28, + PACKET_SPAWN_EXPERIENCE_ORB = 0x1A, PACKET_EXPERIENCE = 0x2b, PACKET_PRE_CHUNK = 0x32, PACKET_MAP_CHUNK = 0x33, @@ -705,6 +707,22 @@ void cProtocol125::SendExperience(void) +void cProtocol125::SendExperienceOrb(const cEntity & a_Entity) +{ + cCSLock Lock(m_CSPacket); + WriteByte(PACKET_SPAWN_EXPERIENCE_ORB); + WriteInt(a_Entity.GetUniqueID()); + WriteInt((int) a_Entity.GetPosX()); + WriteInt((int) a_Entity.GetPosY()); + WriteInt((int) a_Entity.GetPosZ()); + WriteShort(((cExpOrb &)a_Entity).GetReward()); + Flush(); +} + + + + + void cProtocol125::SendSoundEffect(const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) { // Not needed in this protocol version diff --git a/source/Protocol/Protocol125.h b/source/Protocol/Protocol125.h index c5f44c818..2182ea356 100644 --- a/source/Protocol/Protocol125.h +++ b/source/Protocol/Protocol125.h @@ -63,6 +63,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) override; virtual void SendRespawn (void) override; virtual void SendExperience (void) override; + virtual void SendExperienceOrb (const cEntity & a_Entity) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; // a_Src coords are Block * 8 virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; diff --git a/source/Protocol/Protocol17x.cpp b/source/Protocol/Protocol17x.cpp index ae1df7395..cf5c84599 100644 --- a/source/Protocol/Protocol17x.cpp +++ b/source/Protocol/Protocol17x.cpp @@ -17,6 +17,7 @@ Implements the 1.7.x protocol classes: #include "../World.h" #include "../WorldStorage/FastNBT.h" #include "../StringCompression.h" +#include "../Entities/ExpOrb.h" #include "../Entities/Minecart.h" #include "../Entities/FallingBlock.h" #include "../Entities/Pickup.h" @@ -609,6 +610,20 @@ void cProtocol172::SendExperience (void) +void cProtocol172::SendExperienceOrb(const cEntity & a_Entity) +{ + cPacketizer Pkt(*this, 0x11); + Pkt.WriteVarInt(a_Entity.GetUniqueID()); + Pkt.WriteInt((int) a_Entity.GetPosX()); + Pkt.WriteInt((int) a_Entity.GetPosY()); + Pkt.WriteInt((int) a_Entity.GetPosZ()); + Pkt.WriteShort(((cExpOrb &)a_Entity).GetReward()); +} + + + + + void cProtocol172::SendSoundEffect(const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) // a_Src coords are Block * 8 { cPacketizer Pkt(*this, 0x29); // Sound Effect packet diff --git a/source/Protocol/Protocol17x.h b/source/Protocol/Protocol17x.h index e3f2ad922..6b8d2ce79 100644 --- a/source/Protocol/Protocol17x.h +++ b/source/Protocol/Protocol17x.h @@ -73,6 +73,7 @@ public: virtual void SendRespawn (void) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; // a_Src coords are Block * 8 virtual void SendExperience (void) override; + virtual void SendExperienceOrb (const cEntity & a_Entity) override; virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; virtual void SendSpawnMob (const cMonster & a_Mob) override; diff --git a/source/Protocol/ProtocolRecognizer.cpp b/source/Protocol/ProtocolRecognizer.cpp index 64bd83075..ad00e8d38 100644 --- a/source/Protocol/ProtocolRecognizer.cpp +++ b/source/Protocol/ProtocolRecognizer.cpp @@ -476,6 +476,16 @@ void cProtocolRecognizer::SendExperience(void) +void cProtocolRecognizer::SendExperienceOrb(const cEntity & a_Entity) +{ + ASSERT(m_Protocol != NULL); + m_Protocol->SendExperienceOrb(a_Entity); +} + + + + + void cProtocolRecognizer::SendSoundEffect(const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) { ASSERT(m_Protocol != NULL); diff --git a/source/Protocol/ProtocolRecognizer.h b/source/Protocol/ProtocolRecognizer.h index 03f48fb35..62e624980 100644 --- a/source/Protocol/ProtocolRecognizer.h +++ b/source/Protocol/ProtocolRecognizer.h @@ -98,6 +98,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) override; virtual void SendRespawn (void) override; virtual void SendExperience (void) override; + virtual void SendExperienceOrb (const cEntity & a_Entity) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; -- cgit v1.2.3 From 18b5ccbc0836dbfb4adcff76dbfbde340bcabbc1 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Mon, 25 Nov 2013 21:43:43 +0100 Subject: Fixed Details Xoft gave. Increased the range where orbs (should) track you. Blazes give 10 xp now. --- source/Protocol/Protocol.h | 3 ++- source/Protocol/Protocol125.cpp | 12 ++++++------ source/Protocol/Protocol125.h | 2 +- source/Protocol/Protocol17x.cpp | 12 ++++++------ source/Protocol/Protocol17x.h | 2 +- source/Protocol/ProtocolRecognizer.cpp | 4 ++-- source/Protocol/ProtocolRecognizer.h | 2 +- 7 files changed, 19 insertions(+), 18 deletions(-) (limited to 'source/Protocol') diff --git a/source/Protocol/Protocol.h b/source/Protocol/Protocol.h index 18cf3676a..9d8183361 100644 --- a/source/Protocol/Protocol.h +++ b/source/Protocol/Protocol.h @@ -16,6 +16,7 @@ +class cExpOrb; class cPlayer; class cEntity; class cWindow; @@ -86,7 +87,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) = 0; virtual void SendRespawn (void) = 0; virtual void SendExperience (void) = 0; - virtual void SendExperienceOrb (const cEntity & a_Entity) = 0; + virtual void SendExperienceOrb (const cExpOrb & a_ExpOrb) = 0; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) = 0; // a_Src coords are Block * 8 virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) = 0; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) = 0; diff --git a/source/Protocol/Protocol125.cpp b/source/Protocol/Protocol125.cpp index 3b753479d..b1dd17ea1 100644 --- a/source/Protocol/Protocol125.cpp +++ b/source/Protocol/Protocol125.cpp @@ -707,15 +707,15 @@ void cProtocol125::SendExperience(void) -void cProtocol125::SendExperienceOrb(const cEntity & a_Entity) +void cProtocol125::SendExperienceOrb(const cExpOrb & a_ExpOrb) { cCSLock Lock(m_CSPacket); WriteByte(PACKET_SPAWN_EXPERIENCE_ORB); - WriteInt(a_Entity.GetUniqueID()); - WriteInt((int) a_Entity.GetPosX()); - WriteInt((int) a_Entity.GetPosY()); - WriteInt((int) a_Entity.GetPosZ()); - WriteShort(((cExpOrb &)a_Entity).GetReward()); + WriteInt(a_ExpOrb.GetUniqueID()); + WriteInt((int) a_ExpOrb.GetPosX()); + WriteInt((int) a_ExpOrb.GetPosY()); + WriteInt((int) a_ExpOrb.GetPosZ()); + WriteShort(a_ExpOrb.GetReward()); Flush(); } diff --git a/source/Protocol/Protocol125.h b/source/Protocol/Protocol125.h index 2182ea356..5a9218f5b 100644 --- a/source/Protocol/Protocol125.h +++ b/source/Protocol/Protocol125.h @@ -63,7 +63,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) override; virtual void SendRespawn (void) override; virtual void SendExperience (void) override; - virtual void SendExperienceOrb (const cEntity & a_Entity) override; + virtual void SendExperienceOrb (const cExpOrb & a_ExpOrb) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; // a_Src coords are Block * 8 virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; diff --git a/source/Protocol/Protocol17x.cpp b/source/Protocol/Protocol17x.cpp index cf5c84599..746e1c127 100644 --- a/source/Protocol/Protocol17x.cpp +++ b/source/Protocol/Protocol17x.cpp @@ -610,14 +610,14 @@ void cProtocol172::SendExperience (void) -void cProtocol172::SendExperienceOrb(const cEntity & a_Entity) +void cProtocol172::SendExperienceOrb(const cExpOrb & a_ExpOrb) { cPacketizer Pkt(*this, 0x11); - Pkt.WriteVarInt(a_Entity.GetUniqueID()); - Pkt.WriteInt((int) a_Entity.GetPosX()); - Pkt.WriteInt((int) a_Entity.GetPosY()); - Pkt.WriteInt((int) a_Entity.GetPosZ()); - Pkt.WriteShort(((cExpOrb &)a_Entity).GetReward()); + Pkt.WriteVarInt(a_ExpOrb.GetUniqueID()); + Pkt.WriteInt((int) a_ExpOrb.GetPosX()); + Pkt.WriteInt((int) a_ExpOrb.GetPosY()); + Pkt.WriteInt((int) a_ExpOrb.GetPosZ()); + Pkt.WriteShort(a_ExpOrb.GetReward()); } diff --git a/source/Protocol/Protocol17x.h b/source/Protocol/Protocol17x.h index 6b8d2ce79..255cb4ef5 100644 --- a/source/Protocol/Protocol17x.h +++ b/source/Protocol/Protocol17x.h @@ -73,7 +73,7 @@ public: virtual void SendRespawn (void) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; // a_Src coords are Block * 8 virtual void SendExperience (void) override; - virtual void SendExperienceOrb (const cEntity & a_Entity) override; + virtual void SendExperienceOrb (const cExpOrb & a_ExpOrb) override; virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; virtual void SendSpawnMob (const cMonster & a_Mob) override; diff --git a/source/Protocol/ProtocolRecognizer.cpp b/source/Protocol/ProtocolRecognizer.cpp index ad00e8d38..489149d74 100644 --- a/source/Protocol/ProtocolRecognizer.cpp +++ b/source/Protocol/ProtocolRecognizer.cpp @@ -476,10 +476,10 @@ void cProtocolRecognizer::SendExperience(void) -void cProtocolRecognizer::SendExperienceOrb(const cEntity & a_Entity) +void cProtocolRecognizer::SendExperienceOrb(const cExpOrb & a_ExpOrb) { ASSERT(m_Protocol != NULL); - m_Protocol->SendExperienceOrb(a_Entity); + m_Protocol->SendExperienceOrb(a_ExpOrb); } diff --git a/source/Protocol/ProtocolRecognizer.h b/source/Protocol/ProtocolRecognizer.h index 62e624980..9ca0c1c88 100644 --- a/source/Protocol/ProtocolRecognizer.h +++ b/source/Protocol/ProtocolRecognizer.h @@ -98,7 +98,7 @@ public: virtual void SendPlayerSpawn (const cPlayer & a_Player) override; virtual void SendRespawn (void) override; virtual void SendExperience (void) override; - virtual void SendExperienceOrb (const cEntity & a_Entity) override; + virtual void SendExperienceOrb (const cExpOrb & a_ExpOrb) override; virtual void SendSoundEffect (const AString & a_SoundName, int a_SrcX, int a_SrcY, int a_SrcZ, float a_Volume, float a_Pitch) override; virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override; virtual void SendSpawnFallingBlock (const cFallingBlock & a_FallingBlock) override; -- cgit v1.2.3