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/ServerPlayerGameMode.h | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Minecraft.Client/ServerPlayerGameMode.h (limited to 'Minecraft.Client/ServerPlayerGameMode.h') diff --git a/Minecraft.Client/ServerPlayerGameMode.h b/Minecraft.Client/ServerPlayerGameMode.h new file mode 100644 index 00000000..89b9e9b4 --- /dev/null +++ b/Minecraft.Client/ServerPlayerGameMode.h @@ -0,0 +1,60 @@ +#pragma once +class ServerPlayer; +class Level; +class ItemInstance; +class ServerLevel; +class GameRulesInstance; +class GameType; + +class ServerPlayerGameMode +{ +public: + Level *level; + shared_ptr player; + +private: + GameType *gameModeForPlayer; + +private: + bool isDestroyingBlock; + int destroyProgressStart; + int xDestroyBlock, yDestroyBlock, zDestroyBlock; + int gameTicks; + + bool hasDelayedDestroy; + int delayedDestroyX, delayedDestroyY, delayedDestroyZ; + int delayedTickStart; + int lastSentState; + +private: + // 4J Added + GameRulesInstance *m_gameRules; +public: + void setGameRules(GameRulesInstance *rules); + GameRulesInstance *getGameRules() { return m_gameRules; } + +public: + ServerPlayerGameMode(Level *level); + ~ServerPlayerGameMode(); + + void setGameModeForPlayer(GameType *gameModeForPlayer); + GameType *getGameModeForPlayer(); + bool isSurvival(); + bool isCreative(); + void updateGameMode(GameType *gameType); + + void tick(); + void startDestroyBlock(int x, int y, int z, int face); + void stopDestroyBlock(int x, int y, int z); + void abortDestroyBlock(int x, int y, int z); + +private: + bool superDestroyBlock(int x, int y, int z); + +public: + bool destroyBlock(int x, int y, int z); + bool useItem(shared_ptr player, Level *level, shared_ptr item, bool bTestUseOnly=false); + bool useItemOn(shared_ptr player, Level *level, shared_ptr item, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly=false, bool *pbUsedItem=NULL); + + void setLevel(ServerLevel *newLevel); +}; \ No newline at end of file -- cgit v1.2.3