#include "ConsoleInputSource.h" #include "..\Minecraft.World\PacketListener.h" #include "..\Minecraft.World\JavaIntHash.h" class MinecraftServer; class Connection; class ServerPlayer; class INetworkPlayer; using namespace std; class PlayerConnection : public PacketListener, public ConsoleInputSource { // public static Logger logger = Logger.getLogger("Minecraft"); public: Connection *connection; bool done; CRITICAL_SECTION done_cs; // 4J Stu - Added this so that we can manage UGC privileges PlayerUID m_offlineXUID, m_onlineXUID; bool m_friendsOnlyUGC; private: MinecraftServer *server; shared_ptr player; int tickCount; int aboveGroundTickCount; bool didTick; int lastKeepAliveId; __int64 lastKeepAliveTime; static Random random; __int64 lastKeepAliveTick; int chatSpamTickCount; int dropSpamTickCount; bool m_bHasClientTickedOnce; public: PlayerConnection(MinecraftServer *server, Connection *connection, shared_ptr player); ~PlayerConnection(); void tick(); void disconnect(DisconnectPacket::eDisconnectReason reason); private: double xLastOk, yLastOk, zLastOk; bool synched; public: virtual void handlePlayerInput(shared_ptr packet); virtual void handleMovePlayer(shared_ptr packet); void teleport(double x, double y, double z, float yRot, float xRot, bool sendPacket = true); // 4J Added sendPacket param virtual void handlePlayerAction(shared_ptr packet); virtual void handleUseItem(shared_ptr packet); virtual void onDisconnect(DisconnectPacket::eDisconnectReason reason, void *reasonObjects); virtual void onUnhandledPacket(shared_ptr packet); void send(shared_ptr packet); void queueSend(shared_ptr packet); // 4J Added virtual void handleSetCarriedItem(shared_ptr packet); virtual void handleChat(shared_ptr packet); private: void handleCommand(const wstring& message); public: virtual void handleAnimate(shared_ptr packet); virtual void handlePlayerCommand(shared_ptr packet); virtual void handleDisconnect(shared_ptr packet); int countDelayedPackets(); virtual void info(const wstring& string); virtual void warn(const wstring& string); virtual wstring getConsoleName(); virtual void handleInteract(shared_ptr packet); bool canHandleAsyncPackets(); virtual void handleClientCommand(shared_ptr packet); virtual void handleRespawn(shared_ptr packet); virtual void handleContainerClose(shared_ptr packet); private: unordered_map expectedAcks; public: // 4J Stu - Handlers only valid in debug mode #ifndef _CONTENT_PACKAGE virtual void handleContainerSetSlot(shared_ptr packet); #endif virtual void handleContainerClick(shared_ptr packet); virtual void handleContainerButtonClick(shared_ptr packet); virtual void handleSetCreativeModeSlot(shared_ptr packet); virtual void handleContainerAck(shared_ptr packet); virtual void handleSignUpdate(shared_ptr packet); virtual void handleKeepAlive(shared_ptr packet); virtual void handlePlayerInfo(shared_ptr packet); // 4J Added virtual bool isServerPacketListener(); virtual void handlePlayerAbilities(shared_ptr playerAbilitiesPacket); virtual void handleCustomPayload(shared_ptr customPayloadPacket); // 4J Added virtual void handleCraftItem(shared_ptr packet); virtual void handleTradeItem(shared_ptr packet); virtual void handleDebugOptions(shared_ptr packet); virtual void handleTexture(shared_ptr packet); virtual void handleTextureAndGeometry(shared_ptr packet); virtual void handleTextureChange(shared_ptr packet); virtual void handleTextureAndGeometryChange(shared_ptr packet); virtual void handleServerSettingsChanged(shared_ptr packet); virtual void handleKickPlayer(shared_ptr packet); virtual void handleGameCommand(shared_ptr packet); INetworkPlayer *getNetworkPlayer(); bool isLocal(); bool isGuest(); // 4J Added as we need to set this from outside sometimes void setPlayer(shared_ptr player) { this->player = player; } shared_ptr getPlayer() { return player; } // 4J Added to signal a disconnect from another thread void closeOnTick() { m_bCloseOnTick = true; } // 4J Added so that we can send on textures that get received after this connection requested them void handleTextureReceived(const wstring &textureName); void handleTextureAndGeometryReceived(const wstring &textureName); void setShowOnMaps(bool bVal); void setWasKicked() { m_bWasKicked = true; } bool getWasKicked() { return m_bWasKicked; } // 4J Added bool hasClientTickedOnce() { return m_bHasClientTickedOnce; } private: bool m_bCloseOnTick; vector m_texturesRequested; bool m_bWasKicked; };