#pragma once #include class ServerPlayer; class Level; class ItemInstance; class ServerLevel; class GameRulesInstance; class GameType; class Player; class ServerPlayerGameMode { public: Level* level; std::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(std::shared_ptr player, Level* level, std::shared_ptr item, bool bTestUseOnly = false); bool useItemOn(std::shared_ptr player, Level* level, std::shared_ptr item, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly = false, bool* pbUsedItem = nullptr); void setLevel(ServerLevel* newLevel); };