Files
minecraft-pe-0.6.1/src/network/ClientSideNetworkHandler.h
2026-03-02 22:04:18 +03:00

108 lines
4.8 KiB
C++
Executable File

#ifndef _MINECRAFT_NETWORK_CLIENTSIDENETWORKHANDLER_H_
#define _MINECRAFT_NETWORK_CLIENTSIDENETWORKHANDLER_H_
#include "NetEventCallback.h"
#include "../raknet/RakNetTypes.h"
#include "../world/level/LevelConstants.h"
#include <vector>
class Minecraft;
class Level;
class IRakNetInstance;
struct SBufferedBlockUpdate
{
int x, z;
unsigned char y;
unsigned char blockId;
unsigned char blockData;
bool setData;
};
typedef std::vector<SBufferedBlockUpdate> BlockUpdateList;
typedef struct IntPair {
int x, y;
} IntPair;
class ClientSideNetworkHandler : public NetEventCallback
{
public:
ClientSideNetworkHandler(Minecraft* minecraft, IRakNetInstance* raknetInstance);
virtual ~ClientSideNetworkHandler();
virtual void levelGenerated(Level* level);
virtual void onConnect(const RakNet::RakNetGUID& hostGuid);
virtual void onUnableToConnect();
virtual void onDisconnect(const RakNet::RakNetGUID& guid);
virtual void handle(const RakNet::RakNetGUID& source, LoginStatusPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, StartGamePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, MessagePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SetTimePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AddItemEntityPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AddPaintingPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, TakeItemEntityPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AddEntityPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AddMobPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AddPlayerPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, RemoveEntityPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, RemovePlayerPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, MovePlayerPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, MoveEntityPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, UpdateBlockPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ExplodePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, LevelEventPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, TileEventPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, EntityEventPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ChunkDataPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, PlayerEquipmentPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, PlayerArmorEquipmentPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, InteractPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SetEntityDataPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SetEntityMotionPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SetHealthPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SetSpawnPositionPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AnimatePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, UseItemPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, HurtArmorPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, RespawnPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ContainerOpenPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ContainerClosePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ContainerSetContentPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ContainerSetSlotPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ContainerSetDataPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ChatPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AdventureSettingsPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet);
private:
void requestNextChunk();
void arrangeRequestChunkOrder();
bool isChunkLoaded(int x, int z);
bool areAllChunksLoaded();
void clearChunksLoaded();
private:
Minecraft* minecraft;
Level* level;
IRakNetInstance* raknetInstance;
RakNet::RakPeerInterface* rakPeer;
RakNet::RakNetGUID serverGuid;
BlockUpdateList bufferedBlockUpdates;
int requestNextChunkPosition;
static const int NumRequestChunks = CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH;
int requestNextChunkIndex;
IntPair requestNextChunkIndexList[NumRequestChunks];
bool chunksLoaded[NumRequestChunks];
};
#endif