summaryrefslogblamecommitdiffstats
path: root/src/packet/Packet.hpp
blob: 67e95e510573153e9311c61700c700be9d35de9f (plain) (tree)

































































































































                                                                   
#pragma once

#include <vector>
#include "Field.hpp"
#include "FieldParser.hpp"

enum ConnectionState {
    Login,
    Handshaking,
    Play,
    Status,
};

enum PacketsClientBound{
    SpawnObject=0x00,
    SpawnExperienceOrb,
    SpawnGlobalEntity,
    SpawnMob,
    SpawnPainting,
    SpawnPlayer,
    Animation,
    Statistics,
    BlockBreakAnimation,
    UpdateBlockEntity,
    BlockAction,
    BlockChange,
    BossBar,
    ServerDifficulty,
    Tab,
    ChatMessage,
    MultiBlockChange,
    ConfirmTransaction,
    CloseWindow,
    OpenWindow,
    WindowItems,
    WindowProperty,
    SetSlot,
    SetCooldown,
    PluginMessage,
    NamedSoundEffect,
    Disconnect,
    EntityStatus,
    Explosion,
    UnloadChunk,
    ChangeGameState,
    KeepAlive,
    ChunkData,
    Effect,
    Particle,
    JoinGame,
    Map,
    EntityRelativeMove,
    EntityLookAndRelativeMove,
    EntityLook,
    Entity,
    VehicleMove,
    OpenSignEditor,
    PlayerAbilities,
    CombatEvent,
    PlayerListItem,
    PlayerPositionAndLook,
    UseBed,
    DestroyEntities,
    RemoveEntityEffect,
    ResourcePackSend,
    Respawn,
    EntityHeadLook,
    WorldBorder,
    Camera,
    HeldItemChange,
    DisplayScoreboard,
    EntityMetadata_,
    AttachEntity,
    EntityVelocity,
    EntityEquipment,
    SetExperience,
    UpdateHealth,
    ScoreboardObjective,
    SetPassengers,
    Teams,
    UpdateScore,
    SpawnPosition,
    TimeUpdate,
    Title,
    SoundEffect,
    PlayerListHeaderAndFooter,
    CollectItem,
    EntityTeleport,
    EntityProperties,
    EntityEffect,
};

class Packet {
public:
    Packet(int id);

    Packet(byte *data);

    Packet(const Packet &other);

    ~Packet() {
        delete[] m_data;
    }

    int GetId();

    void AddField(Field field);

    void ParseField(FieldType type, size_t len = 0);

    void ParseFieldArray(Field &field, FieldType type, size_t len);

    Field & GetField(int id);

    size_t GetLength();

    void CopyToBuff(byte *ptr);

    void swap(Packet &other);

    Packet operator=(Packet other);

private:
    Packet();

    std::vector<Field> m_fields;
    byte *m_data = nullptr;
    byte *m_parsePtr = nullptr;
    size_t m_dataLength = 0;
};