1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
#[derive(Debug, PartialEq, Clone)]
pub enum ClientboundPacket {
StatusResponse(StatusResponse),
StatusPong(StatusPong),
LoginDisconnect(LoginDisconnect),
EncryptionRequest(EncryptionRequest),
LoginSuccess(LoginSuccess),
SetCompression(SetCompression),
LoginPluginRequest(LoginPluginRequest),
SpawnObject(SpawnObject),
SpawnExperienceOrb(SpawnExperienceOrb),
SpawnGlobalEntity(SpawnGlobalEntity),
SpawnMob(SpawnMob),
SpawnPainting(SpawnPainting),
SpawnPlayer(SpawnPlayer),
ClientboundAnimation(ClientboundAnimation),
Statistics(Statistics),
BlockBreakAnimation(BlockBreakAnimation),
UpdateBlockEntity(UpdateBlockEntity),
BlockAction(BlockAction),
BlockChange(BlockChange),
BossBar(BossBar),
ServerDifficulty(ServerDifficulty),
ChatMessage(ChatMessage),
MultiBlockChange(MultiBlockChange),
ClientboundTabComplete(ClientboundTabComplete),
DeclareCommands(DeclareCommands),
ClientboundConfirmTransaction(ClientboundConfirmTransaction),
ClientboundCloseWindow(ClientboundCloseWindow),
OpenWindow(OpenWindow),
WindowItems(WindowItems),
WindowProperty(WindowProperty),
SetSlot(SetSlot),
SetCooldown(SetCooldown),
ClientboundPluginMessage(ClientboundPluginMessage),
NamedSoundEffect(NamedSoundEffect),
PlayDisconnect(PlayDisconnect),
EntityStatus(EntityStatus),
NBTQueryResponse(NBTQueryResponse),
Explosion(Explosion),
UnloadChunk(UnloadChunk),
ChangeGameState(ChangeGameState),
KeepAlive(KeepAlive),
ChunkData(ChunkData),
Effect(Effect),
Particle(Particle),
JoinGame(JoinGame),
Map(Map),
Entity(Entity),
EntityRelativeMove(EntityRelativeMove),
EntityLookRelativeMove(EntityLookRelativeMove),
EntityLook(EntityLook),
ClientboundVehicleMove(ClientboundVehicleMove),
OpenSignEditor(OpenSignEditor),
CraftRecipeResponse(CraftRecipeResponse),
PlayerAbilities(PlayerAbilities),
CombatEvent(CombatEvent),
PlayerListItem(PlayerListItem),
FacePlayer(FacePlayer),
PlayerPositionAndLook(PlayerPositionAndLook),
UseBed(UseBed),
UnlockRecipes(UnlockRecipes),
DestroyEntities(DestroyEntities),
RemoveEntityEffect(RemoveEntityEffect),
ResourcePackSend(ResourcePackSend),
Respawn(Respawn),
EntityHeadLook(EntityHeadLook),
SelectAdvancementTab(SelectAdvancementTab),
WorldBorder(WorldBorder),
Camera(Camera),
ClientboundHeldItemChange(ClientboundHeldItemChange),
DisplayScoreboard(DisplayScoreboard),
EntityMetadata(EntityMetadata),
AttachEntity(AttachEntity),
EntityVelocity(EntityVelocity),
EntityEquipment(EntityEquipment),
SetExperience(SetExperience),
UpdateHealth(UpdateHealth),
ScoreboardObjective(ScoreboardObjective),
SetPassengers(SetPassengers),
Teams(Teams),
UpdateScore(UpdateScore),
SpawnPosition(SpawnPosition),
TimeUpdate(TimeUpdate),
Title(Title),
StopSound(StopSound),
SoundEffect(SoundEffect),
PlayerListHeaderFooter(PlayerListHeaderFooter),
CollectItem(CollectItem),
EntityTeleport(EntityTeleport),
Advancements(Advancements),
EntityProperties(EntityProperties),
EntityEffect(EntityEffect),
DeclareRecipes(DeclareRecipes),
Tags(Tags),
}
impl Packet for ClientboundPacket {
fn deserialize<R: Read>(r: &mut R, state: &ClientState) -> Result<Self> {
let packet_id = read_varint(r)?;
match state {
&ClientState::Handshake => {
Err("No packet available in this state".into())
},
&ClientState::Status => {
match packet_id {
0 => Ok(StatusResponse::deserialize(r)?),
1 => Ok(StatusPong::deserialize(r)?),
_ => bail!("No packet with id {} in state {}", packet_id, state),
}
},
&ClientState::Login => {
match packet_id {
0 => Ok(LoginDisconnect::deserialize(r)?),
1 => Ok(EncryptionRequest::deserialize(r)?),
2 => Ok(LoginSuccess::deserialize(r)?),
3 => Ok(SetCompression::deserialize(r)?),
4 => Ok(LoginPluginRequest::deserialize(r)?),
_ => bail!("No packet with id {} in state {}", packet_id, state),
}
},
&ClientState::Play => {
match packet_id {
0 => Ok(SpawnObject::deserialize(r)?),
1 => Ok(SpawnExperienceOrb::deserialize(r)?),
2 => Ok(SpawnGlobalEntity::deserialize(r)?),
3 => Ok(SpawnMob::deserialize(r)?),
4 => Ok(SpawnPainting::deserialize(r)?),
5 => Ok(SpawnPlayer::deserialize(r)?),
6 => Ok(ClientboundAnimation::deserialize(r)?),
7 => Ok(Statistics::deserialize(r)?),
8 => Ok(BlockBreakAnimation::deserialize(r)?),
9 => Ok(UpdateBlockEntity::deserialize(r)?),
10 => Ok(BlockAction::deserialize(r)?),
11 => Ok(BlockChange::deserialize(r)?),
12 => Ok(BossBar::deserialize(r)?),
13 => Ok(ServerDifficulty::deserialize(r)?),
14 => Ok(ChatMessage::deserialize(r)?),
15 => Ok(MultiBlockChange::deserialize(r)?),
16 => Ok(ClientboundTabComplete::deserialize(r)?),
17 => Ok(DeclareCommands::deserialize(r)?),
18 => Ok(ClientboundConfirmTransaction::deserialize(r)?),
19 => Ok(ClientboundCloseWindow::deserialize(r)?),
20 => Ok(OpenWindow::deserialize(r)?),
21 => Ok(WindowItems::deserialize(r)?),
22 => Ok(WindowProperty::deserialize(r)?),
23 => Ok(SetSlot::deserialize(r)?),
24 => Ok(SetCooldown::deserialize(r)?),
25 => Ok(ClientboundPluginMessage::deserialize(r)?),
26 => Ok(NamedSoundEffect::deserialize(r)?),
27 => Ok(PlayDisconnect::deserialize(r)?),
28 => Ok(EntityStatus::deserialize(r)?),
29 => Ok(NBTQueryResponse::deserialize(r)?),
30 => Ok(Explosion::deserialize(r)?),
31 => Ok(UnloadChunk::deserialize(r)?),
32 => Ok(ChangeGameState::deserialize(r)?),
33 => Ok(KeepAlive::deserialize(r)?),
34 => Ok(ChunkData::deserialize(r)?),
35 => Ok(Effect::deserialize(r)?),
36 => Ok(Particle::deserialize(r)?),
37 => Ok(JoinGame::deserialize(r)?),
38 => Ok(Map::deserialize(r)?),
39 => Ok(Entity::deserialize(r)?),
40 => Ok(EntityRelativeMove::deserialize(r)?),
41 => Ok(EntityLookRelativeMove::deserialize(r)?),
42 => Ok(EntityLook::deserialize(r)?),
43 => Ok(ClientboundVehicleMove::deserialize(r)?),
44 => Ok(OpenSignEditor::deserialize(r)?),
45 => Ok(CraftRecipeResponse::deserialize(r)?),
46 => Ok(PlayerAbilities::deserialize(r)?),
47 => Ok(CombatEvent::deserialize(r)?),
48 => Ok(PlayerListItem::deserialize(r)?),
49 => Ok(FacePlayer::deserialize(r)?),
50 => Ok(PlayerPositionAndLook::deserialize(r)?),
51 => Ok(UseBed::deserialize(r)?),
52 => Ok(UnlockRecipes::deserialize(r)?),
53 => Ok(DestroyEntities::deserialize(r)?),
54 => Ok(RemoveEntityEffect::deserialize(r)?),
55 => Ok(ResourcePackSend::deserialize(r)?),
56 => Ok(Respawn::deserialize(r)?),
57 => Ok(EntityHeadLook::deserialize(r)?),
58 => Ok(SelectAdvancementTab::deserialize(r)?),
59 => Ok(WorldBorder::deserialize(r)?),
60 => Ok(Camera::deserialize(r)?),
61 => Ok(ClientboundHeldItemChange::deserialize(r)?),
62 => Ok(DisplayScoreboard::deserialize(r)?),
63 => Ok(EntityMetadata::deserialize(r)?),
64 => Ok(AttachEntity::deserialize(r)?),
65 => Ok(EntityVelocity::deserialize(r)?),
66 => Ok(EntityEquipment::deserialize(r)?),
67 => Ok(SetExperience::deserialize(r)?),
68 => Ok(UpdateHealth::deserialize(r)?),
69 => Ok(ScoreboardObjective::deserialize(r)?),
70 => Ok(SetPassengers::deserialize(r)?),
71 => Ok(Teams::deserialize(r)?),
72 => Ok(UpdateScore::deserialize(r)?),
73 => Ok(SpawnPosition::deserialize(r)?),
74 => Ok(TimeUpdate::deserialize(r)?),
75 => Ok(Title::deserialize(r)?),
76 => Ok(StopSound::deserialize(r)?),
77 => Ok(SoundEffect::deserialize(r)?),
78 => Ok(PlayerListHeaderFooter::deserialize(r)?),
79 => Ok(CollectItem::deserialize(r)?),
80 => Ok(EntityTeleport::deserialize(r)?),
81 => Ok(Advancements::deserialize(r)?),
82 => Ok(EntityProperties::deserialize(r)?),
83 => Ok(EntityEffect::deserialize(r)?),
84 => Ok(DeclareRecipes::deserialize(r)?),
85 => Ok(Tags::deserialize(r)?),
_ => bail!("No packet with id {} in state {}", packet_id, state),
}
},
}
}
fn get_packet_name(&self) -> &str {
match self {
&ClientboundPacket::StatusResponse(..) => "StatusResponse",
&ClientboundPacket::StatusPong(..) => "StatusPong",
&ClientboundPacket::LoginDisconnect(..) => "LoginDisconnect",
&ClientboundPacket::EncryptionRequest(..) => "EncryptionRequest",
&ClientboundPacket::LoginSuccess(..) => "LoginSuccess",
&ClientboundPacket::SetCompression(..) => "SetCompression",
&ClientboundPacket::LoginPluginRequest(..) => "LoginPluginRequest",
&ClientboundPacket::SpawnObject(..) => "SpawnObject",
&ClientboundPacket::SpawnExperienceOrb(..) => "SpawnExperienceOrb",
&ClientboundPacket::SpawnGlobalEntity(..) => "SpawnGlobalEntity",
&ClientboundPacket::SpawnMob(..) => "SpawnMob",
&ClientboundPacket::SpawnPainting(..) => "SpawnPainting",
&ClientboundPacket::SpawnPlayer(..) => "SpawnPlayer",
&ClientboundPacket::ClientboundAnimation(..) => "ClientboundAnimation",
&ClientboundPacket::Statistics(..) => "Statistics",
&ClientboundPacket::BlockBreakAnimation(..) => "BlockBreakAnimation",
&ClientboundPacket::UpdateBlockEntity(..) => "UpdateBlockEntity",
&ClientboundPacket::BlockAction(..) => "BlockAction",
&ClientboundPacket::BlockChange(..) => "BlockChange",
&ClientboundPacket::BossBar(..) => "BossBar",
&ClientboundPacket::ServerDifficulty(..) => "ServerDifficulty",
&ClientboundPacket::ChatMessage(..) => "ChatMessage",
&ClientboundPacket::MultiBlockChange(..) => "MultiBlockChange",
&ClientboundPacket::ClientboundTabComplete(..) => "ClientboundTabComplete",
&ClientboundPacket::DeclareCommands(..) => "DeclareCommands",
&ClientboundPacket::ClientboundConfirmTransaction(..) => "ClientboundConfirmTransaction",
&ClientboundPacket::ClientboundCloseWindow(..) => "ClientboundCloseWindow",
&ClientboundPacket::OpenWindow(..) => "OpenWindow",
&ClientboundPacket::WindowItems(..) => "WindowItems",
&ClientboundPacket::WindowProperty(..) => "WindowProperty",
&ClientboundPacket::SetSlot(..) => "SetSlot",
&ClientboundPacket::SetCooldown(..) => "SetCooldown",
&ClientboundPacket::ClientboundPluginMessage(..) => "ClientboundPluginMessage",
&ClientboundPacket::NamedSoundEffect(..) => "NamedSoundEffect",
&ClientboundPacket::PlayDisconnect(..) => "PlayDisconnect",
&ClientboundPacket::EntityStatus(..) => "EntityStatus",
&ClientboundPacket::NBTQueryResponse(..) => "NBTQueryResponse",
&ClientboundPacket::Explosion(..) => "Explosion",
&ClientboundPacket::UnloadChunk(..) => "UnloadChunk",
&ClientboundPacket::ChangeGameState(..) => "ChangeGameState",
&ClientboundPacket::KeepAlive(..) => "KeepAlive",
&ClientboundPacket::ChunkData(..) => "ChunkData",
&ClientboundPacket::Effect(..) => "Effect",
&ClientboundPacket::Particle(..) => "Particle",
&ClientboundPacket::JoinGame(..) => "JoinGame",
&ClientboundPacket::Map(..) => "Map",
&ClientboundPacket::Entity(..) => "Entity",
&ClientboundPacket::EntityRelativeMove(..) => "EntityRelativeMove",
&ClientboundPacket::EntityLookRelativeMove(..) => "EntityLookRelativeMove",
&ClientboundPacket::EntityLook(..) => "EntityLook",
&ClientboundPacket::ClientboundVehicleMove(..) => "ClientboundVehicleMove",
&ClientboundPacket::OpenSignEditor(..) => "OpenSignEditor",
&ClientboundPacket::CraftRecipeResponse(..) => "CraftRecipeResponse",
&ClientboundPacket::PlayerAbilities(..) => "PlayerAbilities",
&ClientboundPacket::CombatEvent(..) => "CombatEvent",
&ClientboundPacket::PlayerListItem(..) => "PlayerListItem",
&ClientboundPacket::FacePlayer(..) => "FacePlayer",
&ClientboundPacket::PlayerPositionAndLook(..) => "PlayerPositionAndLook",
&ClientboundPacket::UseBed(..) => "UseBed",
&ClientboundPacket::UnlockRecipes(..) => "UnlockRecipes",
&ClientboundPacket::DestroyEntities(..) => "DestroyEntities",
&ClientboundPacket::RemoveEntityEffect(..) => "RemoveEntityEffect",
&ClientboundPacket::ResourcePackSend(..) => "ResourcePackSend",
&ClientboundPacket::Respawn(..) => "Respawn",
&ClientboundPacket::EntityHeadLook(..) => "EntityHeadLook",
&ClientboundPacket::SelectAdvancementTab(..) => "SelectAdvancementTab",
&ClientboundPacket::WorldBorder(..) => "WorldBorder",
&ClientboundPacket::Camera(..) => "Camera",
&ClientboundPacket::ClientboundHeldItemChange(..) => "ClientboundHeldItemChange",
&ClientboundPacket::DisplayScoreboard(..) => "DisplayScoreboard",
&ClientboundPacket::EntityMetadata(..) => "EntityMetadata",
&ClientboundPacket::AttachEntity(..) => "AttachEntity",
&ClientboundPacket::EntityVelocity(..) => "EntityVelocity",
&ClientboundPacket::EntityEquipment(..) => "EntityEquipment",
&ClientboundPacket::SetExperience(..) => "SetExperience",
&ClientboundPacket::UpdateHealth(..) => "UpdateHealth",
&ClientboundPacket::ScoreboardObjective(..) => "ScoreboardObjective",
&ClientboundPacket::SetPassengers(..) => "SetPassengers",
&ClientboundPacket::Teams(..) => "Teams",
&ClientboundPacket::UpdateScore(..) => "UpdateScore",
&ClientboundPacket::SpawnPosition(..) => "SpawnPosition",
&ClientboundPacket::TimeUpdate(..) => "TimeUpdate",
&ClientboundPacket::Title(..) => "Title",
&ClientboundPacket::StopSound(..) => "StopSound",
&ClientboundPacket::SoundEffect(..) => "SoundEffect",
&ClientboundPacket::PlayerListHeaderFooter(..) => "PlayerListHeaderFooter",
&ClientboundPacket::CollectItem(..) => "CollectItem",
&ClientboundPacket::EntityTeleport(..) => "EntityTeleport",
&ClientboundPacket::Advancements(..) => "Advancements",
&ClientboundPacket::EntityProperties(..) => "EntityProperties",
&ClientboundPacket::EntityEffect(..) => "EntityEffect",
&ClientboundPacket::DeclareRecipes(..) => "DeclareRecipes",
&ClientboundPacket::Tags(..) => "Tags",
}
}
fn get_clientstate(&self) -> ClientState {
match self {
&ClientboundPacket::StatusResponse(..) => ClientState::Status,
&ClientboundPacket::StatusPong(..) => ClientState::Status,
&ClientboundPacket::LoginDisconnect(..) => ClientState::Login,
&ClientboundPacket::EncryptionRequest(..) => ClientState::Login,
&ClientboundPacket::LoginSuccess(..) => ClientState::Login,
&ClientboundPacket::SetCompression(..) => ClientState::Login,
&ClientboundPacket::LoginPluginRequest(..) => ClientState::Login,
&ClientboundPacket::SpawnObject(..) => ClientState::Play,
&ClientboundPacket::SpawnExperienceOrb(..) => ClientState::Play,
&ClientboundPacket::SpawnGlobalEntity(..) => ClientState::Play,
&ClientboundPacket::SpawnMob(..) => ClientState::Play,
&ClientboundPacket::SpawnPainting(..) => ClientState::Play,
&ClientboundPacket::SpawnPlayer(..) => ClientState::Play,
&ClientboundPacket::ClientboundAnimation(..) => ClientState::Play,
&ClientboundPacket::Statistics(..) => ClientState::Play,
&ClientboundPacket::BlockBreakAnimation(..) => ClientState::Play,
&ClientboundPacket::UpdateBlockEntity(..) => ClientState::Play,
&ClientboundPacket::BlockAction(..) => ClientState::Play,
&ClientboundPacket::BlockChange(..) => ClientState::Play,
&ClientboundPacket::BossBar(..) => ClientState::Play,
&ClientboundPacket::ServerDifficulty(..) => ClientState::Play,
&ClientboundPacket::ChatMessage(..) => ClientState::Play,
&ClientboundPacket::MultiBlockChange(..) => ClientState::Play,
&ClientboundPacket::ClientboundTabComplete(..) => ClientState::Play,
&ClientboundPacket::DeclareCommands(..) => ClientState::Play,
&ClientboundPacket::ClientboundConfirmTransaction(..) => ClientState::Play,
&ClientboundPacket::ClientboundCloseWindow(..) => ClientState::Play,
&ClientboundPacket::OpenWindow(..) => ClientState::Play,
&ClientboundPacket::WindowItems(..) => ClientState::Play,
&ClientboundPacket::WindowProperty(..) => ClientState::Play,
&ClientboundPacket::SetSlot(..) => ClientState::Play,
&ClientboundPacket::SetCooldown(..) => ClientState::Play,
&ClientboundPacket::ClientboundPluginMessage(..) => ClientState::Play,
&ClientboundPacket::NamedSoundEffect(..) => ClientState::Play,
&ClientboundPacket::PlayDisconnect(..) => ClientState::Play,
&ClientboundPacket::EntityStatus(..) => ClientState::Play,
&ClientboundPacket::NBTQueryResponse(..) => ClientState::Play,
&ClientboundPacket::Explosion(..) => ClientState::Play,
&ClientboundPacket::UnloadChunk(..) => ClientState::Play,
&ClientboundPacket::ChangeGameState(..) => ClientState::Play,
&ClientboundPacket::KeepAlive(..) => ClientState::Play,
&ClientboundPacket::ChunkData(..) => ClientState::Play,
&ClientboundPacket::Effect(..) => ClientState::Play,
&ClientboundPacket::Particle(..) => ClientState::Play,
&ClientboundPacket::JoinGame(..) => ClientState::Play,
&ClientboundPacket::Map(..) => ClientState::Play,
&ClientboundPacket::Entity(..) => ClientState::Play,
&ClientboundPacket::EntityRelativeMove(..) => ClientState::Play,
&ClientboundPacket::EntityLookRelativeMove(..) => ClientState::Play,
&ClientboundPacket::EntityLook(..) => ClientState::Play,
&ClientboundPacket::ClientboundVehicleMove(..) => ClientState::Play,
&ClientboundPacket::OpenSignEditor(..) => ClientState::Play,
&ClientboundPacket::CraftRecipeResponse(..) => ClientState::Play,
&ClientboundPacket::PlayerAbilities(..) => ClientState::Play,
&ClientboundPacket::CombatEvent(..) => ClientState::Play,
&ClientboundPacket::PlayerListItem(..) => ClientState::Play,
&ClientboundPacket::FacePlayer(..) => ClientState::Play,
&ClientboundPacket::PlayerPositionAndLook(..) => ClientState::Play,
&ClientboundPacket::UseBed(..) => ClientState::Play,
&ClientboundPacket::UnlockRecipes(..) => ClientState::Play,
&ClientboundPacket::DestroyEntities(..) => ClientState::Play,
&ClientboundPacket::RemoveEntityEffect(..) => ClientState::Play,
&ClientboundPacket::ResourcePackSend(..) => ClientState::Play,
&ClientboundPacket::Respawn(..) => ClientState::Play,
&ClientboundPacket::EntityHeadLook(..) => ClientState::Play,
&ClientboundPacket::SelectAdvancementTab(..) => ClientState::Play,
&ClientboundPacket::WorldBorder(..) => ClientState::Play,
&ClientboundPacket::Camera(..) => ClientState::Play,
&ClientboundPacket::ClientboundHeldItemChange(..) => ClientState::Play,
&ClientboundPacket::DisplayScoreboard(..) => ClientState::Play,
&ClientboundPacket::EntityMetadata(..) => ClientState::Play,
&ClientboundPacket::AttachEntity(..) => ClientState::Play,
&ClientboundPacket::EntityVelocity(..) => ClientState::Play,
&ClientboundPacket::EntityEquipment(..) => ClientState::Play,
&ClientboundPacket::SetExperience(..) => ClientState::Play,
&ClientboundPacket::UpdateHealth(..) => ClientState::Play,
&ClientboundPacket::ScoreboardObjective(..) => ClientState::Play,
&ClientboundPacket::SetPassengers(..) => ClientState::Play,
&ClientboundPacket::Teams(..) => ClientState::Play,
&ClientboundPacket::UpdateScore(..) => ClientState::Play,
&ClientboundPacket::SpawnPosition(..) => ClientState::Play,
&ClientboundPacket::TimeUpdate(..) => ClientState::Play,
&ClientboundPacket::Title(..) => ClientState::Play,
&ClientboundPacket::StopSound(..) => ClientState::Play,
&ClientboundPacket::SoundEffect(..) => ClientState::Play,
&ClientboundPacket::PlayerListHeaderFooter(..) => ClientState::Play,
&ClientboundPacket::CollectItem(..) => ClientState::Play,
&ClientboundPacket::EntityTeleport(..) => ClientState::Play,
&ClientboundPacket::Advancements(..) => ClientState::Play,
&ClientboundPacket::EntityProperties(..) => ClientState::Play,
&ClientboundPacket::EntityEffect(..) => ClientState::Play,
&ClientboundPacket::DeclareRecipes(..) => ClientState::Play,
&ClientboundPacket::Tags(..) => ClientState::Play,
}
}
fn get_id(&self) -> i32 {
match self {
&ClientboundPacket::StatusResponse(..) => 0,
&ClientboundPacket::StatusPong(..) => 1,
&ClientboundPacket::LoginDisconnect(..) => 0,
&ClientboundPacket::EncryptionRequest(..) => 1,
&ClientboundPacket::LoginSuccess(..) => 2,
&ClientboundPacket::SetCompression(..) => 3,
&ClientboundPacket::LoginPluginRequest(..) => 4,
&ClientboundPacket::SpawnObject(..) => 0,
&ClientboundPacket::SpawnExperienceOrb(..) => 1,
&ClientboundPacket::SpawnGlobalEntity(..) => 2,
&ClientboundPacket::SpawnMob(..) => 3,
&ClientboundPacket::SpawnPainting(..) => 4,
&ClientboundPacket::SpawnPlayer(..) => 5,
&ClientboundPacket::ClientboundAnimation(..) => 6,
&ClientboundPacket::Statistics(..) => 7,
&ClientboundPacket::BlockBreakAnimation(..) => 8,
&ClientboundPacket::UpdateBlockEntity(..) => 9,
&ClientboundPacket::BlockAction(..) => 10,
&ClientboundPacket::BlockChange(..) => 11,
&ClientboundPacket::BossBar(..) => 12,
&ClientboundPacket::ServerDifficulty(..) => 13,
&ClientboundPacket::ChatMessage(..) => 14,
&ClientboundPacket::MultiBlockChange(..) => 15,
&ClientboundPacket::ClientboundTabComplete(..) => 16,
&ClientboundPacket::DeclareCommands(..) => 17,
&ClientboundPacket::ClientboundConfirmTransaction(..) => 18,
&ClientboundPacket::ClientboundCloseWindow(..) => 19,
&ClientboundPacket::OpenWindow(..) => 20,
&ClientboundPacket::WindowItems(..) => 21,
&ClientboundPacket::WindowProperty(..) => 22,
&ClientboundPacket::SetSlot(..) => 23,
&ClientboundPacket::SetCooldown(..) => 24,
&ClientboundPacket::ClientboundPluginMessage(..) => 25,
&ClientboundPacket::NamedSoundEffect(..) => 26,
&ClientboundPacket::PlayDisconnect(..) => 27,
&ClientboundPacket::EntityStatus(..) => 28,
&ClientboundPacket::NBTQueryResponse(..) => 29,
&ClientboundPacket::Explosion(..) => 30,
&ClientboundPacket::UnloadChunk(..) => 31,
&ClientboundPacket::ChangeGameState(..) => 32,
&ClientboundPacket::KeepAlive(..) => 33,
&ClientboundPacket::ChunkData(..) => 34,
&ClientboundPacket::Effect(..) => 35,
&ClientboundPacket::Particle(..) => 36,
&ClientboundPacket::JoinGame(..) => 37,
&ClientboundPacket::Map(..) => 38,
&ClientboundPacket::Entity(..) => 39,
&ClientboundPacket::EntityRelativeMove(..) => 40,
&ClientboundPacket::EntityLookRelativeMove(..) => 41,
&ClientboundPacket::EntityLook(..) => 42,
&ClientboundPacket::ClientboundVehicleMove(..) => 43,
&ClientboundPacket::OpenSignEditor(..) => 44,
&ClientboundPacket::CraftRecipeResponse(..) => 45,
&ClientboundPacket::PlayerAbilities(..) => 46,
&ClientboundPacket::CombatEvent(..) => 47,
&ClientboundPacket::PlayerListItem(..) => 48,
&ClientboundPacket::FacePlayer(..) => 49,
&ClientboundPacket::PlayerPositionAndLook(..) => 50,
&ClientboundPacket::UseBed(..) => 51,
&ClientboundPacket::UnlockRecipes(..) => 52,
&ClientboundPacket::DestroyEntities(..) => 53,
&ClientboundPacket::RemoveEntityEffect(..) => 54,
&ClientboundPacket::ResourcePackSend(..) => 55,
&ClientboundPacket::Respawn(..) => 56,
&ClientboundPacket::EntityHeadLook(..) => 57,
&ClientboundPacket::SelectAdvancementTab(..) => 58,
&ClientboundPacket::WorldBorder(..) => 59,
&ClientboundPacket::Camera(..) => 60,
&ClientboundPacket::ClientboundHeldItemChange(..) => 61,
&ClientboundPacket::DisplayScoreboard(..) => 62,
&ClientboundPacket::EntityMetadata(..) => 63,
&ClientboundPacket::AttachEntity(..) => 64,
&ClientboundPacket::EntityVelocity(..) => 65,
&ClientboundPacket::EntityEquipment(..) => 66,
&ClientboundPacket::SetExperience(..) => 67,
&ClientboundPacket::UpdateHealth(..) => 68,
&ClientboundPacket::ScoreboardObjective(..) => 69,
&ClientboundPacket::SetPassengers(..) => 70,
&ClientboundPacket::Teams(..) => 71,
&ClientboundPacket::UpdateScore(..) => 72,
&ClientboundPacket::SpawnPosition(..) => 73,
&ClientboundPacket::TimeUpdate(..) => 74,
&ClientboundPacket::Title(..) => 75,
&ClientboundPacket::StopSound(..) => 76,
&ClientboundPacket::SoundEffect(..) => 77,
&ClientboundPacket::PlayerListHeaderFooter(..) => 78,
&ClientboundPacket::CollectItem(..) => 79,
&ClientboundPacket::EntityTeleport(..) => 80,
&ClientboundPacket::Advancements(..) => 81,
&ClientboundPacket::EntityProperties(..) => 82,
&ClientboundPacket::EntityEffect(..) => 83,
&ClientboundPacket::DeclareRecipes(..) => 84,
&ClientboundPacket::Tags(..) => 85,
}
}
fn to_u8(&self) -> Result<Vec<u8>> {
match self {
&ClientboundPacket::StatusResponse(ref x) => x.to_u8(),
&ClientboundPacket::StatusPong(ref x) => x.to_u8(),
&ClientboundPacket::LoginDisconnect(ref x) => x.to_u8(),
&ClientboundPacket::EncryptionRequest(ref x) => x.to_u8(),
&ClientboundPacket::LoginSuccess(ref x) => x.to_u8(),
&ClientboundPacket::SetCompression(ref x) => x.to_u8(),
&ClientboundPacket::LoginPluginRequest(ref x) => x.to_u8(),
&ClientboundPacket::SpawnObject(ref x) => x.to_u8(),
&ClientboundPacket::SpawnExperienceOrb(ref x) => x.to_u8(),
&ClientboundPacket::SpawnGlobalEntity(ref x) => x.to_u8(),
&ClientboundPacket::SpawnMob(ref x) => x.to_u8(),
&ClientboundPacket::SpawnPainting(ref x) => x.to_u8(),
&ClientboundPacket::SpawnPlayer(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundAnimation(ref x) => x.to_u8(),
&ClientboundPacket::Statistics(ref x) => x.to_u8(),
&ClientboundPacket::BlockBreakAnimation(ref x) => x.to_u8(),
&ClientboundPacket::UpdateBlockEntity(ref x) => x.to_u8(),
&ClientboundPacket::BlockAction(ref x) => x.to_u8(),
&ClientboundPacket::BlockChange(ref x) => x.to_u8(),
&ClientboundPacket::BossBar(ref x) => x.to_u8(),
&ClientboundPacket::ServerDifficulty(ref x) => x.to_u8(),
&ClientboundPacket::ChatMessage(ref x) => x.to_u8(),
&ClientboundPacket::MultiBlockChange(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundTabComplete(ref x) => x.to_u8(),
&ClientboundPacket::DeclareCommands(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundConfirmTransaction(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundCloseWindow(ref x) => x.to_u8(),
&ClientboundPacket::OpenWindow(ref x) => x.to_u8(),
&ClientboundPacket::WindowItems(ref x) => x.to_u8(),
&ClientboundPacket::WindowProperty(ref x) => x.to_u8(),
&ClientboundPacket::SetSlot(ref x) => x.to_u8(),
&ClientboundPacket::SetCooldown(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundPluginMessage(ref x) => x.to_u8(),
&ClientboundPacket::NamedSoundEffect(ref x) => x.to_u8(),
&ClientboundPacket::PlayDisconnect(ref x) => x.to_u8(),
&ClientboundPacket::EntityStatus(ref x) => x.to_u8(),
&ClientboundPacket::NBTQueryResponse(ref x) => x.to_u8(),
&ClientboundPacket::Explosion(ref x) => x.to_u8(),
&ClientboundPacket::UnloadChunk(ref x) => x.to_u8(),
&ClientboundPacket::ChangeGameState(ref x) => x.to_u8(),
&ClientboundPacket::KeepAlive(ref x) => x.to_u8(),
&ClientboundPacket::ChunkData(ref x) => x.to_u8(),
&ClientboundPacket::Effect(ref x) => x.to_u8(),
&ClientboundPacket::Particle(ref x) => x.to_u8(),
&ClientboundPacket::JoinGame(ref x) => x.to_u8(),
&ClientboundPacket::Map(ref x) => x.to_u8(),
&ClientboundPacket::Entity(ref x) => x.to_u8(),
&ClientboundPacket::EntityRelativeMove(ref x) => x.to_u8(),
&ClientboundPacket::EntityLookRelativeMove(ref x) => x.to_u8(),
&ClientboundPacket::EntityLook(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundVehicleMove(ref x) => x.to_u8(),
&ClientboundPacket::OpenSignEditor(ref x) => x.to_u8(),
&ClientboundPacket::CraftRecipeResponse(ref x) => x.to_u8(),
&ClientboundPacket::PlayerAbilities(ref x) => x.to_u8(),
&ClientboundPacket::CombatEvent(ref x) => x.to_u8(),
&ClientboundPacket::PlayerListItem(ref x) => x.to_u8(),
&ClientboundPacket::FacePlayer(ref x) => x.to_u8(),
&ClientboundPacket::PlayerPositionAndLook(ref x) => x.to_u8(),
&ClientboundPacket::UseBed(ref x) => x.to_u8(),
&ClientboundPacket::UnlockRecipes(ref x) => x.to_u8(),
&ClientboundPacket::DestroyEntities(ref x) => x.to_u8(),
&ClientboundPacket::RemoveEntityEffect(ref x) => x.to_u8(),
&ClientboundPacket::ResourcePackSend(ref x) => x.to_u8(),
&ClientboundPacket::Respawn(ref x) => x.to_u8(),
&ClientboundPacket::EntityHeadLook(ref x) => x.to_u8(),
&ClientboundPacket::SelectAdvancementTab(ref x) => x.to_u8(),
&ClientboundPacket::WorldBorder(ref x) => x.to_u8(),
&ClientboundPacket::Camera(ref x) => x.to_u8(),
&ClientboundPacket::ClientboundHeldItemChange(ref x) => x.to_u8(),
&ClientboundPacket::DisplayScoreboard(ref x) => x.to_u8(),
&ClientboundPacket::EntityMetadata(ref x) => x.to_u8(),
&ClientboundPacket::AttachEntity(ref x) => x.to_u8(),
&ClientboundPacket::EntityVelocity(ref x) => x.to_u8(),
&ClientboundPacket::EntityEquipment(ref x) => x.to_u8(),
&ClientboundPacket::SetExperience(ref x) => x.to_u8(),
&ClientboundPacket::UpdateHealth(ref x) => x.to_u8(),
&ClientboundPacket::ScoreboardObjective(ref x) => x.to_u8(),
&ClientboundPacket::SetPassengers(ref x) => x.to_u8(),
&ClientboundPacket::Teams(ref x) => x.to_u8(),
&ClientboundPacket::UpdateScore(ref x) => x.to_u8(),
&ClientboundPacket::SpawnPosition(ref x) => x.to_u8(),
&ClientboundPacket::TimeUpdate(ref x) => x.to_u8(),
&ClientboundPacket::Title(ref x) => x.to_u8(),
&ClientboundPacket::StopSound(ref x) => x.to_u8(),
&ClientboundPacket::SoundEffect(ref x) => x.to_u8(),
&ClientboundPacket::PlayerListHeaderFooter(ref x) => x.to_u8(),
&ClientboundPacket::CollectItem(ref x) => x.to_u8(),
&ClientboundPacket::EntityTeleport(ref x) => x.to_u8(),
&ClientboundPacket::Advancements(ref x) => x.to_u8(),
&ClientboundPacket::EntityProperties(ref x) => x.to_u8(),
&ClientboundPacket::EntityEffect(ref x) => x.to_u8(),
&ClientboundPacket::DeclareRecipes(ref x) => x.to_u8(),
&ClientboundPacket::Tags(ref x) => x.to_u8(),
}
}
}
impl fmt::Display for ClientboundPacket {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "ClientboundPacket of type {}", self.get_packet_name())
}
}