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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
// Enchantments.h
// Declares the cEnchantments class representing a storage for item enchantments and stored-enchantments
#pragma once
#include "WorldStorage/EnchantmentSerializer.h"
// fwd: WorldStorage/FastNBT.h
class cFastNBTWriter;
class cParsedNBT;
// ENCHANTMENT IDS
enum
{
E_ENCHANTMENT_PROTECTION = 0,
E_ENCHANTMENT_FIRE_PROTECTION = 1,
E_ENCHANTMENT_FEATHER_FALLING = 2,
E_ENCHANTMENT_BLAST_PROTECTION = 3,
E_ENCHANTMENT_PROJECTILE_PROTECTION= 4,
E_ENCHANTMENT_RESPIRATION = 5,
E_ENCHANTMENT_AQUA_AFFINITY = 6,
E_ENCHANTMENT_THORNS = 7,
E_ENCHANTMENT_SHARPNESS = 16,
E_ENCHANTMENT_SMITE = 17,
E_ENCHANTMENT_BANE_OF_ARTHROPODS = 18,
E_ENCHANTMENT_KNOCKBACK = 19,
E_ENCHANTMENT_FIREASPECT = 20,
E_ENCHANTMENT_LOOTING = 21,
E_ENCHANTMENT_EFFICIENCY = 32,
E_ENCHANTMENT_SILKTOUCH = 33,
E_ENCHANTMENT_UNBREAKING = 34,
E_ENCHANTMENT_FORTUNE = 35,
E_ENCHANTMENT_POWER = 48,
E_ENCHANTMENT_PUNCH = 49,
E_ENCHANTMENT_FLAME = 50,
E_ENCHANTMENT_INFINITY = 51,
E_ENCHANTMENT_LUCKOFTHESEA = 61,
E_ENCHANTMENT_LURE = 62,
};
/** 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. ID may be either a number or the enchantment name.
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 and will always use numeric IDs.
*/
// tolua_begin
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,
enchLuckOfTheSea = 61,
enchLure = 62,
} ;
/// 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;
/// Converts enchantment name to the numeric representation; returns -1 if enchantment name not found; case insensitive
static int StringToEnchantmentID(const AString & a_EnchantmentName);
/// Returns true if a_Other contains exactly the same enchantments and levels
bool operator ==(const cEnchantments & a_Other) const;
// tolua_end
/// Returns true if a_Other doesn't contain exactly the same enchantments and levels
bool operator !=(const cEnchantments & a_Other) const;
/// Writes the enchantments into the specified NBT writer; begins with the LIST tag of the specified name ("ench" or "StoredEnchantments")
friend void EnchantmentSerializer::WriteToNBTCompound(cEnchantments const& a_Enchantments, cFastNBTWriter & a_Writer, const AString & a_ListTagName);
/// Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments)
friend void EnchantmentSerializer::ParseFromNBT(cEnchantments& a_Enchantments, const 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
|