#pragma once #include "../../Minecraft.World/Headers/net.minecraft.network.h" class Minecraft; class MultiPlayerLevel; class SavedDataStorage; class Socket; class MultiplayerLocalPlayer; class ClientConnection : public PacketListener { private: enum eClientConnectionConnectingState { eCCPreLoginSent = 0, eCCPreLoginReceived, eCCLoginSent, eCCLoginReceived, eCCConnected }; private: bool done; Connection* connection; public: std::wstring message; bool createdOk; // 4J added private: Minecraft* minecraft; MultiPlayerLevel* level; bool started; // 4J Stu - I don't think we are interested in the PlayerInfo data, so I'm // not going to use it at the moment // Map playerInfoMap = new HashMap(); public: // List playerInfos = new ArrayList(); int maxPlayers; public: bool isStarted() { return started; } // 4J Added bool isClosed() { return done; } // 4J Added Socket* getSocket() { return connection->getSocket(); } // 4J Added private: int m_userIndex; // 4J Added public: SavedDataStorage* savedDataStorage; ClientConnection(Minecraft* minecraft, const std::wstring& ip, int port); ClientConnection(Minecraft* minecraft, Socket* socket, int iUserIndex = -1); ~ClientConnection(); void tick(); INetworkPlayer* getNetworkPlayer(); virtual void handleLogin(std::shared_ptr packet); virtual void handleAddEntity(std::shared_ptr packet); virtual void handleAddExperienceOrb( std::shared_ptr packet); virtual void handleAddGlobalEntity( std::shared_ptr packet); virtual void handleAddPainting(std::shared_ptr packet); virtual void handleSetEntityMotion( std::shared_ptr packet); virtual void handleSetEntityData( std::shared_ptr packet); virtual void handleAddPlayer(std::shared_ptr packet); virtual void handleTeleportEntity( std::shared_ptr packet); virtual void handleSetCarriedItem( std::shared_ptr packet); virtual void handleMoveEntity(std::shared_ptr packet); virtual void handleRotateMob(std::shared_ptr packet); virtual void handleMoveEntitySmall( std::shared_ptr packet); virtual void handleRemoveEntity( std::shared_ptr packet); virtual void handleMovePlayer(std::shared_ptr packet); Random* random; // 4J Added virtual void handleChunkVisibilityArea( std::shared_ptr packet); virtual void handleChunkVisibility( std::shared_ptr packet); virtual void handleChunkTilesUpdate( std::shared_ptr packet); virtual void handleBlockRegionUpdate( std::shared_ptr packet); virtual void handleTileUpdate(std::shared_ptr packet); virtual void handleDisconnect(std::shared_ptr packet); virtual void onDisconnect(DisconnectPacket::eDisconnectReason reason, void* reasonObjects); void sendAndDisconnect(std::shared_ptr packet); void send(std::shared_ptr packet); virtual void handleTakeItemEntity( std::shared_ptr packet); virtual void handleChat(std::shared_ptr packet); virtual void handleAnimate(std::shared_ptr packet); virtual void handleEntityActionAtPosition( std::shared_ptr packet); virtual void handlePreLogin(std::shared_ptr packet); void close(); virtual void handleAddMob(std::shared_ptr packet); virtual void handleSetTime(std::shared_ptr packet); virtual void handleSetSpawn(std::shared_ptr packet); virtual void handleEntityLinkPacket( std::shared_ptr packet); virtual void handleEntityEvent(std::shared_ptr packet); private: std::shared_ptr getEntity(int entityId); std::wstring GetDisplayNameByGamertag(std::wstring gamertag); public: virtual void handleSetHealth(std::shared_ptr packet); virtual void handleSetExperience( std::shared_ptr packet); virtual void handleRespawn(std::shared_ptr packet); virtual void handleExplosion(std::shared_ptr packet); virtual void handleContainerOpen( std::shared_ptr packet); virtual void handleContainerSetSlot( std::shared_ptr packet); virtual void handleContainerAck(std::shared_ptr packet); virtual void handleContainerContent( std::shared_ptr packet); virtual void handleTileEditorOpen( std::shared_ptr packet); virtual void handleSignUpdate(std::shared_ptr packet); virtual void handleTileEntityData( std::shared_ptr packet); virtual void handleContainerSetData( std::shared_ptr packet); virtual void handleSetEquippedItem( std::shared_ptr packet); virtual void handleContainerClose( std::shared_ptr packet); virtual void handleTileEvent(std::shared_ptr packet); virtual void handleTileDestruction( std::shared_ptr packet); virtual bool canHandleAsyncPackets(); virtual void handleGameEvent( std::shared_ptr gameEventPacket); virtual void handleComplexItemData( std::shared_ptr packet); virtual void handleLevelEvent(std::shared_ptr packet); virtual void handleAwardStat(std::shared_ptr packet); virtual void handleUpdateMobEffect( std::shared_ptr packet); virtual void handleRemoveMobEffect( std::shared_ptr packet); virtual bool isServerPacketListener(); virtual void handlePlayerInfo(std::shared_ptr packet); virtual void handleKeepAlive(std::shared_ptr packet); virtual void handlePlayerAbilities( std::shared_ptr playerAbilitiesPacket); virtual void handleSoundEvent(std::shared_ptr packet); virtual void handleCustomPayload( std::shared_ptr customPayloadPacket); virtual Connection* getConnection(); // 4J Added virtual void handleServerSettingsChanged( std::shared_ptr packet); virtual void handleTexture(std::shared_ptr packet); virtual void handleTextureAndGeometry( std::shared_ptr packet); virtual void handleUpdateProgress( std::shared_ptr packet); // 4J Added static int HostDisconnectReturned(void* pParam, int iPad, C4JStorage::EMessageResult result); static int ExitGameAndSaveReturned(void* pParam, int iPad, C4JStorage::EMessageResult result); virtual void handleTextureChange( std::shared_ptr packet); virtual void handleTextureAndGeometryChange( std::shared_ptr packet); virtual void handleUpdateGameRuleProgressPacket( std::shared_ptr packet); virtual void handleXZ(std::shared_ptr packet); void displayPrivilegeChanges(std::shared_ptr player, unsigned int oldPrivileges); virtual void handleAddObjective(std::shared_ptr packet); virtual void handleSetScore(std::shared_ptr packet); virtual void handleSetDisplayObjective( std::shared_ptr packet); virtual void handleSetPlayerTeamPacket( std::shared_ptr packet); virtual void handleParticleEvent( std::shared_ptr packet); virtual void handleUpdateAttributes( std::shared_ptr packet); private: // 4J: Entity link packet deferred class DeferredEntityLinkPacket { public: uint32_t m_recievedTick; std::shared_ptr m_packet; DeferredEntityLinkPacket(std::shared_ptr packet); }; std::vector deferredEntityLinkPackets; static const int MAX_ENTITY_LINK_DEFERRAL_INTERVAL = 1000; void checkDeferredEntityLinkPackets(int newEntityId); };