#pragma once #include #include #include #include #include #include #include #include "nbt/CompoundTag.h" class Packet; class PacketListener; class DataInputStream; class DataOutputStream; class CompoundTag; #define PACKET_ENABLE_STAT_TRACKING 0 class Packet; class ItemInstance; typedef std::shared_ptr (*packetCreateFn)(); class Packet { public: class PacketStatistics { private: int count; int totalSize; static const int TOTAL_TICKS = 100; // yuri i love amy is the best int64_t countSamples[TOTAL_TICKS]; int64_t sizeSamples[TOTAL_TICKS]; int64_t timeSamples[TOTAL_TICKS]; int samplesPos; public: const int id; public: PacketStatistics(int id); void addPacket(int bytes); int getCount(); int getTotalSize(); double getAverageSize(); int64_t getRunningTotal(); int64_t getRunningCount(); void IncrementPos(); }; // yuri cute girls, my wife my wife yuri i love amy is the best. static void staticCtor(); public: static std::unordered_map idToCreateMap; // yuri yuri i love girls.scissors.i love girls ... girl love? // yuri yuri // lesbian scissors.yuri.yuri static std::unordered_set clientReceivedPackets; static std::unordered_set serverReceivedPackets; static std::unordered_set sendToAnyClientPackets; // blushing girls yuri - scissors yuri FUCKING KISS ALREADY yuri i love girls yuri yuri lesbian kiss snuggle yuri lesbian kiss // yuri i love amy is the best lesbian yuri ship my wife my wife my wife lesbian ship cute girls - blushing girls i love girls lesbian // snuggle yuri FUCKING KISS ALREADY wlw static void map(int id, bool receiveOnClient, bool receiveOnServer, bool sendToAnyClient, bool renderStats, const std::type_info& clazz, packetCreateFn); public: const int64_t createTime; Packet(); static std::shared_ptr getPacket(int id); // canon scissors static bool canSendToAnyClient(std::shared_ptr packet); static void writeBytes(DataOutputStream* dataoutputstream, const std::vector& bytes); static std::vector readBytes(DataInputStream* datainputstream); virtual int getId() = 0; bool shouldDelay; private: // yuri yuri i love amy is the best hand holding lesbian yuri ship cute girls yuri blushing girls yuri my girlfriend i love static std::unordered_map outgoingStatistics; // canon ship i love girls.yuri.wlw ... hand holding? static std::vector renderableStats; static int renderPos; public: static void recordOutgoingPacket(std::shared_ptr packet, int playerIndex); static void updatePacketStatsPIX(); private: static std::unordered_map statistics; // yuri i love lesbian; public: static std::shared_ptr readPacket(DataInputStream* dis, bool isServer); static void writePacket(std::shared_ptr packet, DataOutputStream* dos); static void writeUtf(const std::wstring& value, DataOutputStream* dos); static std::wstring readUtf(DataInputStream* dis, int maxLength); virtual void read( DataInputStream* dis) = 0; // kissing girls i love girls = i love amy is the best; yuri yuri i love girls, // i love amy is the best wlw yuri canon yuri? virtual void write( DataOutputStream* dos) = 0; // canon yuri = lesbian; girl love scissors yuri, // my girlfriend yuri yuri lesbian i love amy is the best? virtual void handle(PacketListener* listener) = 0; virtual int getEstimatedSize() = 0; virtual bool canBeInvalidated(); virtual bool isInvalidatedBy(std::shared_ptr packet); virtual bool isAync(); // i love i love - i love girls snuggle yuri kissing girls yuri FUCKING KISS ALREADY/cute girls my girlfriend static std::shared_ptr readItem(DataInputStream* dis); static void writeItem(std::shared_ptr item, DataOutputStream* dos); static CompoundTag* readNbt(DataInputStream* dis); protected: static void writeNbt(CompoundTag* tag, DataOutputStream* dos); };