Botcraft 26.1.2
Loading...
Searching...
No Matches
ZombieVillagerEntity.cpp
Go to the documentation of this file.
2
3#include <mutex>
4
5namespace Botcraft
6{
7 const std::array<std::string, ZombieVillagerEntity::metadata_count> ZombieVillagerEntity::metadata_names{ {
8 "data_converting_id",
9#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
10 "data_villager_data",
11#else
12 "data_villager_profession_id",
13#endif
14#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
15 "data_villager_data_finalized",
16#endif
17 } };
18
20 {
21 // Initialize all metadata with default values
23#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
24 SetDataVillagerData(VillagerData{ 2, 0, 1 }); // TODO: from 1.21.9 it's a random profession and a type depending on the biome, but we don't really care on the clientside I guess
25#else
26 SetDataVillagerProfessionId(0);
27#endif
28#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
30#endif
31 }
32
37
38
40 {
41 return "zombie_villager";
42 }
43
48
49
51 {
52 return "zombie_villager";
53 }
54
59
60
62 {
64
65 output["metadata"]["data_converting_id"] = GetDataConvertingId();
66#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
67 output["metadata"]["data_villager_data"] = { GetDataVillagerData().type, GetDataVillagerData().profession, GetDataVillagerData().level };
68#else
69 output["metadata"]["data_villager_profession_id"] = GetDataVillagerProfessionId();
70#endif
71#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
72 output["metadata"]["data_villager_data_finalized"] = GetDataVillagerDataFinalized();
73#endif
74
75 return output;
76 }
77
78
79 void ZombieVillagerEntity::SetMetadataValue(const int index, const std::any& value)
80 {
81 if (index < hierarchy_metadata_count)
82 {
84 }
86 {
87 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
89 }
90 }
91
93 {
94 std::shared_lock<std::shared_mutex> lock(entity_mutex);
95 return std::any_cast<bool>(metadata.at("data_converting_id"));
96 }
97
98#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
100 {
101 std::shared_lock<std::shared_mutex> lock(entity_mutex);
102 return std::any_cast<VillagerData>(metadata.at("data_villager_data"));
103 }
104#else
105 int ZombieVillagerEntity::GetDataVillagerProfessionId() const
106 {
107 std::shared_lock<std::shared_mutex> lock(entity_mutex);
108 return std::any_cast<int>(metadata.at("data_villager_profession_id"));
109 }
110#endif
111
112#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
114 {
115 std::shared_lock<std::shared_mutex> lock(entity_mutex);
116 return std::any_cast<bool>(metadata.at("data_villager_data_finalized"));
117 }
118#endif
119
120
121 void ZombieVillagerEntity::SetDataConvertingId(const bool data_converting_id)
122 {
123 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
124 metadata["data_converting_id"] = data_converting_id;
125 }
126
127#if PROTOCOL_VERSION > 404 /* > 1.13.2 */
129 {
130 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
131 metadata["data_villager_data"] = data_villager_data;
132 }
133#else
134 void ZombieVillagerEntity::SetDataVillagerProfessionId(const int data_villager_profession_id)
135 {
136 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
137 metadata["data_villager_profession_id"] = data_villager_profession_id;
138 }
139#endif
140
141#if PROTOCOL_VERSION > 774 /* > 1.21.11 */
142 void ZombieVillagerEntity::SetDataVillagerDataFinalized(const bool data_villager_data_finalized)
143 {
144 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
145 metadata["data_villager_data_finalized"] = data_villager_data_finalized;
146 }
147#endif
148
149
151 {
152 return 0.6;
153 }
154
156 {
157 return 1.95;
158 }
159
160}
std::shared_mutex entity_mutex
Definition Entity.hpp:267
std::map< std::string, std::any > metadata
Definition Entity.hpp:282
virtual void SetMetadataValue(const int index, const std::any &value) override
virtual ProtocolCraft::Json::Value Serialize() const override
static const std::array< std::string, metadata_count > metadata_names
void SetDataVillagerDataFinalized(const bool data_villager_data_finalized)
virtual double GetHeightImpl() const override
void SetDataConvertingId(const bool data_converting_id)
virtual void SetMetadataValue(const int index, const std::any &value) override
void SetDataVillagerData(const VillagerData &data_villager_data)
virtual std::string GetName() const override
virtual EntityType GetType() const override
static constexpr int hierarchy_metadata_count
virtual double GetWidthImpl() const override
virtual ProtocolCraft::Json::Value Serialize() const override
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
Definition Json.hpp:45