Botcraft 26.1.1
Loading...
Searching...
No Matches
VillagerEntity.cpp
Go to the documentation of this file.
2
3#include <mutex>
4
5namespace Botcraft
6{
7 const std::array<std::string, VillagerEntity::metadata_count> VillagerEntity::metadata_names{ {
8#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
9 "data_villager_data",
10#else
11 "data_villager_profession_id",
12#endif
13#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
14 "data_villager_data_finalized",
15#endif
16 } };
17
19 {
20 // Initialize all metadata with default values
21#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
23#else
24 SetDataVillagerProfessionId(0);
25#endif
26#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
28#endif
29
30 // Initialize all attributes with default values
32#if PROTOCOL_VERSION < 768 /* < 1.21.2 */
34#endif
35 }
36
41
42
43 std::string VillagerEntity::GetName() const
44 {
45 return "villager";
46 }
47
52
53
55 {
56 return "villager";
57 }
58
63
64
66 {
67#if PROTOCOL_VERSION > 477 /* > 1.14 */
69#else
71#endif
72
73#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
74 output["metadata"]["data_villager_data"] = { GetDataVillagerData().type, GetDataVillagerData().profession, GetDataVillagerData().level };
75#else
76 output["metadata"]["data_villager_profession_id"] = std::any_cast<int>(GetDataVillagerProfessionId());
77#endif
78#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
79 output["metadata"]["data_villager_data_finalized"] = GetDataVillagerDataFinalized();
80#endif
81
82 return output;
83 }
84
85
86 void VillagerEntity::SetMetadataValue(const int index, const std::any& value)
87 {
88 if (index < hierarchy_metadata_count)
89 {
90#if PROTOCOL_VERSION > 477 /* > 1.14 */
92#else
94#endif
95 }
97 {
98 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
100 }
101 }
102
103#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
105 {
106 std::shared_lock<std::shared_mutex> lock(entity_mutex);
107 return std::any_cast<VillagerData>(metadata.at("data_villager_data"));
108 }
109#else
110 int VillagerEntity::GetDataVillagerProfessionId() const
111 {
112 std::shared_lock<std::shared_mutex> lock(entity_mutex);
113 return std::any_cast<int>(metadata.at("data_villager_profession_id"));
114 }
115#endif
116
117#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
119 {
120 std::shared_lock<std::shared_mutex> lock(entity_mutex);
121 return std::any_cast<bool>(metadata.at("data_villager_data_finalized"));
122 }
123#endif
124
125
126#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
127 void VillagerEntity::SetDataVillagerData(const VillagerData& data_villager_data)
128 {
129 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
130 metadata["data_villager_data"] = data_villager_data;
131 }
132#else
133 void VillagerEntity::SetDataVillagerProfessionId(const int data_villager_profession_id)
134 {
135 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
136 metadata["data_villager_profession_id"] = data_villager_profession_id;
137 }
138#endif
139
140#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
141 void VillagerEntity::SetDataVillagerDataFinalized(const bool data_villager_data_finalized)
142 {
143 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
144 metadata["data_villager_data_finalized"] = data_villager_data_finalized;
145 }
146#endif
147
148
150 {
151 return 0.6;
152 }
153
155 {
156 return 1.95;
157 }
158
159}
virtual ProtocolCraft::Json::Value Serialize() const override
virtual void SetMetadataValue(const int index, const std::any &value) override
virtual ProtocolCraft::Json::Value Serialize() const override
virtual void SetMetadataValue(const int index, const std::any &value) override
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
bool GetDataVillagerDataFinalized() const
virtual void SetMetadataValue(const int index, const std::any &value) override
virtual std::string GetName() const override
VillagerData GetDataVillagerData() const
static const std::array< std::string, metadata_count > metadata_names
virtual double GetHeightImpl() const override
virtual EntityType GetType() const override
static constexpr int metadata_count
virtual ProtocolCraft::Json::Value Serialize() const override
void SetDataVillagerData(const VillagerData &data_villager_data)
static constexpr int hierarchy_metadata_count
static std::string GetClassName()
virtual double GetWidthImpl() const override
static EntityType GetClassType()
void SetDataVillagerDataFinalized(const bool data_villager_data_finalized)
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
Definition Json.hpp:45