Botcraft 1.21.4
Loading...
Searching...
No Matches
ClientboundCustomPayloadPacket.hpp
Go to the documentation of this file.
1#pragma once
2
7
8namespace ProtocolCraft
9{
10 class ClientboundCustomPayloadPacket : public BaseMessage<ClientboundCustomPayloadPacket>
11 {
12 public:
13 static constexpr std::string_view packet_name = "Custom Payload";
14
15 private:
16 std::shared_ptr<PluginObject> ReadParsed(ReadIterator& iter, size_t& length) const
17 {
18 std::shared_ptr<PluginObject> parsed = CreateObjectFromPlugin(GetIdentifier().c_str());
19 if (parsed != nullptr)
20 {
21 unsigned long long int data_size = static_cast<unsigned long long int>(length);
22 const unsigned char* data_ptr = &(*iter);
23 parsed->Read(data_ptr, data_size);
24 iter += length - data_size;
25 length = static_cast<size_t>(data_size);
26 }
27
28 return parsed;
29 }
30
31 void WriteParsed(const std::shared_ptr<PluginObject>& parsed, WriteContainer& container) const
32 {
33 if (parsed == nullptr)
34 {
35 return;
36 }
37 unsigned long long int serialized_length = 0;
38 const unsigned char* serialized = parsed->Write(serialized_length);
39 WriteByteArray(serialized, static_cast<size_t>(serialized_length), container);
40 }
41
42 std::optional<Json::Value> SerializeParsed(const std::shared_ptr<PluginObject>& parsed) const
43 {
44 if (parsed == nullptr)
45 {
46 return std::nullopt;
47 }
48 return Json::Parse(parsed->Serialize());
49 }
50
51 DEFINE_CONDITION(ParsedDataNull, GetParsedData() == nullptr);
52
56
58 };
59} //ProtocolCraft
void WriteParsed(const std::shared_ptr< PluginObject > &parsed, WriteContainer &container) const
std::shared_ptr< PluginObject > ReadParsed(ReadIterator &iter, size_t &length) const
SERIALIZED_FIELD(ParsedData, Internal::CustomType< std::shared_ptr< PluginObject >, &THIS::ReadParsed, &THIS::WriteParsed, &THIS::SerializeParsed >)
SERIALIZED_FIELD(RawData, Internal::Conditioned< Internal::Vector< unsigned char, void, 0 >, &THIS::ParsedDataNull >)
std::optional< Json::Value > SerializeParsed(const std::shared_ptr< PluginObject > &parsed) const
DEFINE_CONDITION(ParsedDataNull, GetParsedData()==nullptr)
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