Botcraft 1.21.4
Loading...
Searching...
No Matches
ServerboundCustomPayloadPacket.hpp
Go to the documentation of this file.
1#if PROTOCOL_VERSION > 763 /* > 1.20.1 */
2#pragma once
3
8
9namespace ProtocolCraft
10{
11 class ServerboundCustomPayloadConfigurationPacket : public BaseMessage<ServerboundCustomPayloadConfigurationPacket>
12 {
13 public:
14 static constexpr std::string_view packet_name = "Custom Payload (Configuration)";
15
16 private:
17 std::shared_ptr<PluginObject> ReadParsed(ReadIterator& iter, size_t& length) const
18 {
19 std::shared_ptr<PluginObject> parsed = CreateObjectFromPlugin(GetIdentifier().c_str());
20 if (parsed != nullptr)
21 {
22 unsigned long long int data_size = static_cast<unsigned long long int>(length);
23 const unsigned char* data_ptr = &(*iter);
24 parsed->Read(data_ptr, data_size);
25 iter += length - data_size;
26 length = static_cast<size_t>(data_size);
27 }
28
29 return parsed;
30 }
31
32 void WriteParsed(const std::shared_ptr<PluginObject>& parsed, WriteContainer& container) const
33 {
34 if (parsed == nullptr)
35 {
36 return;
37 }
38 unsigned long long int serialized_length = 0;
39 const unsigned char* serialized = parsed->Write(serialized_length);
40 WriteByteArray(serialized, static_cast<size_t>(serialized_length), container);
41 }
42
43 std::optional<Json::Value> SerializeParsed(const std::shared_ptr<PluginObject>& parsed) const
44 {
45 if (parsed == nullptr)
46 {
47 return std::nullopt;
48 }
49 return Json::Parse(parsed->Serialize());
50 }
51
52 DEFINE_CONDITION(ParsedDataNull, GetParsedData() == nullptr);
53
57
59 };
60} //ProtocolCraft
61#endif
void WriteParsed(const std::shared_ptr< PluginObject > &parsed, WriteContainer &container) const
std::shared_ptr< PluginObject > ReadParsed(ReadIterator &iter, size_t &length) const
DEFINE_CONDITION(ParsedDataNull, GetParsedData()==nullptr)
std::optional< Json::Value > SerializeParsed(const std::shared_ptr< PluginObject > &parsed) const
SERIALIZED_FIELD(RawData, Internal::Conditioned< Internal::Vector< unsigned char, void, 0 >, &THIS::ParsedDataNull >)
SERIALIZED_FIELD(ParsedData, Internal::CustomType< std::shared_ptr< PluginObject >, &THIS::ReadParsed, &THIS::WriteParsed, &THIS::SerializeParsed >)
Value Parse(std::string_view::const_iterator iter, size_t length, bool no_except=false)
Parse a string_view from iter for at most length characters.
Definition Json.cpp:390
std::shared_ptr< PluginObject > CreateObjectFromPlugin(const char *identifier)
Create an abstract PluginObject using a runtime loaded plugin (dll/so)
std::vector< unsigned char > WriteContainer
std::vector< unsigned char >::const_iterator ReadIterator
void WriteByteArray(const std::vector< unsigned char > &my_array, WriteContainer &container)
A type wrapper to conditionally serialize a type.
Definition Templates.hpp:83