summaryrefslogtreecommitdiffstats
path: root/source/Enchantments.h
blob: 6b3b4679b9f4114e3f7eff0b2e7f44e63c1cfbc9 (plain) (blame)
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
102
103
104
105

// Enchantments.h

// Declares the cEnchantments class representing a storage for item enchantments and stored-enchantments





#pragma once





// fwd: WorldStorage/FastNBT.h
class cFastNBTWriter;
class cParsedNBT;





// tolua_begin

/** Class that stores item enchantments or stored-enchantments
The enchantments may be serialized to a stringspec and read back from such stringspec.
The format for the stringspec is "id=lvl;id=lvl;id=lvl...", with an optional semicolon at the end,
mapping each enchantment's id onto its level.
Level value of 0 means no such enchantment, and it will not be stored in the m_Enchantments.
Serialization will never put zero-level enchantments into the stringspec.
*/
class cEnchantments
{
public:
	/// Individual enchantment IDs, corresponding to their NBT IDs ( http://www.minecraftwiki.net/wiki/Data_Values#Enchantment_IDs )
	enum
	{
		enchProtection           = 0,
		enchFireProtection       = 1,
		enchFeatherFalling       = 2,
		enchBlastProtection      = 3,
		enchProjectileProtection = 4,
		enchRespiration          = 5,
		enchAquaAffinity         = 6,
		enchThorns               = 7,
		enchSharpness            = 16,
		enchSmite                = 17,
		enchBaneOfArthropods     = 18,
		enchKnockback            = 19,
		enchFireAspect           = 20,
		enchLooting              = 21,
		enchEfficiency           = 32,
		enchSilkTouch            = 33,
		enchUnbreaking           = 34,
		enchFortune              = 35,
		enchPower                = 48,
		enchPunch                = 49,
		enchFlame                = 50,
		enchInfinity             = 51,
	} ;
	
	/// Creates an empty enchantments container
	cEnchantments(void);
	
	/// Creates an enchantments container filled with enchantments parsed from stringspec
	cEnchantments(const AString & a_StringSpec);
	
	/// Adds enchantments in the stringspec; if a specified enchantment already exists, overwrites it
	void AddFromString(const AString & a_StringSpec);
	
	/// Serializes all the enchantments into a string
	AString ToString(void) const;
	
	/// Returns the level for the specified enchantment; 0 if not stored
	int GetLevel(int a_EnchantmentID) const;
	
	/// Sets the level for the specified enchantment, adding it if not stored before or removing it if level <= 0
	void SetLevel(int a_EnchantmentID, int a_Level);
	
	/// Removes all enchantments
	void Clear(void);
	
	/// Returns true if there are no enchantments
	bool IsEmpty(void) const;
	
	// tolua_end
	
	/// Writes the enchantments into the specified NBT writer; begins with the LIST tag of the specified name ("ench" or "StoredEnchantments")
	void WriteToNBTCompound(cFastNBTWriter & a_Writer, const AString & a_ListTagName) const;
	
	/// Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments)
	void ParseFromNBT(cParsedNBT & a_NBT, int a_EnchListTagIdx);
	
protected:
	/// Maps enchantment ID -> enchantment level
	typedef std::map<int, int> cMap;
	
	/// Currently stored enchantments
	cMap m_Enchantments;
} ;  // tolua_export