From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/PlayerConnection.h | 138 ++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Minecraft.Client/PlayerConnection.h (limited to 'Minecraft.Client/PlayerConnection.h') diff --git a/Minecraft.Client/PlayerConnection.h b/Minecraft.Client/PlayerConnection.h new file mode 100644 index 00000000..0d4ce2f6 --- /dev/null +++ b/Minecraft.Client/PlayerConnection.h @@ -0,0 +1,138 @@ +#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; +}; \ No newline at end of file -- cgit v1.2.3