Botcraft 1.21.4
Loading...
Searching...
No Matches
VibrationPath.hpp
Go to the documentation of this file.
1#if PROTOCOL_VERSION > 754 /* > 1.16.5 */ && PROTOCOL_VERSION < 759 /* < 1.19 */
2#pragma once
3
4#include <memory>
5
10
11namespace ProtocolCraft
12{
13 class VibrationPath : public NetworkType
14 {
15 SERIALIZED_FIELD(Origin, NetworkPosition);
16 SERIALIZED_FIELD(DestinationType, Identifier);
17 SERIALIZED_FIELD(Destination, std::shared_ptr<PositionSource>);
18 SERIALIZED_FIELD(ArrivalInTicks, VarInt);
19
21 protected:
22 virtual void ReadImpl(ReadIterator& iter, size_t& length) override
23 {
24 SetOrigin(ReadData<NetworkPosition>(iter, length));
25 SetDestinationType(ReadData<Identifier>(iter, length));
26 std::shared_ptr<PositionSource> destination = PositionSource::CreatePositionSource(GetDestinationType());
27 destination->Read(iter, length);
28 SetDestination(destination);
29 SetArrivalInTicks(ReadData<VarInt>(iter, length));
30 }
31
32 virtual void WriteImpl(WriteContainer& container) const override
33 {
34 WriteData<NetworkPosition>(GetOrigin(), container);
35 WriteData<Identifier>(GetDestinationType(), container);
36 GetDestination()->Write(container);
37 WriteData<VarInt>(GetArrivalInTicks(), container);
38 }
39
40 virtual Json::Value SerializeImpl() const override
41 {
42 Json::Value output;
43
44 output[std::string(field_name<Origin_index>)] = GetOrigin();
45 output[std::string(field_name<DestinationType_index>)] = GetDestinationType();
46 output[std::string(field_name<Destination_index>)] = *GetDestination();
47 output[std::string(field_name<ArrivalInTicks_index>)] = GetArrivalInTicks();
48
49 return output;
50 }
51 };
52} // ProtocolCraft
53#endif
#define SERIALIZED_FIELD(Name,...)
#define DEFINE_UTILITIES
Define some constexpr utilities used to deal with the auto serializable fields We use void as the uni...