#pragma once #include "../GameState/GameMode.h" class ClientConnection; class GameType; class Vec3; class MultiPlayerGameMode { private: int xDestroyBlock; int yDestroyBlock; int zDestroyBlock; std::shared_ptr destroyingItem; float destroyProgress; int destroyTicks; // 4J was float but doesn't seem to need to be int destroyDelay; bool isDestroying; GameType* localPlayerMode; ClientConnection* connection; protected: Minecraft* minecraft; public: MultiPlayerGameMode(Minecraft* minecraft, ClientConnection* connection); static void creativeDestroyBlock(Minecraft* minecraft, MultiPlayerGameMode* gameMode, int x, int y, int z, int face); void adjustPlayer(std::shared_ptr player); bool isCutScene(); void setLocalMode(GameType* mode); virtual void initPlayer(std::shared_ptr player); virtual bool canHurtPlayer(); virtual bool destroyBlock(int x, int y, int z, int face); virtual void startDestroyBlock(int x, int y, int z, int face); virtual void stopDestroyBlock(); virtual void continueDestroyBlock(int x, int y, int z, int face); virtual float getPickRange(); virtual void tick(); private: int carriedItem; private: bool sameDestroyTarget(int x, int y, int z); void ensureHasSentCarriedItem(); public: virtual bool useItemOn(std::shared_ptr player, Level* level, std::shared_ptr item, int x, int y, int z, int face, Vec3* hit, bool bTestUseOnly = false, bool* pbUsedItem = NULL); virtual bool useItem(std::shared_ptr player, Level* level, std::shared_ptr item, bool bTestUseOnly = false); virtual std::shared_ptr createPlayer(Level* level); virtual void attack(std::shared_ptr player, std::shared_ptr entity); virtual bool interact(std::shared_ptr player, std::shared_ptr entity); virtual std::shared_ptr handleInventoryMouseClick( int containerId, int slotNum, int buttonNum, bool quickKeyHeld, std::shared_ptr player); virtual void handleInventoryButtonClick(int containerId, int buttonId); virtual void handleCreativeModeItemAdd( std::shared_ptr clicked, int slot); virtual void handleCreativeModeItemDrop( std::shared_ptr clicked); virtual void releaseUsingItem(std::shared_ptr player); virtual bool hasExperience(); virtual bool hasMissTime(); virtual bool hasInfiniteItems(); virtual bool hasFarPickRange(); virtual bool isServerControlledInventory(); // 4J Stu - Added so we can send packets for this in the network game virtual bool handleCraftItem(int recipe, std::shared_ptr player); virtual void handleDebugOptions(unsigned int uiVal, std::shared_ptr player); // 4J Stu - Added for tutorial checks virtual bool isInputAllowed(int mapping) { return true; } virtual bool isTutorial() { return false; } virtual Tutorial* getTutorial() { return NULL; } };