1#if PROTOCOL_VERSION > 760
24#if PROTOCOL_VERSION > 768
27#if PROTOCOL_VERSION > 767
45#if PROTOCOL_VERSION > 768
49#if PROTOCOL_VERSION > 767
59 static constexpr std::string_view
packet_name =
"Player Info Update";
65 std::bitset<bitset_size> bitset = ReadData<std::bitset<bitset_size>>(iter, length);
66 std::vector<PlayerInfoUpdateAction> actions;
67 for (
size_t i = 0; i < bitset_size; ++i)
80 std::bitset<bitset_size> bitset;
81 for (
const auto a : actions)
83 bitset.set(
static_cast<size_t>(a),
true);
85 WriteData<std::bitset<bitset_size>>(bitset, container);
90 std::map<UUID, PlayerInfoUpdateEntry> entries;
91 const int entries_length = ReadData<VarInt>(iter, length);
92 for (
int i = 0; i < entries_length; ++i)
94 const UUID uuid = ReadData<UUID>(iter, length);
96 for (
const auto a : GetActions())
102 entry.
game_profile.SetName(ReadData<std::string>(iter, length));
106 entry.
chat_session = ReadData<std::optional<RemoteChatSessionData>>(iter, length);
109 entry.
game_mode = ReadData<VarInt>(iter, length);
112 entry.
listed = ReadData<bool>(iter, length);
115 entry.
latency = ReadData<VarInt>(iter, length);
118 entry.
display_name = ReadData<std::optional<Chat>>(iter, length);
120#if PROTOCOL_VERSION > 768
122 entry.
show_hat = ReadData<bool>(iter, length);
125#if PROTOCOL_VERSION > 767
127 entry.
list_order = ReadData<VarInt>(iter, length);
140 WriteData<VarInt>(
static_cast<int>(entries.size()), container);
141 for (
const auto& p : entries)
143 WriteData<UUID>(p.first, container);
144 for (
const auto a : GetActions())
149 WriteData<std::string>(p.second.game_profile.GetName(), container);
150 WriteData<std::vector<GameProfileProperty>>(p.second.game_profile.GetProperties(), container);
153 WriteData<std::optional<RemoteChatSessionData>>(p.second.chat_session, container);
156 WriteData<VarInt>(p.second.game_mode, container);
159 WriteData<bool>(p.second.listed, container);
162 WriteData<VarInt>(p.second.latency, container);
165 WriteData<std::optional<Chat>>(p.second.display_name, container);
167#if PROTOCOL_VERSION > 768
169 WriteData<bool>(p.second.show_hat, container);
172#if PROTOCOL_VERSION > 767
174 WriteData<VarInt>(p.second.list_order, container);
184 std::optional<Json::Value>
SerializeEntries(
const std::map<UUID, PlayerInfoUpdateEntry>& entries)
const
187 for (
const auto& p : entries)
190 entry[
"uuid"] = p.first;
191 for (
const auto a : GetActions())
196 entry[
"game_profile"] = p.second.game_profile;
199 if (p.second.chat_session.has_value())
201 entry[
"chat_session"] = p.second.chat_session.value();
205 entry[
"game_mode"] = p.second.game_mode;
208 entry[
"listed"] = p.second.listed;
211 entry[
"latency"] = p.second.latency;
214 if (p.second.display_name.has_value())
216 entry[
"display_name"] = p.second.display_name.value();
219#if PROTOCOL_VERSION > 768
221 entry[
"show_hat"] = p.second.show_hat;
224#if PROTOCOL_VERSION > 767
226 entry[
"list_order"] = p.second.list_order;
233 output.push_back(entry);
std::map< UUID, PlayerInfoUpdateEntry > ReadEntries(ReadIterator &iter, size_t &length) const
void WriteActions(const std::vector< PlayerInfoUpdateAction > &actions, WriteContainer &container) const
void WriteEntries(const std::map< UUID, PlayerInfoUpdateEntry > &entries, WriteContainer &container) const
static constexpr std::string_view packet_name
std::optional< Json::Value > SerializeEntries(const std::map< UUID, PlayerInfoUpdateEntry > &entries) const
DECLARE_READ_WRITE_SERIALIZE
std::vector< PlayerInfoUpdateAction > ReadActions(ReadIterator &iter, size_t &length) const
SERIALIZED_FIELD(Entries, Internal::CustomType< std::map< UUID, PlayerInfoUpdateEntry >, &THIS::ReadEntries, &THIS::WriteEntries, &THIS::SerializeEntries >)
SERIALIZED_FIELD(Actions, Internal::CustomType< std::vector< PlayerInfoUpdateAction >, &THIS::ReadActions, &THIS::WriteActions >)
Real class declaration, just a derived class of std::vector<Value>
Real class declaration, just a derived class of std::map<std::string, Value>
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
std::array< unsigned char, 16 > UUID
StorageType ReadData(ReadIterator &iter, size_t &length)
std::vector< unsigned char > WriteContainer
std::vector< unsigned char >::const_iterator ReadIterator
@ NUM_PLAYERINFOUPDATEACTION
std::optional< RemoteChatSessionData > chat_session
std::optional< Chat > display_name