Botcraft 1.21.10
Loading...
Searching...
No Matches
MannequinEntity.cpp
Go to the documentation of this file.
1#if PROTOCOL_VERSION > 772 /* > 1.21.8 */
3
4#include <mutex>
5
6namespace Botcraft
7{
8 const std::array<std::string, MannequinEntity::metadata_count> MannequinEntity::metadata_names{ {
9 "data_profile",
10 "data_immovable",
11 "data_description",
12 } };
13
15 {
16 // Initialize all metadata with default values
20 .SetName(std::nullopt)
21 .SetUuid(std::nullopt)
22 .SetProperties({})
23 )
24 )
26 .SetBody(std::nullopt)
27 .SetCape(std::nullopt)
28 .SetElytra(std::nullopt)
29 .SetModel(std::nullopt)
30 )
31 );
32 SetDataImmovable(false);
33 SetDataDescription(ProtocolCraft::Chat()); // TODO: Default "NPC" string
34 }
35
40
41
42 std::string MannequinEntity::GetName() const
43 {
44 return "mannequin";
45 }
46
51
52
54 {
55 return "mannequin";
56 }
57
62
63
65 {
67
68 output["metadata"]["data_profile"] = GetDataProfile().Serialize();
69 output["metadata"]["data_immovable"] = GetDataImmovable();
70 output["metadata"]["data_description"] = GetDataDescription().has_value() ? GetDataDescription().value().Serialize() : nullptr;
71
72 return output;
73 }
74
75
76 void MannequinEntity::SetMetadataValue(const int index, const std::any& value)
77 {
78 if (index < hierarchy_metadata_count)
79 {
81 }
83 {
84 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
86 }
87 }
88
90 {
91 std::shared_lock<std::shared_mutex> lock(entity_mutex);
92 return std::any_cast<const ProtocolCraft::Components::DataComponentTypeResolvableProfile&>(metadata.at("data_profile"));
93 }
94
96 {
97 std::shared_lock<std::shared_mutex> lock(entity_mutex);
98 return std::any_cast<bool>(metadata.at("data_immovable"));
99 }
100
101 const std::optional<ProtocolCraft::Chat>& MannequinEntity::GetDataDescription() const
102 {
103 std::shared_lock<std::shared_mutex> lock(entity_mutex);
104 return std::any_cast<const std::optional<ProtocolCraft::Chat>&>(metadata.at("data_description"));
105 }
106
107
109 {
110 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
111 metadata["data_profile"] = data_profile;
112 }
113
114 void MannequinEntity::SetDataImmovable(const bool data_immovable)
115 {
116 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
117 metadata["data_immovable"] = data_immovable;
118 }
119
120 void MannequinEntity::SetDataDescription(const std::optional<ProtocolCraft::Chat>& data_description)
121 {
122 std::scoped_lock<std::shared_mutex> lock(entity_mutex);
123 metadata["data_description"] = data_description;
124 }
125
126
128 {
129 return 0.6;
130 }
131
133 {
134 return 1.8;
135 }
136
137}
138#endif
virtual void SetMetadataValue(const int index, const std::any &value) override
std::shared_mutex entity_mutex
Definition Entity.hpp:264
std::map< std::string, std::any > metadata
Definition Entity.hpp:279
virtual ProtocolCraft::Json::Value Serialize() const override
static EntityType GetClassType()
virtual void SetMetadataValue(const int index, const std::any &value) override
virtual ProtocolCraft::Json::Value Serialize() const override
void SetDataProfile(const ProtocolCraft::Components::DataComponentTypeResolvableProfile &data_profile)
void SetDataDescription(const std::optional< ProtocolCraft::Chat > &data_description)
static constexpr int hierarchy_metadata_count
virtual double GetHeightImpl() const override
const std::optional< ProtocolCraft::Chat > & GetDataDescription() const
static const std::array< std::string, metadata_count > metadata_names
virtual std::string GetName() const override
void SetDataImmovable(const bool data_immovable)
static constexpr int metadata_count
virtual EntityType GetType() const override
static std::string GetClassName()
virtual double GetWidthImpl() const override
const ProtocolCraft::Components::DataComponentTypeResolvableProfile & GetDataProfile() const
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
Definition Json.hpp:45
virtual Json::Value Serialize() const