aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/MapItemSavedData.h
blob: 21322644705a06becfcd105b7099e551ea706e43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#pragma once

#include "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 shared_ptr<Player> 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(shared_ptr<Player> player, const MapItemSavedData *parent);
		~HoldingPlayer();
		charArray nextUpdatePacket(shared_ptr<ItemInstance> itemInstance);
	};

public:
	int x, z;
	char dimension;
	byte scale;
	byteArray colors;
	vector<shared_ptr<HoldingPlayer> > carriedBy;

private:

	typedef unordered_map<shared_ptr<Player> , shared_ptr<HoldingPlayer> , PlayerKeyHash, PlayerKeyEq> playerHoldingPlayerMapType;
	playerHoldingPlayerMapType carriedByPlayers;

public:
	vector<MapDecoration *> decorations;

private:
	// 4J Stu added
	unordered_map<int, MapDecoration *> nonPlayerDecorations;
	static const int END_PORTAL_DECORATION_KEY;


public:
	MapItemSavedData(const wstring& id);
	~MapItemSavedData();

	virtual void load(CompoundTag *tag);
	virtual void save(CompoundTag *tag);

	void tickCarriedBy(shared_ptr<Player> player, shared_ptr<ItemInstance> item);

	charArray getUpdatePacket(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player);

	using SavedData::setDirty;
	void setDirty(int x, int y0, int y1);
	void handleComplexItemData(charArray &data);
	shared_ptr<HoldingPlayer> getHoldingPlayer(shared_ptr<Player> player);

	// 4J Stu Added
	void mergeInMapData(shared_ptr<MapItemSavedData> dataToAdd);
	void removeItemFrameDecoration(shared_ptr<ItemInstance> item);
};