Botcraft 1.21.11
Loading...
Searching...
No Matches
WolfEntity.cpp
Go to the documentation of this file.
2
3#include <mutex>
4
5namespace Botcraft
6{
7 const std::array<std::string, WolfEntity::metadata_count> WolfEntity::metadata_names{ {
8#if PROTOCOL_VERSION < 499 /* < 1.15 */
9 "data_health_id",
10#endif
11 "data_interested_id",
12 "data_collar_color",
13#if PROTOCOL_VERSION > 578 /* > 1.15.2 */
14#if PROTOCOL_VERSION < 774 /* < 1.21.11 */
15 "data_remaining_anger_time",
16#else
17 "data_anger_end_time",
18#endif
19#endif
20#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
21 "data_variant_id",
22#endif
23#if PROTOCOL_VERSION > 769 /* > 1.21.4 */
24 "data_sound_variant_id",
25#endif
26 } };
27
29 {
30 // Initialize all metadata with default values
31#if PROTOCOL_VERSION < 499 /* < 1.15 */
32 SetDataHealthId(1.0f);
33#endif
36#if PROTOCOL_VERSION > 578 /* > 1.15.2 */
37#if PROTOCOL_VERSION < 774 /* < 1.21.11 */
38 SetDataRemainingAngerTime(0);
39#else
41#endif
42#endif
43#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
45#endif
46#if PROTOCOL_VERSION > 769 /* > 1.21.4 */
48#endif
49
50 // Initialize all attributes with default values
53#if PROTOCOL_VERSION < 766 /* < 1.20.5 */
55#else
57#endif
58 }
59
64
65
66 std::string WolfEntity::GetName() const
67 {
68 return "wolf";
69 }
70
72 {
73 return EntityType::Wolf;
74 }
75
76
78 {
79 return "wolf";
80 }
81
86
87
89 {
91
92#if PROTOCOL_VERSION < 499 /* < 1.15 */
93 output["metadata"]["data_health_id"] = GetDataHealthId();
94#endif
95 output["metadata"]["data_interested_id"] = GetDataInterestedId();
96 output["metadata"]["data_collar_color"] = GetDataCollarColor();
97#if PROTOCOL_VERSION > 578 /* > 1.15.2 */
98#if PROTOCOL_VERSION < 774 /* < 1.21.11 */
99 output["metadata"]["data_remaining_anger_time"] = GetDataRemainingAngerTime();
100#else
101 output["metadata"]["data_anger_end_time"] = GetDataAngerEndTime();
102#endif
103#endif
104#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
105 output["metadata"]["data_variant_id"] = GetDataVariantId();
106#endif
107#if PROTOCOL_VERSION > 769 /* > 1.21.4 */
108 output["metadata"]["data_sound_variant_id"] = GetDataSoundVariantId();
109#endif
110
111 output["attributes"]["attack_damage"] = GetAttributeAttackDamageValue();
112
113 return output;
114 }
115
116
117 void WolfEntity::SetMetadataValue(const int index, const std::any& value)
118 {
119 if (index < hierarchy_metadata_count)
120 {
122 }
123 else if (index - hierarchy_metadata_count < metadata_count)
124 {
125 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
127 }
128 }
129
130#if PROTOCOL_VERSION < 499 /* < 1.15 */
131 float WolfEntity::GetDataHealthId() const
132 {
133 std::shared_lock<std::shared_mutex> lock(entity_mutex);
134 return std::any_cast<float>(metadata.at("data_health_id"));
135 }
136#endif
137
139 {
140 std::shared_lock<std::shared_mutex> lock(entity_mutex);
141 return std::any_cast<bool>(metadata.at("data_interested_id"));
142 }
143
145 {
146 std::shared_lock<std::shared_mutex> lock(entity_mutex);
147 return std::any_cast<int>(metadata.at("data_collar_color"));
148 }
149
150#if PROTOCOL_VERSION > 578 /* > 1.15.2 */
151#if PROTOCOL_VERSION < 774 /* < 1.21.11 */
152 int WolfEntity::GetDataRemainingAngerTime() const
153 {
154 std::shared_lock<std::shared_mutex> lock(entity_mutex);
155 return std::any_cast<int>(metadata.at("data_remaining_anger_time"));
156 }
157#else
159 {
160 std::shared_lock<std::shared_mutex> lock(entity_mutex);
161 return std::any_cast<long long int>(metadata.at("data_anger_end_time"));
162 }
163#endif
164#endif
165
166#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
168 {
169 std::shared_lock<std::shared_mutex> lock(entity_mutex);
170 return std::any_cast<int>(metadata.at("data_variant_id"));
171 }
172#endif
173
174#if PROTOCOL_VERSION > 769 /* > 1.21.4 */
176 {
177 std::shared_lock<std::shared_mutex> lock(entity_mutex);
178 return std::any_cast<int>(metadata.at("data_sound_variant_id"));
179 }
180#endif
181
182
183#if PROTOCOL_VERSION < 499 /* < 1.15 */
184 void WolfEntity::SetDataHealthId(const float data_health_id)
185 {
186 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
187 metadata["data_health_id"] = data_health_id;
188 }
189#endif
190
191 void WolfEntity::SetDataInterestedId(const bool data_interested_id)
192 {
193 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
194 metadata["data_interested_id"] = data_interested_id;
195 }
196
197 void WolfEntity::SetDataCollarColor(const int data_collar_color)
198 {
199 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
200 metadata["data_collar_color"] = data_collar_color;
201 }
202
203#if PROTOCOL_VERSION > 578 /* > 1.15.2 */
204#if PROTOCOL_VERSION < 774 /* < 1.21.11 */
205 void WolfEntity::SetDataRemainingAngerTime(const int data_remaining_anger_time)
206 {
207 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
208 metadata["data_remaining_anger_time"] = data_remaining_anger_time;
209 }
210#else
211 void WolfEntity::SetDataAngerEndTime(const long long int data_anger_end_time)
212 {
213 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
214 metadata["data_anger_end_time"] = data_anger_end_time;
215 }
216#endif
217#endif
218
219#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
220 void WolfEntity::SetDataVariantId(const int data_variant_id)
221 {
222 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
223 metadata["data_variant_id"] = data_variant_id;
224 }
225#endif
226
227#if PROTOCOL_VERSION > 769 /* > 1.21.4 */
228 void WolfEntity::SetDataSoundVariantId(const int data_variant_id)
229 {
230 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
231 metadata["data_sound_variant_id"] = data_variant_id;
232 }
233#endif
234
235
237 {
238 std::shared_lock<std::shared_mutex> lock(entity_mutex);
240 }
241
242
244 {
245 return 0.6;
246 }
247
249 {
250 return 0.85;
251 }
252
253}
std::shared_mutex entity_mutex
Definition Entity.hpp:267
std::map< std::string, std::any > metadata
Definition Entity.hpp:282
std::map< EntityAttribute::Type, EntityAttribute > attributes
void SetDataHealthId(const float data_health_id)
float GetDataHealthId() const
virtual void SetMetadataValue(const int index, const std::any &value) override
virtual ProtocolCraft::Json::Value Serialize() const override
static std::string GetClassName()
virtual double GetWidthImpl() const override
virtual EntityType GetType() const override
virtual ProtocolCraft::Json::Value Serialize() const override
void SetDataVariantId(const int data_variant_id)
static EntityType GetClassType()
virtual std::string GetName() const override
bool GetDataInterestedId() const
int GetDataSoundVariantId() const
int GetDataCollarColor() const
virtual void SetMetadataValue(const int index, const std::any &value) override
static constexpr int hierarchy_metadata_count
void SetDataCollarColor(const int data_collar_color)
int GetDataVariantId() const
virtual double GetHeightImpl() const override
void SetDataAngerEndTime(const long long int data_anger_end_time)
double GetAttributeAttackDamageValue() const
void SetDataInterestedId(const bool data_interested_id)
static const std::array< std::string, metadata_count > metadata_names
static constexpr int metadata_count
long long int GetDataAngerEndTime() const
void SetDataSoundVariantId(const int data_sound_variant_id)
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
Definition Json.hpp:45