aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/PlayerAbilitiesPacket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/PlayerAbilitiesPacket.cpp')
-rw-r--r--Minecraft.World/PlayerAbilitiesPacket.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/Minecraft.World/PlayerAbilitiesPacket.cpp b/Minecraft.World/PlayerAbilitiesPacket.cpp
new file mode 100644
index 00000000..b1b854a5
--- /dev/null
+++ b/Minecraft.World/PlayerAbilitiesPacket.cpp
@@ -0,0 +1,137 @@
+#include "stdafx.h"
+#include "net.minecraft.world.entity.player.h"
+#include "net.minecraft.network.packet.h"
+#include "PlayerAbilitiesPacket.h"
+
+const float PlayerAbilitiesPacket::SPEED_ACCURACY = 255.0f;
+
+PlayerAbilitiesPacket::PlayerAbilitiesPacket()
+{
+ invulnerable = false;
+ _isFlying = false;
+ _canFly = false;
+ instabuild = false;
+ flyingSpeed = 0.0f;
+ walkingSpeed = 0.0f;
+}
+
+PlayerAbilitiesPacket::PlayerAbilitiesPacket(Abilities *abilities)
+{
+ this->setInvulnerable(abilities->invulnerable);
+ this->setFlying(abilities->flying);
+ this->setCanFly(abilities->mayfly);
+ this->setInstabuild(abilities->instabuild);
+ this->setFlyingSpeed(abilities->getFlyingSpeed());
+ this->setWalkingSpeed(abilities->getWalkingSpeed());
+}
+
+void PlayerAbilitiesPacket::read(DataInputStream *dis)
+{
+ byte bitfield = dis->readByte();
+
+ this->setInvulnerable((bitfield & FLAG_INVULNERABLE) > 0);
+ this->setFlying((bitfield & FLAG_FLYING) > 0);
+ this->setCanFly((bitfield & FLAG_CAN_FLY) > 0);
+ this->setInstabuild((bitfield & FLAG_INSTABUILD) > 0);
+ this->setFlyingSpeed(dis->readByte() / SPEED_ACCURACY);
+ this->setWalkingSpeed(dis->readByte() / SPEED_ACCURACY);
+}
+
+void PlayerAbilitiesPacket::write(DataOutputStream *dos)
+{
+ byte bitfield = 0;
+
+ if (isInvulnerable()) bitfield |= FLAG_INVULNERABLE;
+ if (isFlying()) bitfield |= FLAG_FLYING;
+ if (canFly()) bitfield |= FLAG_CAN_FLY;
+ if (canInstabuild()) bitfield |= FLAG_INSTABUILD;
+
+ dos->writeByte(bitfield);
+ dos->writeByte((int) (flyingSpeed * SPEED_ACCURACY));
+ dos->writeByte((int) (walkingSpeed * SPEED_ACCURACY));
+}
+
+void PlayerAbilitiesPacket::handle(PacketListener *listener)
+{
+ listener->handlePlayerAbilities(shared_from_this());
+}
+
+int PlayerAbilitiesPacket::getEstimatedSize()
+{
+ return 2;
+}
+
+//wstring getDebugInfo()
+//{
+// return String.format("invuln=%b, flying=%b, canfly=%b, instabuild=%b, flyspeed=%.4f, walkspped=%.4f", isInvulnerable(), isFlying(), canFly(), canInstabuild(), getFlyingSpeed(), getWalkingSpeed());
+//}
+
+bool PlayerAbilitiesPacket::isInvulnerable()
+{
+ return invulnerable;
+}
+
+void PlayerAbilitiesPacket::setInvulnerable(bool invulnerable)
+{
+ this->invulnerable = invulnerable;
+}
+
+bool PlayerAbilitiesPacket::isFlying()
+{
+ return _isFlying;
+}
+
+void PlayerAbilitiesPacket::setFlying(bool flying)
+{
+ _isFlying = flying;
+}
+
+bool PlayerAbilitiesPacket::canFly()
+{
+ return _canFly;
+}
+
+void PlayerAbilitiesPacket::setCanFly(bool canFly)
+{
+ this->_canFly = canFly;
+}
+
+bool PlayerAbilitiesPacket::canInstabuild()
+{
+ return instabuild;
+}
+
+void PlayerAbilitiesPacket::setInstabuild(bool instabuild)
+{
+ this->instabuild = instabuild;
+}
+
+float PlayerAbilitiesPacket::getFlyingSpeed()
+{
+ return flyingSpeed;
+}
+
+void PlayerAbilitiesPacket::setFlyingSpeed(float flySpeed)
+{
+ this->flyingSpeed = flySpeed;
+}
+
+float PlayerAbilitiesPacket::getWalkingSpeed()
+{
+ return walkingSpeed;
+}
+
+void PlayerAbilitiesPacket::setWalkingSpeed(float walkingSpeed)
+{
+ this->walkingSpeed = walkingSpeed;
+}
+
+bool PlayerAbilitiesPacket::canBeInvalidated()
+{
+ return true;
+}
+
+bool PlayerAbilitiesPacket::isInvalidatedBy(shared_ptr<Packet> packet)
+{
+ return true;
+} \ No newline at end of file