feat: extend packet send and receive events

This commit is contained in:
Alexander Medvedev 2026-06-06 10:13:53 +02:00
parent 376001dbd4
commit c17e7124d8
4 changed files with 23 additions and 17 deletions

View File

@ -34,6 +34,10 @@ pub fn build() -> String {
&mut clientbound_variant,
);
// Add an 'unknown' fallback variant (no payload) — raw payload is carried on the event record
serverbound_variant.case(VariantCase::empty("unknown"));
clientbound_variant.case(VariantCase::empty("unknown"));
interface.type_def(TypeDef::new(
"serverbound-packet",
TypeDefKind::Variant(serverbound_variant),

View File

@ -35,6 +35,10 @@ pub fn build() -> String {
&mut clientbound_variant,
);
// Add an 'unknown' fallback variant (no payload) — raw payload is carried on the event record
serverbound_variant.case(VariantCase::empty("unknown"));
clientbound_variant.case(VariantCase::empty("unknown"));
interface.type_def(TypeDef::new(
"serverbound-packet",
TypeDefKind::Variant(serverbound_variant),

@ -1 +1 @@
Subproject commit 6e8b554b38803b0b6f76f39a88fded7a49d72908
Subproject commit 40ae442280098742f84dd5e2427729bb07057f1a

View File

@ -30,27 +30,27 @@ impl ToFromWasmEvent for PacketReceivedEvent {
let packet = match &self.player.client {
ClientPlatform::Java(client) => {
let version = client.version.load();
let wit_packet = generated_packets::deserialize_java_serverbound_packet(
generated_packets::deserialize_java_serverbound_packet(
self.packet_id,
&self.payload,
version,
);
wit_packet.map(ServerboundPacket::Java)
)
.map_or(ServerboundPacket::Unknown, ServerboundPacket::Java)
}
ClientPlatform::Bedrock(_) => {
let wit_packet = generated_packets::deserialize_bedrock_serverbound_packet(
generated_packets::deserialize_bedrock_serverbound_packet(
self.packet_id,
&self.payload,
);
wit_packet.map(ServerboundPacket::Bedrock)
)
.map_or(ServerboundPacket::Unknown, ServerboundPacket::Bedrock)
}
};
let packet = packet.expect("Failed to deserialize serverbound packet to WIT. Ensure the packet is supported in the WIT API.");
Event::PacketReceivedEvent(PacketReceivedEventData {
player: player_res,
packet,
packet_id: self.packet_id,
raw_payload: self.payload.to_vec(),
cancelled: self.cancelled,
})
}
@ -77,22 +77,20 @@ impl ToFromWasmEvent for PacketSentEvent {
let packet = match &self.player.client {
ClientPlatform::Java(_) => {
let wit_packet =
generated_packets::clientbound_java_any_to_wit(self.packet.as_ref());
wit_packet.map(ClientboundPacket::Java)
generated_packets::clientbound_java_any_to_wit(self.packet.as_ref())
.map_or(ClientboundPacket::Unknown, ClientboundPacket::Java)
}
ClientPlatform::Bedrock(_) => {
let wit_packet =
generated_packets::clientbound_bedrock_any_to_wit(self.packet.as_ref());
wit_packet.map(ClientboundPacket::Bedrock)
generated_packets::clientbound_bedrock_any_to_wit(self.packet.as_ref())
.map_or(ClientboundPacket::Unknown, ClientboundPacket::Bedrock)
}
};
let packet = packet.expect("Failed to convert clientbound packet to WIT. Ensure the packet is supported in the WIT API and ToWit is generated.");
Event::PacketSentEvent(PacketSentEventData {
player: player_res,
packet,
packet_id: self.packet_id,
raw_payload: self.payload.iter().copied().collect(),
cancelled: self.cancelled,
})
}