6#include "ll/api/base/Macro.h"
7#include "ll/api/network/packet/PacketRegistrar.h"
8#include "ll/api/reflection/TypeName.h"
9#include "mc/common/SubClientId.h"
10#include "mc/deps/raknet/PacketPriority.h"
11#include "mc/network/Compressibility.h"
12#include "mc/network/NetworkPeer.h"
13#include "mc/platform/Result.h"
27namespace ll::network {
34 PacketPriority mPriority;
35 NetworkPeer::Reliability mReliability;
36 SubClientId mSenderSubId;
37 Compressibility mCompressible;
39 [[nodiscard]]
constexpr explicit Packet(
40 PacketPriority priority = PacketPriority::MediumPriority,
41 NetworkPeer::Reliability reliability = NetworkPeer::Reliability::ReliableOrdered,
42 SubClientId clientSubId = SubClientId::PrimaryClient,
45 : mPriority(priority),
46 mReliability(reliability),
47 mSenderSubId(clientSubId),
48 mCompressible(compress ? Compressibility::Compressible : Compressibility::Incompressible) {}
50 virtual ~Packet() =
default;
54 [[nodiscard]] virtual ::std::string_view getName()
const = 0;
56 [[nodiscard]] LLNDAPI
virtual PacketRuntimeId getRuntimeId()
const;
58 LLAPI
void sendTo(
Player const& player)
const;
62 LLAPI
void sendToClient(
NetworkIdentifier const& identifier, ::SubClientId clientId)
const;
65 LLAPI
void sendToClients()
const;
66 LLAPI
void sendToClients(
NetworkIdentifier const& exceptId, ::SubClientId exceptSubid)
const;
68 LLAPI
void sendToServer()
const;
82template <
class Derived>
83inline bool packetRegistration = [] {
84 PacketRegistrar::getInstance().registerPacket(
85 reflection::type_unprefix_name_v<Derived>,
86 ll::hash_utils::doHash(reflection::type_unprefix_name_v<Derived>),
87 []() -> std::unique_ptr<Packet> {
return std::make_unique<Derived>(); }
92template <
class Derived,
class PacketType>
93inline bool packetHandlerRegistration = [] {
94 static Derived instance;
95 PacketRegistrar::getInstance().registerHandler(
96 reflection::type_unprefix_name_v<PacketType>,
97 ll::hash_utils::doHash(reflection::type_unprefix_name_v<PacketType>),
104template <
class Derived>
106 static bool ensureRegistered() {
return detail::packetRegistration<Derived>; }
109 using Packet::Packet;
112 [[nodiscard]] ::std::string_view getName()
const override {
return reflection::type_unprefix_name_v<Derived>; }
113 [[nodiscard]] PacketRuntimeId getRuntimeId()
const override {
114 constexpr PacketRuntimeId runtimeId = ll::hash_utils::doHash(reflection::type_unprefix_name_v<Derived>);
118 inline static bool sRegistered = ensureRegistered();
121template <
class Derived,
class PacketType>
125 static bool ensureRegistered() {
return detail::packetHandlerRegistration<Derived, PacketType>; }
127 inline static bool sRegistered = ensureRegistered();
131 static_cast<Derived const*
>(
this)->handlePacket(netId, callback,
static_cast<PacketType const&
>(packet));
Definition BinaryStream.h:10
Definition IPacketHandlerDispatcher.h:12
Definition NetEventCallback.h:265
Definition NetworkIdentifier.h:10
Definition ReadOnlyBinaryStream.h:8
Definition UserEntityIdentifierComponent.h:17
Definition PacketRegistrar.h:17
Definition optional_ref.h:10
Definition DimensionType.h:5
Definition NetworkIdentifierWithSubId.h:10