#pragma once #include "../../Player/Player.h" #include "SavedData.h" class MapItemSavedData : public SavedData { private: static const int HEADER_COLOURS = 0; static const int HEADER_DECORATIONS = 1; static const int HEADER_METADATA = 2; public: static const int MAP_SIZE = 64; static const int MAX_SCALE = 4; #ifdef _LARGE_WORLDS static const int DEC_PACKET_BYTES = 8; #else static const int DEC_PACKET_BYTES = 7; #endif class MapDecoration { public: char img, x, y, rot; int entityId; // 4J Added bool visible; MapDecoration(char img, char x, char y, char rot, int entityId, bool visible); // 4J added entityId, visible param }; class HoldingPlayer { public: const std::shared_ptr player; intArray rowsDirtyMin; intArray rowsDirtyMax; private: int tick; int sendPosTick; charArray lastSentDecorations; public: int step; private: bool hasSentInitial; protected: const MapItemSavedData* parent; public: // 4J Stu - Had to add a reference to the MapItemSavedData object that // created us as we try to access it's member variables HoldingPlayer(std::shared_ptr player, const MapItemSavedData* parent); ~HoldingPlayer(); charArray nextUpdatePacket(std::shared_ptr itemInstance); }; public: int x, z; char dimension; uint8_t scale; byteArray colors; std::vector > carriedBy; private: typedef std::unordered_map, std::shared_ptr, PlayerKeyHash, PlayerKeyEq> playerHoldingPlayerMapType; playerHoldingPlayerMapType carriedByPlayers; public: std::vector decorations; private: // 4J Stu added std::unordered_map nonPlayerDecorations; static const int END_PORTAL_DECORATION_KEY; public: MapItemSavedData(const std::wstring& id); ~MapItemSavedData(); virtual void load(CompoundTag* tag); virtual void save(CompoundTag* tag); void tickCarriedBy(std::shared_ptr player, std::shared_ptr item); charArray getUpdatePacket(std::shared_ptr itemInstance, Level* level, std::shared_ptr player); using SavedData::setDirty; void setDirty(int x, int y0, int y1); void handleComplexItemData(charArray& data); std::shared_ptr getHoldingPlayer( std::shared_ptr player); // 4J Stu Added void mergeInMapData(std::shared_ptr dataToAdd); void removeItemFrameDecoration(std::shared_ptr item); };