Botcraft 1.21.4
Loading...
Searching...
No Matches
ConsumeEffect.cpp
Go to the documentation of this file.
1#if PROTOCOL_VERSION > 767 /* > 1.21.1 */
3
9
10namespace ProtocolCraft
11{
12 namespace Components
13 {
19
21 {
22 if (type <= ConsumeEffectDataType::None || type >= ConsumeEffectDataType::NUM_CONSUME_EFFECT_DATA_TYPES)
23 {
24 throw std::runtime_error("Unable to create ConsumeEffectData with id: " + std::to_string(static_cast<int>(type)) + ".");
25 }
26 Type = type;
27
28 switch (Type)
29 {
31 Data = std::make_shared<ApplyStatusEffectsConsumeEffect>();
32 break;
34 Data = std::make_shared<ClearAllStatusEffectsConsumeEffect>();
35 break;
37 Data = std::make_shared<PlaySoundConsumeEffect>();
38 break;
40 Data = std::make_shared<RemoveStatusEffectsConsumeEffect>();
41 break;
43 Data = std::make_shared<TeleportRandomlyConsumeEffect>();
44 break;
45 default:
46 // This should not happen
47 throw std::runtime_error("Unable to create ConsumeEffectData with id: " + std::to_string(static_cast<int>(Type)) + ".");
48 Data = nullptr;
49 break;
50 }
51 return *this;
52 }
53
54
55 void ConsumeEffect::ReadImpl(ReadIterator& iter, size_t& length)
56 {
57 SetType(ReadData<ConsumeEffectDataType, VarInt>(iter, length));
58 if (GetData() != nullptr)
59 {
60 GetData()->Read(iter, length);
61 }
62 }
63
64 void ConsumeEffect::WriteImpl(WriteContainer& container) const
65 {
66 WriteData<ConsumeEffectDataType, VarInt>(GetType(), container);
67 if (GetData() != nullptr)
68 {
69 GetData()->Write(container);
70 }
71 }
72
73 Json::Value ConsumeEffect::SerializeImpl() const
74 {
75 Json::Value output;
76
77 output[std::string(field_name<Type_index>)] = GetType();
78 output[std::string(field_name<Data_index>)] = GetData() == nullptr ? Json::Object() : GetData()->Serialize();
79
80 return output;
81 }
82 }
83}
84#endif
#define DEFINE_NETWORK_TYPE(ClassName)
ConsumeEffect & SetType(const ConsumeEffectDataType type)
virtual Json::Value SerializeImpl() const =0
virtual void WriteImpl(WriteContainer &container) const =0
virtual Json::Value Serialize() const
virtual void ReadImpl(ReadIterator &iter, size_t &length)=0
std::vector< unsigned char > WriteContainer
std::vector< unsigned char >::const_iterator ReadIterator