namespace blank {
class Entity;
+class EntityState;
struct Packet {
std::size_t length;
std::uint8_t *data;
+ std::uint16_t Seq() const noexcept {
+ return reinterpret_cast<const Packet *>(data - sizeof(Header))->header.ctrl.seq;
+ }
+
template<class T>
void Write(const T &, size_t off) noexcept;
template<class T>
void WritePlayer(const Entity &) noexcept;
void ReadPlayerID(std::uint32_t &) const noexcept;
- void ReadPlayer(Entity &) const noexcept;
+ void ReadPlayerState(EntityState &) const noexcept;
void WriteWorldName(const std::string &) noexcept;
void ReadWorldName(std::string &) const noexcept;
};
static constexpr std::size_t MAX_LEN = 64;
void WritePlayer(const Entity &) noexcept;
- void ReadPlayer(Entity &) const noexcept;
+ void ReadPlayerState(EntityState &) const noexcept;
+ };
+
+ struct SpawnEntity : public Payload {
+ static constexpr std::uint8_t TYPE = 5;
+ static constexpr std::size_t MAX_LEN = 132;
+
+ void WriteEntity(const Entity &) noexcept;
+ void ReadEntityID(std::uint32_t &) const noexcept;
+ void ReadSkeletonID(std::uint32_t &) const noexcept;
+ void ReadEntity(Entity &) const noexcept;
+ };
+
+ struct DespawnEntity : public Payload {
+ static constexpr std::uint8_t TYPE = 6;
+ static constexpr std::size_t MAX_LEN = 4;
+
+ void WriteEntityID(std::uint32_t) noexcept;
+ void ReadEntityID(std::uint32_t &) const noexcept;
+ };
+
+ struct EntityUpdate : public Payload {
+ static constexpr std::uint8_t TYPE = 7;
+ static constexpr std::size_t MAX_LEN = 452;
+
+ static constexpr std::uint32_t MAX_ENTITIES = 7;
+ static constexpr std::size_t GetSize(std::uint32_t num) noexcept {
+ return 4 + (num * 64);
+ }
+
+ void WriteEntityCount(std::uint32_t) noexcept;
+ void ReadEntityCount(std::uint32_t &) const noexcept;
+
+ void WriteEntity(const Entity &, std::uint32_t) noexcept;
+ void ReadEntityID(std::uint32_t &, std::uint32_t) const noexcept;
+ void ReadEntityState(EntityState &, std::uint32_t) const noexcept;
+ };
+
+ struct PlayerCorrection : public Payload {
+ static constexpr std::uint8_t TYPE = 8;
+ static constexpr std::size_t MAX_LEN = 66;
+
+ void WritePacketSeq(std::uint16_t) noexcept;
+ void ReadPacketSeq(std::uint16_t &) const noexcept;
+ void WritePlayer(const Entity &) noexcept;
+ void ReadPlayerState(EntityState &) const noexcept;
};