1 /*
2  * This file has been automatically generated by Soupply and released under the MIT license.
3  * Generated from data/bedrock282.xml
4  */
5 module soupply.bedrock282.protocol.play;
6 
7 static import std.conv;
8 import std.typetuple : TypeTuple;
9 import xpacket;
10 
11 import soupply.util;
12 import soupply.bedrock282.metadata : Metadata;
13 import soupply.bedrock282.packet : Bedrock282Packet;
14 
15 static import soupply.bedrock282.types;
16 
17 alias Packets = TypeTuple!(Login, PlayStatus, ServerToClientHandshake, ClientToServerHandshake, Disconnect, ResourcePacksInfo, ResourcePacksStackPacket, ResourcePackClientResponse, Text, SetTime, StartGame, AddPlayer, AddEntity, RemoveEntity, AddItemEntity, AddHangingEntity, TakeItemEntity, MoveEntityAbsolute, MovePlayer, RiderJump, UpdateBlock, AddPainting, Explode, LevelSoundEvent, LevelEvent, BlockEvent, EntityEvent, MobEffect, UpdateAttributes, InventoryTransaction, MobEquipment, MobArmorEquipment, Interact, BlockPickRequest, EntityPickRequest, PlayerAction, EntityFall, HurtArmor, SetEntityData, SetEntityMotion, SetEntityLink, SetHealth, SetSpawnPosition, Animate, Respawn, ContainerOpen, ContainerClose, PlayerHotbar, InventoryContent, InventorySlot, ContainerSetData, CraftingData, CraftingEvent, GuiDataPickItem, AdventureSettings, BlockEntityData, PlayerInput, FullChunkData, SetCommandsEnabled, SetDifficulty, ChangeDimension, SetPlayerGameType, PlayerList, SimpleEvent, Event, SpawnExperienceOrb, ClientboundMapItemData, MapInfoRequest, RequestChunkRadius, ChunkRadiusUpdated, ItemFrameDropItem, GameRulesChanged, Camera, BossEvent, ShowCredits, AvailableCommands, CommandRequest, CommandBlockUpdate, CommandOutput, UpdateTrade, UpdateEquip, ResourcePackDataInfo, ResourcePackChunkData, ResourcePackChunkRequest, Transfer, PlaySound, StopSound, SetTitle, AddBehaviorTree, StructureBlockUpdate, ShowStoreOffer, PurchaseReceipt, PlayerSkin, SubClientLogin, WSConnect, SetLastHurtBy, BookEdit, NpcRequest, PhotoTransfer, ModalFormRequest, ModalFormResponse, ServerSettingsRequest, ServerSettingsResponse, ShowProfile, SetDefaultGameType, RemoveObject, SetDisplayObjective, SetScore, LabTable, UpdateBlockSynced, MoveEntityDelta, SetScoreboardIdentity, SetLocalPlayerAsInitialized, UpdateSoftEnum, NetworkStackLatency);
18 
19 class Login : Bedrock282Packet
20 {
21 
22     enum uint ID = 1;
23 
24     enum bool CLIENTBOUND = false;
25     enum bool SERVERBOUND = true;
26 
27     enum string[] __fields = ["protocol", "body_"];
28 
29     @BigEndian uint protocol = 282;
30     soupply.bedrock282.types.LoginBody body_;
31 
32     this() pure nothrow @safe @nogc {}
33 
34     this(uint protocol, soupply.bedrock282.types.LoginBody body_=soupply.bedrock282.types.LoginBody.init) pure nothrow @safe @nogc
35     {
36         this.protocol = protocol;
37         this.body_ = body_;
38     }
39 
40     mixin Make;
41 
42     public static typeof(this) fromBuffer(ubyte[] buffer)
43     {
44         Login ret = new Login();
45         ret.decode(buffer);
46         return ret;
47     }
48 
49     override string toString()
50     {
51         return "Login(protocol: " ~ std.conv.to!string(this.protocol) ~ ", body_: " ~ std.conv.to!string(this.body_) ~ ")";
52     }
53 
54 }
55 
56 class PlayStatus : Bedrock282Packet
57 {
58 
59     enum uint ID = 2;
60 
61     enum bool CLIENTBOUND = true;
62     enum bool SERVERBOUND = false;
63 
64     // status
65     enum uint OK = 0;
66     enum uint OUTDATED_CLIENT = 1;
67     enum uint OUTDATED_SERVER = 2;
68     enum uint SPAWNED = 3;
69     enum uint INVALID_TENANT = 4;
70     enum uint EDITION_MISMATCH_EDU_TO_VANILLA = 5;
71     enum uint EDITION_MISMATCH_VANILLA_TO_EDU = 6;
72     enum uint SERVER_FULL = 7;
73 
74     enum string[] __fields = ["status"];
75 
76     @BigEndian uint status;
77 
78     this() pure nothrow @safe @nogc {}
79 
80     this(uint status) pure nothrow @safe @nogc
81     {
82         this.status = status;
83     }
84 
85     mixin Make;
86 
87     public static typeof(this) fromBuffer(ubyte[] buffer)
88     {
89         PlayStatus ret = new PlayStatus();
90         ret.decode(buffer);
91         return ret;
92     }
93 
94     override string toString()
95     {
96         return "PlayStatus(status: " ~ std.conv.to!string(this.status) ~ ")";
97     }
98 
99 }
100 
101 class ServerToClientHandshake : Bedrock282Packet
102 {
103 
104     enum uint ID = 3;
105 
106     enum bool CLIENTBOUND = true;
107     enum bool SERVERBOUND = false;
108 
109     enum string[] __fields = ["serverPublicKey", "token"];
110 
111     string serverPublicKey;
112     ubyte[] token;
113 
114     this() pure nothrow @safe @nogc {}
115 
116     this(string serverPublicKey, ubyte[] token=(ubyte[]).init) pure nothrow @safe @nogc
117     {
118         this.serverPublicKey = serverPublicKey;
119         this.token = token;
120     }
121 
122     mixin Make;
123 
124     public static typeof(this) fromBuffer(ubyte[] buffer)
125     {
126         ServerToClientHandshake ret = new ServerToClientHandshake();
127         ret.decode(buffer);
128         return ret;
129     }
130 
131     override string toString()
132     {
133         return "ServerToClientHandshake(serverPublicKey: " ~ std.conv.to!string(this.serverPublicKey) ~ ", token: " ~ std.conv.to!string(this.token) ~ ")";
134     }
135 
136 }
137 
138 class ClientToServerHandshake : Bedrock282Packet
139 {
140 
141     enum uint ID = 4;
142 
143     enum bool CLIENTBOUND = false;
144     enum bool SERVERBOUND = true;
145 
146     enum string[] __fields = [];
147 
148     mixin Make;
149 
150     public static typeof(this) fromBuffer(ubyte[] buffer)
151     {
152         ClientToServerHandshake ret = new ClientToServerHandshake();
153         ret.decode(buffer);
154         return ret;
155     }
156 
157     override string toString()
158     {
159         return "ClientToServerHandshake()";
160     }
161 
162 }
163 
164 class Disconnect : Bedrock282Packet
165 {
166 
167     enum uint ID = 5;
168 
169     enum bool CLIENTBOUND = true;
170     enum bool SERVERBOUND = false;
171 
172     enum string[] __fields = ["hideDisconnectionScreen", "message"];
173 
174     bool hideDisconnectionScreen;
175     @Condition("hideDisconnectionScreen==false") string message;
176 
177     this() pure nothrow @safe @nogc {}
178 
179     this(bool hideDisconnectionScreen, string message=string.init) pure nothrow @safe @nogc
180     {
181         this.hideDisconnectionScreen = hideDisconnectionScreen;
182         this.message = message;
183     }
184 
185     mixin Make;
186 
187     public static typeof(this) fromBuffer(ubyte[] buffer)
188     {
189         Disconnect ret = new Disconnect();
190         ret.decode(buffer);
191         return ret;
192     }
193 
194     override string toString()
195     {
196         return "Disconnect(hideDisconnectionScreen: " ~ std.conv.to!string(this.hideDisconnectionScreen) ~ ", message: " ~ std.conv.to!string(this.message) ~ ")";
197     }
198 
199 }
200 
201 class ResourcePacksInfo : Bedrock282Packet
202 {
203 
204     enum uint ID = 6;
205 
206     enum bool CLIENTBOUND = true;
207     enum bool SERVERBOUND = false;
208 
209     enum string[] __fields = ["mustAccept", "behaviourPacks", "resourcePacks"];
210 
211     bool mustAccept;
212     @Length!ushort soupply.bedrock282.types.PackWithSize[] behaviourPacks;
213     @Length!ushort soupply.bedrock282.types.PackWithSize[] resourcePacks;
214 
215     this() pure nothrow @safe @nogc {}
216 
217     this(bool mustAccept, soupply.bedrock282.types.PackWithSize[] behaviourPacks=(soupply.bedrock282.types.PackWithSize[]).init, soupply.bedrock282.types.PackWithSize[] resourcePacks=(soupply.bedrock282.types.PackWithSize[]).init) pure nothrow @safe @nogc
218     {
219         this.mustAccept = mustAccept;
220         this.behaviourPacks = behaviourPacks;
221         this.resourcePacks = resourcePacks;
222     }
223 
224     mixin Make;
225 
226     public static typeof(this) fromBuffer(ubyte[] buffer)
227     {
228         ResourcePacksInfo ret = new ResourcePacksInfo();
229         ret.decode(buffer);
230         return ret;
231     }
232 
233     override string toString()
234     {
235         return "ResourcePacksInfo(mustAccept: " ~ std.conv.to!string(this.mustAccept) ~ ", behaviourPacks: " ~ std.conv.to!string(this.behaviourPacks) ~ ", resourcePacks: " ~ std.conv.to!string(this.resourcePacks) ~ ")";
236     }
237 
238 }
239 
240 class ResourcePacksStackPacket : Bedrock282Packet
241 {
242 
243     enum uint ID = 7;
244 
245     enum bool CLIENTBOUND = true;
246     enum bool SERVERBOUND = false;
247 
248     enum string[] __fields = ["mustAccept", "behaviourPacks", "resourcePacks"];
249 
250     bool mustAccept;
251     soupply.bedrock282.types.Pack[] behaviourPacks;
252     soupply.bedrock282.types.Pack[] resourcePacks;
253 
254     this() pure nothrow @safe @nogc {}
255 
256     this(bool mustAccept, soupply.bedrock282.types.Pack[] behaviourPacks=(soupply.bedrock282.types.Pack[]).init, soupply.bedrock282.types.Pack[] resourcePacks=(soupply.bedrock282.types.Pack[]).init) pure nothrow @safe @nogc
257     {
258         this.mustAccept = mustAccept;
259         this.behaviourPacks = behaviourPacks;
260         this.resourcePacks = resourcePacks;
261     }
262 
263     mixin Make;
264 
265     public static typeof(this) fromBuffer(ubyte[] buffer)
266     {
267         ResourcePacksStackPacket ret = new ResourcePacksStackPacket();
268         ret.decode(buffer);
269         return ret;
270     }
271 
272     override string toString()
273     {
274         return "ResourcePacksStackPacket(mustAccept: " ~ std.conv.to!string(this.mustAccept) ~ ", behaviourPacks: " ~ std.conv.to!string(this.behaviourPacks) ~ ", resourcePacks: " ~ std.conv.to!string(this.resourcePacks) ~ ")";
275     }
276 
277 }
278 
279 class ResourcePackClientResponse : Bedrock282Packet
280 {
281 
282     enum uint ID = 8;
283 
284     enum bool CLIENTBOUND = false;
285     enum bool SERVERBOUND = true;
286 
287     // status
288     enum ubyte REFUSED = 1;
289     enum ubyte SEND_PACKS = 2;
290     enum ubyte HAVE_ALL_PACKS = 3;
291     enum ubyte COMPLETED = 4;
292 
293     enum string[] __fields = ["status", "packIds"];
294 
295     ubyte status;
296     @Length!ushort string[] packIds;
297 
298     this() pure nothrow @safe @nogc {}
299 
300     this(ubyte status, string[] packIds=(string[]).init) pure nothrow @safe @nogc
301     {
302         this.status = status;
303         this.packIds = packIds;
304     }
305 
306     mixin Make;
307 
308     public static typeof(this) fromBuffer(ubyte[] buffer)
309     {
310         ResourcePackClientResponse ret = new ResourcePackClientResponse();
311         ret.decode(buffer);
312         return ret;
313     }
314 
315     override string toString()
316     {
317         return "ResourcePackClientResponse(status: " ~ std.conv.to!string(this.status) ~ ", packIds: " ~ std.conv.to!string(this.packIds) ~ ")";
318     }
319 
320 }
321 
322 class Text : Bedrock282Packet
323 {
324 
325     enum uint ID = 9;
326 
327     enum bool CLIENTBOUND = true;
328     enum bool SERVERBOUND = true;
329 
330     enum string[] __fields = ["type", "unknown1"];
331 
332     ubyte type;
333     bool unknown1;
334 
335     this() pure nothrow @safe @nogc {}
336 
337     this(ubyte type, bool unknown1=bool.init) pure nothrow @safe @nogc
338     {
339         this.type = type;
340         this.unknown1 = unknown1;
341     }
342 
343     mixin Make;
344 
345     public static typeof(this) fromBuffer(ubyte[] buffer)
346     {
347         Text ret = new Text();
348         ret.decode(buffer);
349         return ret;
350     }
351 
352     override string toString()
353     {
354         return "Text(type: " ~ std.conv.to!string(this.type) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ")";
355     }
356 
357     enum string variantField = "type";
358 
359     alias Variants = TypeTuple!(Raw, Chat, Translation, Popup, JukeboxPopup, Tip, System, Whisper, Announcement);
360 
361     class Raw : Bedrock282Packet
362     {
363 
364         enum typeof(type) TYPE = 0;
365 
366         enum string[] __fields = ["message", "xuid"];
367 
368         string message;
369         string xuid;
370 
371         this() pure nothrow @safe @nogc {}
372 
373         this(string message, string xuid=string.init) pure nothrow @safe @nogc
374         {
375             this.message = message;
376             this.xuid = xuid;
377         }
378 
379         mixin Make;
380 
381         override string toString()
382         {
383             return "Text.Raw(message: " ~ std.conv.to!string(this.message) ~ ", xuid: " ~ std.conv.to!string(this.xuid) ~ ")";
384         }
385 
386     }
387 
388     class Chat : Bedrock282Packet
389     {
390 
391         enum typeof(type) TYPE = 1;
392 
393         enum string[] __fields = ["sender", "message", "xuid"];
394 
395         string sender;
396         string message;
397         string xuid;
398 
399         this() pure nothrow @safe @nogc {}
400 
401         this(string sender, string message=string.init, string xuid=string.init) pure nothrow @safe @nogc
402         {
403             this.sender = sender;
404             this.message = message;
405             this.xuid = xuid;
406         }
407 
408         mixin Make;
409 
410         override string toString()
411         {
412             return "Text.Chat(sender: " ~ std.conv.to!string(this.sender) ~ ", message: " ~ std.conv.to!string(this.message) ~ ", xuid: " ~ std.conv.to!string(this.xuid) ~ ")";
413         }
414 
415     }
416 
417     class Translation : Bedrock282Packet
418     {
419 
420         enum typeof(type) TYPE = 2;
421 
422         enum string[] __fields = ["message", "parameters"];
423 
424         string message;
425         string[] parameters;
426 
427         this() pure nothrow @safe @nogc {}
428 
429         this(string message, string[] parameters=(string[]).init) pure nothrow @safe @nogc
430         {
431             this.message = message;
432             this.parameters = parameters;
433         }
434 
435         mixin Make;
436 
437         override string toString()
438         {
439             return "Text.Translation(message: " ~ std.conv.to!string(this.message) ~ ", parameters: " ~ std.conv.to!string(this.parameters) ~ ")";
440         }
441 
442     }
443 
444     class Popup : Bedrock282Packet
445     {
446 
447         enum typeof(type) TYPE = 3;
448 
449         enum string[] __fields = ["title", "subtitle"];
450 
451         string title;
452         string subtitle;
453 
454         this() pure nothrow @safe @nogc {}
455 
456         this(string title, string subtitle=string.init) pure nothrow @safe @nogc
457         {
458             this.title = title;
459             this.subtitle = subtitle;
460         }
461 
462         mixin Make;
463 
464         override string toString()
465         {
466             return "Text.Popup(title: " ~ std.conv.to!string(this.title) ~ ", subtitle: " ~ std.conv.to!string(this.subtitle) ~ ")";
467         }
468 
469     }
470 
471     class JukeboxPopup : Bedrock282Packet
472     {
473 
474         enum typeof(type) TYPE = 4;
475 
476         enum string[] __fields = ["message", "parameters"];
477 
478         string message;
479         string[] parameters;
480 
481         this() pure nothrow @safe @nogc {}
482 
483         this(string message, string[] parameters=(string[]).init) pure nothrow @safe @nogc
484         {
485             this.message = message;
486             this.parameters = parameters;
487         }
488 
489         mixin Make;
490 
491         override string toString()
492         {
493             return "Text.JukeboxPopup(message: " ~ std.conv.to!string(this.message) ~ ", parameters: " ~ std.conv.to!string(this.parameters) ~ ")";
494         }
495 
496     }
497 
498     class Tip : Bedrock282Packet
499     {
500 
501         enum typeof(type) TYPE = 5;
502 
503         enum string[] __fields = ["message"];
504 
505         string message;
506 
507         this() pure nothrow @safe @nogc {}
508 
509         this(string message) pure nothrow @safe @nogc
510         {
511             this.message = message;
512         }
513 
514         mixin Make;
515 
516         override string toString()
517         {
518             return "Text.Tip(message: " ~ std.conv.to!string(this.message) ~ ")";
519         }
520 
521     }
522 
523     class System : Bedrock282Packet
524     {
525 
526         enum typeof(type) TYPE = 6;
527 
528         enum string[] __fields = ["message"];
529 
530         string message;
531 
532         this() pure nothrow @safe @nogc {}
533 
534         this(string message) pure nothrow @safe @nogc
535         {
536             this.message = message;
537         }
538 
539         mixin Make;
540 
541         override string toString()
542         {
543             return "Text.System(message: " ~ std.conv.to!string(this.message) ~ ")";
544         }
545 
546     }
547 
548     class Whisper : Bedrock282Packet
549     {
550 
551         enum typeof(type) TYPE = 7;
552 
553         enum string[] __fields = ["sender", "message"];
554 
555         string sender;
556         string message;
557 
558         this() pure nothrow @safe @nogc {}
559 
560         this(string sender, string message=string.init) pure nothrow @safe @nogc
561         {
562             this.sender = sender;
563             this.message = message;
564         }
565 
566         mixin Make;
567 
568         override string toString()
569         {
570             return "Text.Whisper(sender: " ~ std.conv.to!string(this.sender) ~ ", message: " ~ std.conv.to!string(this.message) ~ ")";
571         }
572 
573     }
574 
575     class Announcement : Bedrock282Packet
576     {
577 
578         enum typeof(type) TYPE = 8;
579 
580         enum string[] __fields = ["announcer", "message"];
581 
582         string announcer;
583         string message;
584 
585         this() pure nothrow @safe @nogc {}
586 
587         this(string announcer, string message=string.init) pure nothrow @safe @nogc
588         {
589             this.announcer = announcer;
590             this.message = message;
591         }
592 
593         mixin Make;
594 
595         override string toString()
596         {
597             return "Text.Announcement(announcer: " ~ std.conv.to!string(this.announcer) ~ ", message: " ~ std.conv.to!string(this.message) ~ ")";
598         }
599 
600     }
601 
602 }
603 
604 class SetTime : Bedrock282Packet
605 {
606 
607     enum uint ID = 10;
608 
609     enum bool CLIENTBOUND = true;
610     enum bool SERVERBOUND = false;
611 
612     enum string[] __fields = ["time"];
613 
614     @Var int time;
615 
616     this() pure nothrow @safe @nogc {}
617 
618     this(int time) pure nothrow @safe @nogc
619     {
620         this.time = time;
621     }
622 
623     mixin Make;
624 
625     public static typeof(this) fromBuffer(ubyte[] buffer)
626     {
627         SetTime ret = new SetTime();
628         ret.decode(buffer);
629         return ret;
630     }
631 
632     override string toString()
633     {
634         return "SetTime(time: " ~ std.conv.to!string(this.time) ~ ")";
635     }
636 
637 }
638 
639 class StartGame : Bedrock282Packet
640 {
641 
642     enum uint ID = 11;
643 
644     enum bool CLIENTBOUND = true;
645     enum bool SERVERBOUND = false;
646 
647     // gamemode
648     enum int SURVIVAL = 0;
649     enum int CREATIVE = 1;
650     enum int ADVENTURE = 2;
651 
652     // dimension
653     enum int OVERWORLD = 0;
654     enum int NETHER = 1;
655     enum int END = 2;
656 
657     // generator
658     enum int OLD = 0;
659     enum int INFINITE = 1;
660     enum int FLAT = 2;
661 
662     // difficulty
663     enum int PEACEFUL = 0;
664     enum int EASY = 1;
665     enum int NORMAL = 2;
666     enum int HARD = 3;
667 
668     // version
669     enum ubyte VANILLA = 0;
670     enum ubyte EDUCATION = 1;
671 
672     enum string[] __fields = ["entityId", "runtimeId", "gamemode", "position", "yaw", "pitch", "seed", "dimension", "generator", "worldGamemode", "difficulty", "spawnPosition", "loadedInCreative", "time", "version_", "eduFeaturesEnabled", "rainLevel", "lightningLevel", "multiplayerGame", "broadcastToLan", "broadcastToXbl", "commandsEnabled", "textureRequired", "gameRules", "hasBonusChestEnabled", "hasStartWithMapEnabled", "hasTrustPlayersEnabled", "defaultPermissionLevel", "xboxLiveBroadcastMode", "serverChunkTickRadius", "hasPlatformBroadcast", "platformBroadcastMode", "xboxLiveBroadcastIntent", "hasLockedBehaviorPack", "hasLockedResourcePack", "isFromLockedWorldTemplate", "levelId", "worldName", "premiumWorldTemplate", "isTrial", "currentTick", "enchantmentSeed", "runtimeIdTable", "multiplayerCorrelationId"];
673 
674     @Var long entityId;
675     @Var ulong runtimeId;
676     @Var int gamemode;
677     Vector!(float, "xyz") position;
678     float yaw;
679     float pitch;
680     @Var int seed;
681     @Var int dimension = 0;
682     @Var int generator = 1;
683     @Var int worldGamemode;
684     @Var int difficulty;
685     @Var Vector!(int, "xyz") spawnPosition;
686     bool loadedInCreative;
687     @Var int time;
688     ubyte version_;
689     bool eduFeaturesEnabled;
690     float rainLevel;
691     float lightningLevel;
692     bool multiplayerGame = true;
693     bool broadcastToLan;
694     bool broadcastToXbl;
695     bool commandsEnabled;
696     bool textureRequired;
697     soupply.bedrock282.types.Rule[] gameRules;
698     bool hasBonusChestEnabled;
699     bool hasStartWithMapEnabled;
700     bool hasTrustPlayersEnabled;
701     @Var int defaultPermissionLevel;
702     @Var int xboxLiveBroadcastMode;
703     uint serverChunkTickRadius;
704     bool hasPlatformBroadcast;
705     @Var int platformBroadcastMode;
706     bool xboxLiveBroadcastIntent;
707     bool hasLockedBehaviorPack;
708     bool hasLockedResourcePack;
709     bool isFromLockedWorldTemplate;
710     string levelId;
711     string worldName;
712     string premiumWorldTemplate;
713     bool isTrial;
714     ulong currentTick;
715     @Var int enchantmentSeed;
716     @Var ulong[] runtimeIdTable;
717     string multiplayerCorrelationId;
718 
719     this() pure nothrow @safe @nogc {}
720 
721     this(long entityId, ulong runtimeId=ulong.init, int gamemode=int.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, float yaw=float.init, float pitch=float.init, int seed=int.init, int dimension=0, int generator=1, int worldGamemode=int.init, int difficulty=int.init, Vector!(int, "xyz") spawnPosition=Vector!(int, "xyz").init, bool loadedInCreative=bool.init, int time=int.init, ubyte version_=ubyte.init, bool eduFeaturesEnabled=bool.init, float rainLevel=float.init, float lightningLevel=float.init, bool multiplayerGame=true, bool broadcastToLan=bool.init, bool broadcastToXbl=bool.init, bool commandsEnabled=bool.init, bool textureRequired=bool.init, soupply.bedrock282.types.Rule[] gameRules=(soupply.bedrock282.types.Rule[]).init, bool hasBonusChestEnabled=bool.init, bool hasStartWithMapEnabled=bool.init, bool hasTrustPlayersEnabled=bool.init, int defaultPermissionLevel=int.init, int xboxLiveBroadcastMode=int.init, uint serverChunkTickRadius=uint.init, bool hasPlatformBroadcast=bool.init, int platformBroadcastMode=int.init, bool xboxLiveBroadcastIntent=bool.init, bool hasLockedBehaviorPack=bool.init, bool hasLockedResourcePack=bool.init, bool isFromLockedWorldTemplate=bool.init, string levelId=string.init, string worldName=string.init, string premiumWorldTemplate=string.init, bool isTrial=bool.init, ulong currentTick=ulong.init, int enchantmentSeed=int.init, ulong[] runtimeIdTable=(ulong[]).init, string multiplayerCorrelationId=string.init) pure nothrow @safe @nogc
722     {
723         this.entityId = entityId;
724         this.runtimeId = runtimeId;
725         this.gamemode = gamemode;
726         this.position = position;
727         this.yaw = yaw;
728         this.pitch = pitch;
729         this.seed = seed;
730         this.dimension = dimension;
731         this.generator = generator;
732         this.worldGamemode = worldGamemode;
733         this.difficulty = difficulty;
734         this.spawnPosition = spawnPosition;
735         this.loadedInCreative = loadedInCreative;
736         this.time = time;
737         this.version_ = version_;
738         this.eduFeaturesEnabled = eduFeaturesEnabled;
739         this.rainLevel = rainLevel;
740         this.lightningLevel = lightningLevel;
741         this.multiplayerGame = multiplayerGame;
742         this.broadcastToLan = broadcastToLan;
743         this.broadcastToXbl = broadcastToXbl;
744         this.commandsEnabled = commandsEnabled;
745         this.textureRequired = textureRequired;
746         this.gameRules = gameRules;
747         this.hasBonusChestEnabled = hasBonusChestEnabled;
748         this.hasStartWithMapEnabled = hasStartWithMapEnabled;
749         this.hasTrustPlayersEnabled = hasTrustPlayersEnabled;
750         this.defaultPermissionLevel = defaultPermissionLevel;
751         this.xboxLiveBroadcastMode = xboxLiveBroadcastMode;
752         this.serverChunkTickRadius = serverChunkTickRadius;
753         this.hasPlatformBroadcast = hasPlatformBroadcast;
754         this.platformBroadcastMode = platformBroadcastMode;
755         this.xboxLiveBroadcastIntent = xboxLiveBroadcastIntent;
756         this.hasLockedBehaviorPack = hasLockedBehaviorPack;
757         this.hasLockedResourcePack = hasLockedResourcePack;
758         this.isFromLockedWorldTemplate = isFromLockedWorldTemplate;
759         this.levelId = levelId;
760         this.worldName = worldName;
761         this.premiumWorldTemplate = premiumWorldTemplate;
762         this.isTrial = isTrial;
763         this.currentTick = currentTick;
764         this.enchantmentSeed = enchantmentSeed;
765         this.runtimeIdTable = runtimeIdTable;
766         this.multiplayerCorrelationId = multiplayerCorrelationId;
767     }
768 
769     mixin Make;
770 
771     public static typeof(this) fromBuffer(ubyte[] buffer)
772     {
773         StartGame ret = new StartGame();
774         ret.decode(buffer);
775         return ret;
776     }
777 
778     override string toString()
779     {
780         return "StartGame(entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", gamemode: " ~ std.conv.to!string(this.gamemode) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", seed: " ~ std.conv.to!string(this.seed) ~ ", dimension: " ~ std.conv.to!string(this.dimension) ~ ", generator: " ~ std.conv.to!string(this.generator) ~ ", worldGamemode: " ~ std.conv.to!string(this.worldGamemode) ~ ", difficulty: " ~ std.conv.to!string(this.difficulty) ~ ", spawnPosition: " ~ std.conv.to!string(this.spawnPosition) ~ ", loadedInCreative: " ~ std.conv.to!string(this.loadedInCreative) ~ ", time: " ~ std.conv.to!string(this.time) ~ ", version_: " ~ std.conv.to!string(this.version_) ~ ", eduFeaturesEnabled: " ~ std.conv.to!string(this.eduFeaturesEnabled) ~ ", rainLevel: " ~ std.conv.to!string(this.rainLevel) ~ ", lightningLevel: " ~ std.conv.to!string(this.lightningLevel) ~ ", multiplayerGame: " ~ std.conv.to!string(this.multiplayerGame) ~ ", broadcastToLan: " ~ std.conv.to!string(this.broadcastToLan) ~ ", broadcastToXbl: " ~ std.conv.to!string(this.broadcastToXbl) ~ ", commandsEnabled: " ~ std.conv.to!string(this.commandsEnabled) ~ ", textureRequired: " ~ std.conv.to!string(this.textureRequired) ~ ", gameRules: " ~ std.conv.to!string(this.gameRules) ~ ", hasBonusChestEnabled: " ~ std.conv.to!string(this.hasBonusChestEnabled) ~ ", hasStartWithMapEnabled: " ~ std.conv.to!string(this.hasStartWithMapEnabled) ~ ", hasTrustPlayersEnabled: " ~ std.conv.to!string(this.hasTrustPlayersEnabled) ~ ", defaultPermissionLevel: " ~ std.conv.to!string(this.defaultPermissionLevel) ~ ", xboxLiveBroadcastMode: " ~ std.conv.to!string(this.xboxLiveBroadcastMode) ~ ", serverChunkTickRadius: " ~ std.conv.to!string(this.serverChunkTickRadius) ~ ", hasPlatformBroadcast: " ~ std.conv.to!string(this.hasPlatformBroadcast) ~ ", platformBroadcastMode: " ~ std.conv.to!string(this.platformBroadcastMode) ~ ", xboxLiveBroadcastIntent: " ~ std.conv.to!string(this.xboxLiveBroadcastIntent) ~ ", hasLockedBehaviorPack: " ~ std.conv.to!string(this.hasLockedBehaviorPack) ~ ", hasLockedResourcePack: " ~ std.conv.to!string(this.hasLockedResourcePack) ~ ", isFromLockedWorldTemplate: " ~ std.conv.to!string(this.isFromLockedWorldTemplate) ~ ", levelId: " ~ std.conv.to!string(this.levelId) ~ ", worldName: " ~ std.conv.to!string(this.worldName) ~ ", premiumWorldTemplate: " ~ std.conv.to!string(this.premiumWorldTemplate) ~ ", isTrial: " ~ std.conv.to!string(this.isTrial) ~ ", currentTick: " ~ std.conv.to!string(this.currentTick) ~ ", enchantmentSeed: " ~ std.conv.to!string(this.enchantmentSeed) ~ ", runtimeIdTable: " ~ std.conv.to!string(this.runtimeIdTable) ~ ", multiplayerCorrelationId: " ~ std.conv.to!string(this.multiplayerCorrelationId) ~ ")";
781     }
782 
783 }
784 
785 class AddPlayer : Bedrock282Packet
786 {
787 
788     enum uint ID = 12;
789 
790     enum bool CLIENTBOUND = true;
791     enum bool SERVERBOUND = false;
792 
793     enum string[] __fields = ["uuid", "username", "entityId", "runtimeId", "position", "motion", "pitch", "headYaw", "yaw", "heldItem", "metadata", "unknown11", "unknown12", "unknown13", "unknown14", "unknown15", "unknown16", "links", "deviceId"];
794 
795     soupply.bedrock282.types.McpeUuid uuid;
796     string username;
797     @Var long entityId;
798     @Var ulong runtimeId;
799     Vector!(float, "xyz") position;
800     Vector!(float, "xyz") motion;
801     float pitch;
802     float headYaw;
803     float yaw;
804     soupply.bedrock282.types.Slot heldItem;
805     Metadata metadata;
806     @Var uint unknown11;
807     @Var uint unknown12;
808     @Var uint unknown13;
809     @Var uint unknown14;
810     @Var uint unknown15;
811     long unknown16;
812     soupply.bedrock282.types.Link[] links;
813     string deviceId;
814 
815     this() pure nothrow @safe @nogc {}
816 
817     this(soupply.bedrock282.types.McpeUuid uuid, string username=string.init, long entityId=long.init, ulong runtimeId=ulong.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, Vector!(float, "xyz") motion=Vector!(float, "xyz").init, float pitch=float.init, float headYaw=float.init, float yaw=float.init, soupply.bedrock282.types.Slot heldItem=soupply.bedrock282.types.Slot.init, Metadata metadata=Metadata.init, uint unknown11=uint.init, uint unknown12=uint.init, uint unknown13=uint.init, uint unknown14=uint.init, uint unknown15=uint.init, long unknown16=long.init, soupply.bedrock282.types.Link[] links=(soupply.bedrock282.types.Link[]).init, string deviceId=string.init) pure nothrow @safe @nogc
818     {
819         this.uuid = uuid;
820         this.username = username;
821         this.entityId = entityId;
822         this.runtimeId = runtimeId;
823         this.position = position;
824         this.motion = motion;
825         this.pitch = pitch;
826         this.headYaw = headYaw;
827         this.yaw = yaw;
828         this.heldItem = heldItem;
829         this.metadata = metadata;
830         this.unknown11 = unknown11;
831         this.unknown12 = unknown12;
832         this.unknown13 = unknown13;
833         this.unknown14 = unknown14;
834         this.unknown15 = unknown15;
835         this.unknown16 = unknown16;
836         this.links = links;
837         this.deviceId = deviceId;
838     }
839 
840     mixin Make;
841 
842     public static typeof(this) fromBuffer(ubyte[] buffer)
843     {
844         AddPlayer ret = new AddPlayer();
845         ret.decode(buffer);
846         return ret;
847     }
848 
849     override string toString()
850     {
851         return "AddPlayer(uuid: " ~ std.conv.to!string(this.uuid) ~ ", username: " ~ std.conv.to!string(this.username) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", motion: " ~ std.conv.to!string(this.motion) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", headYaw: " ~ std.conv.to!string(this.headYaw) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", heldItem: " ~ std.conv.to!string(this.heldItem) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ", unknown11: " ~ std.conv.to!string(this.unknown11) ~ ", unknown12: " ~ std.conv.to!string(this.unknown12) ~ ", unknown13: " ~ std.conv.to!string(this.unknown13) ~ ", unknown14: " ~ std.conv.to!string(this.unknown14) ~ ", unknown15: " ~ std.conv.to!string(this.unknown15) ~ ", unknown16: " ~ std.conv.to!string(this.unknown16) ~ ", links: " ~ std.conv.to!string(this.links) ~ ", deviceId: " ~ std.conv.to!string(this.deviceId) ~ ")";
852     }
853 
854 }
855 
856 class AddEntity : Bedrock282Packet
857 {
858 
859     enum uint ID = 13;
860 
861     enum bool CLIENTBOUND = true;
862     enum bool SERVERBOUND = false;
863 
864     enum string[] __fields = ["entityId", "runtimeId", "type", "position", "motion", "pitch", "yaw", "headYaw", "attributes", "metadata", "links"];
865 
866     @Var long entityId;
867     @Var ulong runtimeId;
868     @Var uint type;
869     Vector!(float, "xyz") position;
870     Vector!(float, "xyz") motion;
871     float pitch;
872     float yaw;
873     float headYaw;
874     soupply.bedrock282.types.Attribute[] attributes;
875     Metadata metadata;
876     soupply.bedrock282.types.Link[] links;
877 
878     this() pure nothrow @safe @nogc {}
879 
880     this(long entityId, ulong runtimeId=ulong.init, uint type=uint.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, Vector!(float, "xyz") motion=Vector!(float, "xyz").init, float pitch=float.init, float yaw=float.init, float headYaw=float.init, soupply.bedrock282.types.Attribute[] attributes=(soupply.bedrock282.types.Attribute[]).init, Metadata metadata=Metadata.init, soupply.bedrock282.types.Link[] links=(soupply.bedrock282.types.Link[]).init) pure nothrow @safe @nogc
881     {
882         this.entityId = entityId;
883         this.runtimeId = runtimeId;
884         this.type = type;
885         this.position = position;
886         this.motion = motion;
887         this.pitch = pitch;
888         this.yaw = yaw;
889         this.headYaw = headYaw;
890         this.attributes = attributes;
891         this.metadata = metadata;
892         this.links = links;
893     }
894 
895     mixin Make;
896 
897     public static typeof(this) fromBuffer(ubyte[] buffer)
898     {
899         AddEntity ret = new AddEntity();
900         ret.decode(buffer);
901         return ret;
902     }
903 
904     override string toString()
905     {
906         return "AddEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", motion: " ~ std.conv.to!string(this.motion) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", headYaw: " ~ std.conv.to!string(this.headYaw) ~ ", attributes: " ~ std.conv.to!string(this.attributes) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ", links: " ~ std.conv.to!string(this.links) ~ ")";
907     }
908 
909 }
910 
911 class RemoveEntity : Bedrock282Packet
912 {
913 
914     enum uint ID = 14;
915 
916     enum bool CLIENTBOUND = true;
917     enum bool SERVERBOUND = false;
918 
919     enum string[] __fields = ["entityId"];
920 
921     @Var long entityId;
922 
923     this() pure nothrow @safe @nogc {}
924 
925     this(long entityId) pure nothrow @safe @nogc
926     {
927         this.entityId = entityId;
928     }
929 
930     mixin Make;
931 
932     public static typeof(this) fromBuffer(ubyte[] buffer)
933     {
934         RemoveEntity ret = new RemoveEntity();
935         ret.decode(buffer);
936         return ret;
937     }
938 
939     override string toString()
940     {
941         return "RemoveEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
942     }
943 
944 }
945 
946 class AddItemEntity : Bedrock282Packet
947 {
948 
949     enum uint ID = 15;
950 
951     enum bool CLIENTBOUND = true;
952     enum bool SERVERBOUND = false;
953 
954     enum string[] __fields = ["entityId", "runtimeId", "item", "position", "motion", "metadata"];
955 
956     @Var long entityId;
957     @Var ulong runtimeId;
958     soupply.bedrock282.types.Slot item;
959     Vector!(float, "xyz") position;
960     Vector!(float, "xyz") motion;
961     Metadata metadata;
962 
963     this() pure nothrow @safe @nogc {}
964 
965     this(long entityId, ulong runtimeId=ulong.init, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, Vector!(float, "xyz") motion=Vector!(float, "xyz").init, Metadata metadata=Metadata.init) pure nothrow @safe @nogc
966     {
967         this.entityId = entityId;
968         this.runtimeId = runtimeId;
969         this.item = item;
970         this.position = position;
971         this.motion = motion;
972         this.metadata = metadata;
973     }
974 
975     mixin Make;
976 
977     public static typeof(this) fromBuffer(ubyte[] buffer)
978     {
979         AddItemEntity ret = new AddItemEntity();
980         ret.decode(buffer);
981         return ret;
982     }
983 
984     override string toString()
985     {
986         return "AddItemEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", item: " ~ std.conv.to!string(this.item) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", motion: " ~ std.conv.to!string(this.motion) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ")";
987     }
988 
989 }
990 
991 class AddHangingEntity : Bedrock282Packet
992 {
993 
994     enum uint ID = 16;
995 
996     enum bool CLIENTBOUND = true;
997     enum bool SERVERBOUND = false;
998 
999     enum string[] __fields = ["entityId", "runtimeId", "position", "unknown3"];
1000 
1001     @Var long entityId;
1002     @Var ulong runtimeId;
1003     soupply.bedrock282.types.BlockPosition position;
1004     @Var int unknown3;
1005 
1006     this() pure nothrow @safe @nogc {}
1007 
1008     this(long entityId, ulong runtimeId=ulong.init, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, int unknown3=int.init) pure nothrow @safe @nogc
1009     {
1010         this.entityId = entityId;
1011         this.runtimeId = runtimeId;
1012         this.position = position;
1013         this.unknown3 = unknown3;
1014     }
1015 
1016     mixin Make;
1017 
1018     public static typeof(this) fromBuffer(ubyte[] buffer)
1019     {
1020         AddHangingEntity ret = new AddHangingEntity();
1021         ret.decode(buffer);
1022         return ret;
1023     }
1024 
1025     override string toString()
1026     {
1027         return "AddHangingEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ")";
1028     }
1029 
1030 }
1031 
1032 class TakeItemEntity : Bedrock282Packet
1033 {
1034 
1035     enum uint ID = 17;
1036 
1037     enum bool CLIENTBOUND = true;
1038     enum bool SERVERBOUND = false;
1039 
1040     enum string[] __fields = ["collected", "collector"];
1041 
1042     @Var long collected;
1043     @Var long collector;
1044 
1045     this() pure nothrow @safe @nogc {}
1046 
1047     this(long collected, long collector=long.init) pure nothrow @safe @nogc
1048     {
1049         this.collected = collected;
1050         this.collector = collector;
1051     }
1052 
1053     mixin Make;
1054 
1055     public static typeof(this) fromBuffer(ubyte[] buffer)
1056     {
1057         TakeItemEntity ret = new TakeItemEntity();
1058         ret.decode(buffer);
1059         return ret;
1060     }
1061 
1062     override string toString()
1063     {
1064         return "TakeItemEntity(collected: " ~ std.conv.to!string(this.collected) ~ ", collector: " ~ std.conv.to!string(this.collector) ~ ")";
1065     }
1066 
1067 }
1068 
1069 class MoveEntityAbsolute : Bedrock282Packet
1070 {
1071 
1072     enum uint ID = 18;
1073 
1074     enum bool CLIENTBOUND = true;
1075     enum bool SERVERBOUND = false;
1076 
1077     // flags
1078     enum ubyte GROUND = 1;
1079     enum ubyte TELEPORT = 2;
1080 
1081     enum string[] __fields = ["entityId", "flags", "position", "rotation"];
1082 
1083     @Var long entityId;
1084     ubyte flags;
1085     Vector!(float, "xyz") position;
1086     Vector!(byte, "xyz") rotation;
1087 
1088     this() pure nothrow @safe @nogc {}
1089 
1090     this(long entityId, ubyte flags=ubyte.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, Vector!(byte, "xyz") rotation=Vector!(byte, "xyz").init) pure nothrow @safe @nogc
1091     {
1092         this.entityId = entityId;
1093         this.flags = flags;
1094         this.position = position;
1095         this.rotation = rotation;
1096     }
1097 
1098     mixin Make;
1099 
1100     public static typeof(this) fromBuffer(ubyte[] buffer)
1101     {
1102         MoveEntityAbsolute ret = new MoveEntityAbsolute();
1103         ret.decode(buffer);
1104         return ret;
1105     }
1106 
1107     override string toString()
1108     {
1109         return "MoveEntityAbsolute(entityId: " ~ std.conv.to!string(this.entityId) ~ ", flags: " ~ std.conv.to!string(this.flags) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", rotation: " ~ std.conv.to!string(this.rotation) ~ ")";
1110     }
1111 
1112 }
1113 
1114 class MovePlayer : Bedrock282Packet
1115 {
1116 
1117     enum uint ID = 19;
1118 
1119     enum bool CLIENTBOUND = true;
1120     enum bool SERVERBOUND = true;
1121 
1122     // animation
1123     enum ubyte FULL = 0;
1124     enum ubyte NONE = 1;
1125     enum ubyte TELEPORT = 2;
1126     enum ubyte PITCH = 3;
1127 
1128     enum string[] __fields = ["entityId", "position", "pitch", "headYaw", "yaw", "animation", "onGround", "unknown7", "unknown8", "unknown9"];
1129 
1130     @Var long entityId;
1131     Vector!(float, "xyz") position;
1132     float pitch;
1133     float headYaw;
1134     float yaw;
1135     ubyte animation;
1136     bool onGround;
1137     @Var long unknown7;
1138     @Condition("animation==3") int unknown8;
1139     @Condition("animation==3") int unknown9;
1140 
1141     this() pure nothrow @safe @nogc {}
1142 
1143     this(long entityId, Vector!(float, "xyz") position=Vector!(float, "xyz").init, float pitch=float.init, float headYaw=float.init, float yaw=float.init, ubyte animation=ubyte.init, bool onGround=bool.init, long unknown7=long.init, int unknown8=int.init, int unknown9=int.init) pure nothrow @safe @nogc
1144     {
1145         this.entityId = entityId;
1146         this.position = position;
1147         this.pitch = pitch;
1148         this.headYaw = headYaw;
1149         this.yaw = yaw;
1150         this.animation = animation;
1151         this.onGround = onGround;
1152         this.unknown7 = unknown7;
1153         this.unknown8 = unknown8;
1154         this.unknown9 = unknown9;
1155     }
1156 
1157     mixin Make;
1158 
1159     public static typeof(this) fromBuffer(ubyte[] buffer)
1160     {
1161         MovePlayer ret = new MovePlayer();
1162         ret.decode(buffer);
1163         return ret;
1164     }
1165 
1166     override string toString()
1167     {
1168         return "MovePlayer(entityId: " ~ std.conv.to!string(this.entityId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", headYaw: " ~ std.conv.to!string(this.headYaw) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", animation: " ~ std.conv.to!string(this.animation) ~ ", onGround: " ~ std.conv.to!string(this.onGround) ~ ", unknown7: " ~ std.conv.to!string(this.unknown7) ~ ", unknown8: " ~ std.conv.to!string(this.unknown8) ~ ", unknown9: " ~ std.conv.to!string(this.unknown9) ~ ")";
1169     }
1170 
1171 }
1172 
1173 class RiderJump : Bedrock282Packet
1174 {
1175 
1176     enum uint ID = 20;
1177 
1178     enum bool CLIENTBOUND = true;
1179     enum bool SERVERBOUND = true;
1180 
1181     enum string[] __fields = ["rider"];
1182 
1183     @Var long rider;
1184 
1185     this() pure nothrow @safe @nogc {}
1186 
1187     this(long rider) pure nothrow @safe @nogc
1188     {
1189         this.rider = rider;
1190     }
1191 
1192     mixin Make;
1193 
1194     public static typeof(this) fromBuffer(ubyte[] buffer)
1195     {
1196         RiderJump ret = new RiderJump();
1197         ret.decode(buffer);
1198         return ret;
1199     }
1200 
1201     override string toString()
1202     {
1203         return "RiderJump(rider: " ~ std.conv.to!string(this.rider) ~ ")";
1204     }
1205 
1206 }
1207 
1208 class UpdateBlock : Bedrock282Packet
1209 {
1210 
1211     enum uint ID = 21;
1212 
1213     enum bool CLIENTBOUND = true;
1214     enum bool SERVERBOUND = false;
1215 
1216     // flags and meta
1217     enum uint NEIGHBORS = 1;
1218     enum uint NETWORK = 2;
1219     enum uint NO_GRAPHIC = 4;
1220     enum uint PRIORITY = 8;
1221 
1222     // data layer id
1223     enum uint NORMAL = 0;
1224     enum uint LIQUID = 1;
1225 
1226     enum string[] __fields = ["position", "block", "flagsAndMeta", "dataLayerId"];
1227 
1228     soupply.bedrock282.types.BlockPosition position;
1229     @Var uint block;
1230     @Var uint flagsAndMeta;
1231     @Var uint dataLayerId;
1232 
1233     this() pure nothrow @safe @nogc {}
1234 
1235     this(soupply.bedrock282.types.BlockPosition position, uint block=uint.init, uint flagsAndMeta=uint.init, uint dataLayerId=uint.init) pure nothrow @safe @nogc
1236     {
1237         this.position = position;
1238         this.block = block;
1239         this.flagsAndMeta = flagsAndMeta;
1240         this.dataLayerId = dataLayerId;
1241     }
1242 
1243     mixin Make;
1244 
1245     public static typeof(this) fromBuffer(ubyte[] buffer)
1246     {
1247         UpdateBlock ret = new UpdateBlock();
1248         ret.decode(buffer);
1249         return ret;
1250     }
1251 
1252     override string toString()
1253     {
1254         return "UpdateBlock(position: " ~ std.conv.to!string(this.position) ~ ", block: " ~ std.conv.to!string(this.block) ~ ", flagsAndMeta: " ~ std.conv.to!string(this.flagsAndMeta) ~ ", dataLayerId: " ~ std.conv.to!string(this.dataLayerId) ~ ")";
1255     }
1256 
1257 }
1258 
1259 class AddPainting : Bedrock282Packet
1260 {
1261 
1262     enum uint ID = 22;
1263 
1264     enum bool CLIENTBOUND = true;
1265     enum bool SERVERBOUND = false;
1266 
1267     enum string[] __fields = ["entityId", "runtimeId", "position", "direction", "title"];
1268 
1269     @Var long entityId;
1270     @Var ulong runtimeId;
1271     soupply.bedrock282.types.BlockPosition position;
1272     @Var int direction;
1273     string title;
1274 
1275     this() pure nothrow @safe @nogc {}
1276 
1277     this(long entityId, ulong runtimeId=ulong.init, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, int direction=int.init, string title=string.init) pure nothrow @safe @nogc
1278     {
1279         this.entityId = entityId;
1280         this.runtimeId = runtimeId;
1281         this.position = position;
1282         this.direction = direction;
1283         this.title = title;
1284     }
1285 
1286     mixin Make;
1287 
1288     public static typeof(this) fromBuffer(ubyte[] buffer)
1289     {
1290         AddPainting ret = new AddPainting();
1291         ret.decode(buffer);
1292         return ret;
1293     }
1294 
1295     override string toString()
1296     {
1297         return "AddPainting(entityId: " ~ std.conv.to!string(this.entityId) ~ ", runtimeId: " ~ std.conv.to!string(this.runtimeId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", direction: " ~ std.conv.to!string(this.direction) ~ ", title: " ~ std.conv.to!string(this.title) ~ ")";
1298     }
1299 
1300 }
1301 
1302 class Explode : Bedrock282Packet
1303 {
1304 
1305     enum uint ID = 23;
1306 
1307     enum bool CLIENTBOUND = true;
1308     enum bool SERVERBOUND = false;
1309 
1310     enum string[] __fields = ["position", "radius", "destroyedBlocks"];
1311 
1312     Vector!(float, "xyz") position;
1313     float radius;
1314     soupply.bedrock282.types.BlockPosition[] destroyedBlocks;
1315 
1316     this() pure nothrow @safe @nogc {}
1317 
1318     this(Vector!(float, "xyz") position, float radius=float.init, soupply.bedrock282.types.BlockPosition[] destroyedBlocks=(soupply.bedrock282.types.BlockPosition[]).init) pure nothrow @safe @nogc
1319     {
1320         this.position = position;
1321         this.radius = radius;
1322         this.destroyedBlocks = destroyedBlocks;
1323     }
1324 
1325     mixin Make;
1326 
1327     public static typeof(this) fromBuffer(ubyte[] buffer)
1328     {
1329         Explode ret = new Explode();
1330         ret.decode(buffer);
1331         return ret;
1332     }
1333 
1334     override string toString()
1335     {
1336         return "Explode(position: " ~ std.conv.to!string(this.position) ~ ", radius: " ~ std.conv.to!string(this.radius) ~ ", destroyedBlocks: " ~ std.conv.to!string(this.destroyedBlocks) ~ ")";
1337     }
1338 
1339 }
1340 
1341 class LevelSoundEvent : Bedrock282Packet
1342 {
1343 
1344     enum uint ID = 24;
1345 
1346     enum bool CLIENTBOUND = true;
1347     enum bool SERVERBOUND = true;
1348 
1349     // sound
1350     enum ubyte ITEM_USE_ON = 0;
1351     enum ubyte HIT = 1;
1352     enum ubyte STEP = 2;
1353     enum ubyte FLY = 3;
1354     enum ubyte JUMP = 4;
1355     enum ubyte BREAK = 5;
1356     enum ubyte PLACE = 6;
1357     enum ubyte HEAVY_STEP = 7;
1358     enum ubyte GALLOP = 8;
1359     enum ubyte FALL = 9;
1360     enum ubyte AMBIENT = 10;
1361     enum ubyte AMBIENT_BABY = 11;
1362     enum ubyte AMBIENT_IN_WATER = 12;
1363     enum ubyte BREATHE = 13;
1364     enum ubyte DEATH = 14;
1365     enum ubyte DEATH_IN_WATER = 15;
1366     enum ubyte DEATH_TO_ZOMBIE = 16;
1367     enum ubyte HURT = 17;
1368     enum ubyte HURT_IN_WATER = 18;
1369     enum ubyte MAD = 19;
1370     enum ubyte BOOST = 20;
1371     enum ubyte BOW = 21;
1372     enum ubyte SQUISH_BIG = 22;
1373     enum ubyte SQUISH_SMALL = 23;
1374     enum ubyte FALL_BIG = 24;
1375     enum ubyte FALL_SMALL = 25;
1376     enum ubyte SPLASH = 26;
1377     enum ubyte FIZZ = 27;
1378     enum ubyte FLAP = 28;
1379     enum ubyte SWIM = 29;
1380     enum ubyte DRINK = 30;
1381     enum ubyte EAT = 31;
1382     enum ubyte TAKEOFF = 32;
1383     enum ubyte SHAKE = 33;
1384     enum ubyte PLOP = 34;
1385     enum ubyte LAND = 35;
1386     enum ubyte SADDLE = 36;
1387     enum ubyte ARMOR = 37;
1388     enum ubyte MOB_ARMOR_STAND_PLACE = 38;
1389     enum ubyte ADD_CHEST = 39;
1390     enum ubyte THROW = 40;
1391     enum ubyte ATTACK = 41;
1392     enum ubyte ATTACK_NODAMAGE = 42;
1393     enum ubyte ATTACK_STRONG = 43;
1394     enum ubyte WARN = 44;
1395     enum ubyte SHEAR = 45;
1396     enum ubyte MILK = 46;
1397     enum ubyte THUNDER = 47;
1398     enum ubyte EXPLODE = 48;
1399     enum ubyte FIRE = 49;
1400     enum ubyte IGNITE = 50;
1401     enum ubyte FUSE = 51;
1402     enum ubyte STARE = 52;
1403     enum ubyte SPAWN = 53;
1404     enum ubyte SHOOT = 54;
1405     enum ubyte BREAK_BLOCK = 55;
1406     enum ubyte LAUNCH = 56;
1407     enum ubyte BLAST = 57;
1408     enum ubyte LARGE_BLAST = 58;
1409     enum ubyte TWINKLE = 59;
1410     enum ubyte REMEDY = 60;
1411     enum ubyte UNFECT = 61;
1412     enum ubyte LEVELUP = 62;
1413     enum ubyte BOW_HIT = 63;
1414     enum ubyte BULLET_HIT = 64;
1415     enum ubyte EXTINGUISH_FIRE = 65;
1416     enum ubyte ITEM_FIZZ = 66;
1417     enum ubyte CHEST_OPEN = 67;
1418     enum ubyte CHEST_CLOSED = 68;
1419     enum ubyte SHULKERBOX_OPEN = 69;
1420     enum ubyte SHULKERBOX_CLOSED = 70;
1421     enum ubyte ENDERCHEST_OPEN = 71;
1422     enum ubyte ENDERCHEST_CLOSED = 72;
1423     enum ubyte POWER_ON = 73;
1424     enum ubyte POWER_OFF = 74;
1425     enum ubyte ATTACH = 75;
1426     enum ubyte DETACH = 76;
1427     enum ubyte DENY = 77;
1428     enum ubyte TRIPOD = 78;
1429     enum ubyte POP = 79;
1430     enum ubyte DROP_SLOT = 80;
1431     enum ubyte NOTE = 81;
1432     enum ubyte THORNS = 82;
1433     enum ubyte PISTON_IN = 83;
1434     enum ubyte PISTON_OUT = 84;
1435     enum ubyte PORTAL = 85;
1436     enum ubyte WATER = 86;
1437     enum ubyte LAVA_POP = 87;
1438     enum ubyte LAVA = 88;
1439     enum ubyte BURP = 89;
1440     enum ubyte BUCKET_FILL_WATER = 90;
1441     enum ubyte BUCKET_FILL_LAVA = 91;
1442     enum ubyte BUCKET_EMPTY_WATER = 92;
1443     enum ubyte BUCKET_EMPTY_LAVA = 93;
1444     enum ubyte ARMOR_EQUIP_CHAIN = 94;
1445     enum ubyte ARMOR_EQUIP_DIAMOND = 95;
1446     enum ubyte ARMOR_EQUIP_GENERIC = 96;
1447     enum ubyte ARMOR_EQUIP_GOLD = 97;
1448     enum ubyte ARMOR_EQUIP_IRON = 98;
1449     enum ubyte ARMOR_EQUIP_LEATHER = 99;
1450     enum ubyte ARMOR_EQUIP_ELYTRA = 100;
1451     enum ubyte RECORD_13 = 101;
1452     enum ubyte RECORD_CAT = 102;
1453     enum ubyte RECORD_BLOCKS = 103;
1454     enum ubyte RECORD_CHIRP = 104;
1455     enum ubyte RECORD_FAR = 105;
1456     enum ubyte RECORD_MALL = 106;
1457     enum ubyte RECORD_MELLOHI = 107;
1458     enum ubyte RECORD_STAL = 108;
1459     enum ubyte RECORD_STRAD = 109;
1460     enum ubyte RECORD_WARD = 110;
1461     enum ubyte RECORD_11 = 111;
1462     enum ubyte RECORD_WAIT = 112;
1463     enum ubyte STOP_RECORD = 113;
1464     enum ubyte FLOP = 114;
1465     enum ubyte ELDERGUARDIAN_CURSE = 115;
1466     enum ubyte MOB_WARNING = 116;
1467     enum ubyte MOB_WARNING_BABY = 117;
1468     enum ubyte TELEPORT = 118;
1469     enum ubyte SHULKER_OPEN = 119;
1470     enum ubyte SHULKER_CLOSE = 120;
1471     enum ubyte HAGGLE = 121;
1472     enum ubyte HAGGLE_YES = 122;
1473     enum ubyte HAGGLE_NO = 123;
1474     enum ubyte HAGGLE_IDLE = 124;
1475     enum ubyte CHORUSGROW = 125;
1476     enum ubyte CHORUSDEATH = 126;
1477     enum ubyte GLASS = 127;
1478     enum ubyte POTION_BREWED = 128;
1479     enum ubyte CAST_SPELL = 129;
1480     enum ubyte PREPARE_ATTACK = 130;
1481     enum ubyte PREPARE_SUMMON = 131;
1482     enum ubyte PREPARE_WOLOLO = 132;
1483     enum ubyte FANG = 133;
1484     enum ubyte CHARGE = 134;
1485     enum ubyte CAMERA_TAKE_PICTURE = 135;
1486     enum ubyte LEASHKNOT_PLACE = 136;
1487     enum ubyte LEASHKNOT_BREAK = 137;
1488     enum ubyte GROWL = 138;
1489     enum ubyte WHINE = 139;
1490     enum ubyte PANT = 140;
1491     enum ubyte PURR = 141;
1492     enum ubyte PURREOW = 142;
1493     enum ubyte DEATH_MIN_VOLUME = 143;
1494     enum ubyte DEATH_MID_VOLUME = 144;
1495     enum ubyte IMITATE_BLAZE = 145;
1496     enum ubyte IMITATE_CAVE_SPIDER = 146;
1497     enum ubyte IMITATE_CREEPER = 147;
1498     enum ubyte IMITATE_ELDER_GUARDIAN = 148;
1499     enum ubyte IMITATE_ENDER_DRAGON = 149;
1500     enum ubyte IMITATE_ENDERMAN = 150;
1501     enum ubyte IMITATE_EVOCATION_ILLAGER = 152;
1502     enum ubyte IMITATE_GHAST = 153;
1503     enum ubyte IMITATE_HUSK = 154;
1504     enum ubyte IMITATE_ILLUSION_ILLAGER = 155;
1505     enum ubyte IMITATE_MAGMA_CUBE = 156;
1506     enum ubyte IMITATE_POLAR_BEAR = 157;
1507     enum ubyte IMITATE_SHULKER = 158;
1508     enum ubyte IMITATE_SILVERFISH = 159;
1509     enum ubyte IMITATE_SKELETON = 160;
1510     enum ubyte IMITATE_SLIME = 161;
1511     enum ubyte IMITATE_SPIDER = 162;
1512     enum ubyte IMITATE_STRAY = 163;
1513     enum ubyte IMITATE_VEX = 164;
1514     enum ubyte IMITATE_VINDICATION_ILLAGER = 165;
1515     enum ubyte IMITATE_WITCH = 166;
1516     enum ubyte IMITATE_WITHER = 167;
1517     enum ubyte IMITATE_WITHER_SKELETON = 168;
1518     enum ubyte IMITATE_WOLF = 169;
1519     enum ubyte IMITATE_ZOMBIE = 170;
1520     enum ubyte IMITATE_ZOMBIE_PIGMAN = 171;
1521     enum ubyte IMITATE_ZOMBIE_VILLAGER = 172;
1522     enum ubyte BLOCK_END_PORTAL_FRAME_FILL = 173;
1523     enum ubyte BLOCK_END_PORTAL_SPAWN = 174;
1524     enum ubyte RANDOM_ANVIL_USE = 175;
1525     enum ubyte BOTTLE_DRAGONBREATH = 176;
1526     enum ubyte PORTAL_TRAVEL = 177;
1527     enum ubyte ITEM_TRIDENT_HIT = 178;
1528     enum ubyte ITEM_TRIDENT_RETURN = 179;
1529     enum ubyte ITEM_TRIDENT_RIPTIDE_1 = 180;
1530     enum ubyte ITEM_TRIDENT_RIPTIDE_2 = 181;
1531     enum ubyte ITEM_TRIDENT_RIPTIDE_3 = 182;
1532     enum ubyte ITEM_TRIDENT_THROW = 183;
1533     enum ubyte ITEM_TRIDENT_THUNDER = 184;
1534     enum ubyte ITEM_TRIDENT_HIT_GROUND = 185;
1535     enum ubyte DEFAULT = 186;
1536     enum ubyte ELEMCONSTRUCT_OPEN = 188;
1537     enum ubyte ICEBOMB_HIT = 189;
1538     enum ubyte BALLOONPOP = 190;
1539     enum ubyte LT_REACTION_ICEBOMB = 191;
1540     enum ubyte LT_REACTION_BLEACH = 192;
1541     enum ubyte LT_REACTION_EPASTE = 193;
1542     enum ubyte LT_REACTION_EPASTE2 = 194;
1543     enum ubyte LT_REACTION_FERTILIZER = 199;
1544     enum ubyte LT_REACTION_FIREBALL = 200;
1545     enum ubyte LT_REACTION_MGSALT = 201;
1546     enum ubyte LT_REACTION_MISCFIRE = 202;
1547     enum ubyte LT_REACTION_FIRE = 203;
1548     enum ubyte LT_REACTION_MISCEXPLOSION = 204;
1549     enum ubyte LT_REACTION_MISCMYSTICAL = 205;
1550     enum ubyte LT_REACTION_MISCMYSTICAL2 = 206;
1551     enum ubyte LT_REACTION_PRODUCT = 207;
1552     enum ubyte SPARKLER_USE = 208;
1553     enum ubyte GLOWSTICK_USE = 209;
1554     enum ubyte SPARKLER_ACTIVE = 210;
1555     enum ubyte CONVERT_TO_DROWNED = 211;
1556     enum ubyte BUCKET_FILL_FISH = 212;
1557     enum ubyte BUCKET_EMPTY_FISH = 213;
1558     enum ubyte UNDEFINED = 214;
1559 
1560     enum string[] __fields = ["sound", "position", "volume", "pitch", "unknown4", "disableRelativeVolume"];
1561 
1562     ubyte sound;
1563     Vector!(float, "xyz") position;
1564     @Var uint volume;
1565     @Var int pitch;
1566     bool unknown4;
1567     bool disableRelativeVolume;
1568 
1569     this() pure nothrow @safe @nogc {}
1570 
1571     this(ubyte sound, Vector!(float, "xyz") position=Vector!(float, "xyz").init, uint volume=uint.init, int pitch=int.init, bool unknown4=bool.init, bool disableRelativeVolume=bool.init) pure nothrow @safe @nogc
1572     {
1573         this.sound = sound;
1574         this.position = position;
1575         this.volume = volume;
1576         this.pitch = pitch;
1577         this.unknown4 = unknown4;
1578         this.disableRelativeVolume = disableRelativeVolume;
1579     }
1580 
1581     mixin Make;
1582 
1583     public static typeof(this) fromBuffer(ubyte[] buffer)
1584     {
1585         LevelSoundEvent ret = new LevelSoundEvent();
1586         ret.decode(buffer);
1587         return ret;
1588     }
1589 
1590     override string toString()
1591     {
1592         return "LevelSoundEvent(sound: " ~ std.conv.to!string(this.sound) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", volume: " ~ std.conv.to!string(this.volume) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ", disableRelativeVolume: " ~ std.conv.to!string(this.disableRelativeVolume) ~ ")";
1593     }
1594 
1595 }
1596 
1597 class LevelEvent : Bedrock282Packet
1598 {
1599 
1600     enum uint ID = 25;
1601 
1602     enum bool CLIENTBOUND = true;
1603     enum bool SERVERBOUND = false;
1604 
1605     // event id
1606     enum int START_RAIN = 3001;
1607     enum int START_THUNDER = 3002;
1608     enum int STOP_RAIN = 3003;
1609     enum int STOP_THUNDER = 3004;
1610     enum int START_BLOCK_BREAK = 3600;
1611     enum int STOP_BLOCK_BREAK = 3601;
1612     enum int SET_DATA = 4000;
1613     enum int PLAYERS_SLEEPING = 9800;
1614     enum int PARTICLE_BUBBLE = 16385;
1615     enum int PARTICLE_CRITICAL = 16386;
1616     enum int PARTICLE_BLOCK_FORCE_FIELD = 16387;
1617     enum int PARTICLE_SMOKE = 16388;
1618     enum int PARTICLE_EXPLODE = 16389;
1619     enum int PARTICLE_EVAPORATION = 16390;
1620     enum int PARTICLE_FLAME = 16391;
1621     enum int PARTICLE_LAVA = 16392;
1622     enum int PARTICLE_LARGE_SMOKE = 16393;
1623     enum int PARTICLE_REDSTONE = 16394;
1624     enum int PARTICLE_RISING_RED_DUST = 16395;
1625     enum int PARTICLE_ITEM_BREAK = 16396;
1626     enum int PARTICLE_SNOWBALL_POOF = 16397;
1627     enum int PARTICLE_HUGE_EXPLODE = 16398;
1628     enum int PARTICLE_HUGE_EXPLODE_SEED = 16399;
1629     enum int PARTICLE_MOB_FLAME = 16400;
1630     enum int PARTICLE_HEART = 16401;
1631     enum int PARTICLE_TERRAIN = 16402;
1632     enum int PARTICLE_TOWN_AURA = 16403;
1633     enum int PARTICLE_PORTAL = 16404;
1634     enum int PARTICLE_WATER_SPLASH = 16405;
1635     enum int PARTICLE_WATER_WAKE = 16406;
1636     enum int PARTICLE_DRIP_WATER = 16407;
1637     enum int PARTICLE_DRIP_LAVA = 16408;
1638     enum int PARTICLE_FALLING_DUST = 16409;
1639     enum int PARTICLE_MOB_SPELL = 16410;
1640     enum int PARTICLE_MOB_SPELL_AMBIENT = 16411;
1641     enum int PARTICLE_MOB_SPELL_INSTANTANEOUS = 16412;
1642     enum int PARTICLE_INK = 16413;
1643     enum int PARTICLE_SLIME = 16414;
1644     enum int PARTICLE_RAIN_SPLASH = 16415;
1645     enum int PARTICLE_VILLAGER_ANGRY = 16416;
1646     enum int PARTICLE_VILLAGER_HAPPY = 16417;
1647     enum int PARTICLE_ENCHANTMENT_TABLE = 16418;
1648     enum int PARTICLE_TRACKING_EMITTER = 16419;
1649     enum int PARTICLE_NOTE = 16420;
1650     enum int PARTICLE_WITCH_SPELL = 16421;
1651     enum int PARTICLE_CARROT = 16422;
1652     enum int PARTICLE_END_ROD = 16424;
1653     enum int PARTICLE_DRAGON_BREATH = 16425;
1654     enum int PARTICLE_SHOOT = 2000;
1655     enum int PARTICLE_DESTROY = 2001;
1656     enum int PARTICLE_SPLASH = 2002;
1657     enum int PARTICLE_EYE_DESPAWN = 2003;
1658     enum int PARTICLE_SPAWN = 2004;
1659 
1660     enum string[] __fields = ["eventId", "position", "data"];
1661 
1662     @Var int eventId;
1663     Vector!(float, "xyz") position;
1664     @Var int data;
1665 
1666     this() pure nothrow @safe @nogc {}
1667 
1668     this(int eventId, Vector!(float, "xyz") position=Vector!(float, "xyz").init, int data=int.init) pure nothrow @safe @nogc
1669     {
1670         this.eventId = eventId;
1671         this.position = position;
1672         this.data = data;
1673     }
1674 
1675     mixin Make;
1676 
1677     public static typeof(this) fromBuffer(ubyte[] buffer)
1678     {
1679         LevelEvent ret = new LevelEvent();
1680         ret.decode(buffer);
1681         return ret;
1682     }
1683 
1684     override string toString()
1685     {
1686         return "LevelEvent(eventId: " ~ std.conv.to!string(this.eventId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
1687     }
1688 
1689 }
1690 
1691 class BlockEvent : Bedrock282Packet
1692 {
1693 
1694     enum uint ID = 26;
1695 
1696     enum bool CLIENTBOUND = true;
1697     enum bool SERVERBOUND = false;
1698 
1699     enum string[] __fields = ["position", "data"];
1700 
1701     soupply.bedrock282.types.BlockPosition position;
1702     @Var int[2] data;
1703 
1704     this() pure nothrow @safe @nogc {}
1705 
1706     this(soupply.bedrock282.types.BlockPosition position, int[2] data=(int[2]).init) pure nothrow @safe @nogc
1707     {
1708         this.position = position;
1709         this.data = data;
1710     }
1711 
1712     mixin Make;
1713 
1714     public static typeof(this) fromBuffer(ubyte[] buffer)
1715     {
1716         BlockEvent ret = new BlockEvent();
1717         ret.decode(buffer);
1718         return ret;
1719     }
1720 
1721     override string toString()
1722     {
1723         return "BlockEvent(position: " ~ std.conv.to!string(this.position) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
1724     }
1725 
1726 }
1727 
1728 class EntityEvent : Bedrock282Packet
1729 {
1730 
1731     enum uint ID = 27;
1732 
1733     enum bool CLIENTBOUND = true;
1734     enum bool SERVERBOUND = true;
1735 
1736     // event id
1737     enum ubyte HURT_ANIMATION = 2;
1738     enum ubyte DEATH_ANIMATION = 3;
1739     enum ubyte ARM_SWING = 4;
1740     enum ubyte TAME_FAIL = 6;
1741     enum ubyte TAME_SUCCESS = 7;
1742     enum ubyte SHAKE_WET = 8;
1743     enum ubyte USE_ITEM = 9;
1744     enum ubyte EAT_GRASS_ANIMATION = 10;
1745     enum ubyte FISH_HOOK_BUBBLES = 11;
1746     enum ubyte FISH_HOOK_POSITION = 12;
1747     enum ubyte FISH_HOOK_HOOK = 13;
1748     enum ubyte FISH_HOOK_TEASE = 14;
1749     enum ubyte SQUID_INK_CLOUD = 15;
1750     enum ubyte ZOMBIE_VILLAGER_CURE = 16;
1751     enum ubyte RESPAWN = 18;
1752     enum ubyte IRON_GOLEM_OFFER_FLOWER = 19;
1753     enum ubyte IRON_GOLEM_WITHDRAW_FLOWER = 20;
1754     enum ubyte LOVE_PARTICLES = 21;
1755     enum ubyte WITCH_SPELL_ANIMATION = 24;
1756     enum ubyte FIREWORK_PARTICLES = 25;
1757     enum ubyte SILVERFISH_SPAWN_ANIMATION = 27;
1758     enum ubyte WITCH_DRINK_POTION = 29;
1759     enum ubyte WITCH_THROWN_POTION = 30;
1760     enum ubyte MINECART_TNT_PRIME_FUSE = 31;
1761     enum ubyte PLAYER_ADD_XP_LEVELS = 34;
1762     enum ubyte ELDER_GUARDIAN_CURSE = 35;
1763     enum ubyte AGENT_ARM_SWING = 36;
1764     enum ubyte ENDER_DRAGON_DEATH = 37;
1765     enum ubyte DUST_PARTICLES = 38;
1766     enum ubyte EATING_ITEM = 57;
1767     enum ubyte BABY_ANIMAL_FEED = 60;
1768     enum ubyte DEATH_SMOKE_CLOUD = 61;
1769     enum ubyte COMPLETE_TRADE = 62;
1770     enum ubyte REMOVE_LEASH = 63;
1771     enum ubyte CONSUME_TOTEM = 65;
1772     enum ubyte ENTITY_SPAWN = 67;
1773     enum ubyte DRAGON_PUKE = 68;
1774     enum ubyte ITEM_ENTITY_MERGE = 69;
1775 
1776     enum string[] __fields = ["entityId", "eventId", "data"];
1777 
1778     @Var long entityId;
1779     ubyte eventId;
1780     @Var int data;
1781 
1782     this() pure nothrow @safe @nogc {}
1783 
1784     this(long entityId, ubyte eventId=ubyte.init, int data=int.init) pure nothrow @safe @nogc
1785     {
1786         this.entityId = entityId;
1787         this.eventId = eventId;
1788         this.data = data;
1789     }
1790 
1791     mixin Make;
1792 
1793     public static typeof(this) fromBuffer(ubyte[] buffer)
1794     {
1795         EntityEvent ret = new EntityEvent();
1796         ret.decode(buffer);
1797         return ret;
1798     }
1799 
1800     override string toString()
1801     {
1802         return "EntityEvent(entityId: " ~ std.conv.to!string(this.entityId) ~ ", eventId: " ~ std.conv.to!string(this.eventId) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
1803     }
1804 
1805 }
1806 
1807 class MobEffect : Bedrock282Packet
1808 {
1809 
1810     enum uint ID = 28;
1811 
1812     enum bool CLIENTBOUND = true;
1813     enum bool SERVERBOUND = false;
1814 
1815     // event id
1816     enum ubyte ADD = 1;
1817     enum ubyte MODIFY = 2;
1818     enum ubyte REMOVE = 3;
1819 
1820     // effect
1821     enum int SPEED = 1;
1822     enum int SLOWNESS = 2;
1823     enum int HASTE = 3;
1824     enum int MINING_FATIGUE = 4;
1825     enum int STRENGTH = 5;
1826     enum int INSTANT_HEALTH = 6;
1827     enum int INSTANT_DAMAGE = 7;
1828     enum int JUMP_BOOST = 8;
1829     enum int NAUSEA = 9;
1830     enum int REGENERATION = 10;
1831     enum int RESISTANCE = 11;
1832     enum int FIRE_RESISTANCE = 12;
1833     enum int WATER_BREATHING = 13;
1834     enum int INVISIBILITY = 14;
1835     enum int BLINDNESS = 15;
1836     enum int NIGHT_VISION = 16;
1837     enum int HUNGER = 17;
1838     enum int WEAKNESS = 18;
1839     enum int POISON = 19;
1840     enum int WITHER = 20;
1841     enum int HEALTH_BOOST = 21;
1842     enum int ABSORPTION = 22;
1843     enum int SATURATION = 23;
1844     enum int LEVITATION = 24;
1845     enum int FATAL_POISON = 25;
1846 
1847     enum string[] __fields = ["entityId", "eventId", "effect", "amplifier", "particles", "duration"];
1848 
1849     @Var long entityId;
1850     ubyte eventId;
1851     @Var int effect;
1852     @Var int amplifier;
1853     bool particles;
1854     @Var int duration;
1855 
1856     this() pure nothrow @safe @nogc {}
1857 
1858     this(long entityId, ubyte eventId=ubyte.init, int effect=int.init, int amplifier=int.init, bool particles=bool.init, int duration=int.init) pure nothrow @safe @nogc
1859     {
1860         this.entityId = entityId;
1861         this.eventId = eventId;
1862         this.effect = effect;
1863         this.amplifier = amplifier;
1864         this.particles = particles;
1865         this.duration = duration;
1866     }
1867 
1868     mixin Make;
1869 
1870     public static typeof(this) fromBuffer(ubyte[] buffer)
1871     {
1872         MobEffect ret = new MobEffect();
1873         ret.decode(buffer);
1874         return ret;
1875     }
1876 
1877     override string toString()
1878     {
1879         return "MobEffect(entityId: " ~ std.conv.to!string(this.entityId) ~ ", eventId: " ~ std.conv.to!string(this.eventId) ~ ", effect: " ~ std.conv.to!string(this.effect) ~ ", amplifier: " ~ std.conv.to!string(this.amplifier) ~ ", particles: " ~ std.conv.to!string(this.particles) ~ ", duration: " ~ std.conv.to!string(this.duration) ~ ")";
1880     }
1881 
1882 }
1883 
1884 class UpdateAttributes : Bedrock282Packet
1885 {
1886 
1887     enum uint ID = 29;
1888 
1889     enum bool CLIENTBOUND = true;
1890     enum bool SERVERBOUND = false;
1891 
1892     enum string[] __fields = ["entityId", "attributes"];
1893 
1894     @Var long entityId;
1895     soupply.bedrock282.types.Attribute[] attributes;
1896 
1897     this() pure nothrow @safe @nogc {}
1898 
1899     this(long entityId, soupply.bedrock282.types.Attribute[] attributes=(soupply.bedrock282.types.Attribute[]).init) pure nothrow @safe @nogc
1900     {
1901         this.entityId = entityId;
1902         this.attributes = attributes;
1903     }
1904 
1905     mixin Make;
1906 
1907     public static typeof(this) fromBuffer(ubyte[] buffer)
1908     {
1909         UpdateAttributes ret = new UpdateAttributes();
1910         ret.decode(buffer);
1911         return ret;
1912     }
1913 
1914     override string toString()
1915     {
1916         return "UpdateAttributes(entityId: " ~ std.conv.to!string(this.entityId) ~ ", attributes: " ~ std.conv.to!string(this.attributes) ~ ")";
1917     }
1918 
1919 }
1920 
1921 class InventoryTransaction : Bedrock282Packet
1922 {
1923 
1924     enum uint ID = 30;
1925 
1926     enum bool CLIENTBOUND = false;
1927     enum bool SERVERBOUND = true;
1928 
1929     enum string[] __fields = ["type", "actions"];
1930 
1931     @Var uint type;
1932     soupply.bedrock282.types.InventoryAction[] actions;
1933 
1934     this() pure nothrow @safe @nogc {}
1935 
1936     this(uint type, soupply.bedrock282.types.InventoryAction[] actions=(soupply.bedrock282.types.InventoryAction[]).init) pure nothrow @safe @nogc
1937     {
1938         this.type = type;
1939         this.actions = actions;
1940     }
1941 
1942     mixin Make;
1943 
1944     public static typeof(this) fromBuffer(ubyte[] buffer)
1945     {
1946         InventoryTransaction ret = new InventoryTransaction();
1947         ret.decode(buffer);
1948         return ret;
1949     }
1950 
1951     override string toString()
1952     {
1953         return "InventoryTransaction(type: " ~ std.conv.to!string(this.type) ~ ", actions: " ~ std.conv.to!string(this.actions) ~ ")";
1954     }
1955 
1956     enum string variantField = "type";
1957 
1958     alias Variants = TypeTuple!(Normal0, Normal1, UseItem, UseItemOnEntity, ReleaseItem);
1959 
1960     class Normal0 : Bedrock282Packet
1961     {
1962 
1963         enum typeof(type) TYPE = 0;
1964 
1965         enum string[] __fields = [];
1966 
1967         mixin Make;
1968 
1969         override string toString()
1970         {
1971             return "InventoryTransaction.Normal0()";
1972         }
1973 
1974     }
1975 
1976     class Normal1 : Bedrock282Packet
1977     {
1978 
1979         enum typeof(type) TYPE = 1;
1980 
1981         enum string[] __fields = [];
1982 
1983         mixin Make;
1984 
1985         override string toString()
1986         {
1987             return "InventoryTransaction.Normal1()";
1988         }
1989 
1990     }
1991 
1992     class UseItem : Bedrock282Packet
1993     {
1994 
1995         enum typeof(type) TYPE = 2;
1996 
1997         // action type
1998         enum uint CLICK_BLOCK = 0;
1999         enum uint CLICK_AIR = 1;
2000         enum uint BREAK_BLOCK = 2;
2001 
2002         enum string[] __fields = ["actionType", "blockPosition", "face", "hotbarSlot", "item", "playerPosition", "clickPosition"];
2003 
2004         @Var uint actionType;
2005         soupply.bedrock282.types.BlockPosition blockPosition;
2006         @Var int face;
2007         @Var int hotbarSlot;
2008         soupply.bedrock282.types.Slot item;
2009         Vector!(float, "xyz") playerPosition;
2010         Vector!(float, "xyz") clickPosition;
2011 
2012         this() pure nothrow @safe @nogc {}
2013 
2014         this(uint actionType, soupply.bedrock282.types.BlockPosition blockPosition=soupply.bedrock282.types.BlockPosition.init, int face=int.init, int hotbarSlot=int.init, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init, Vector!(float, "xyz") playerPosition=Vector!(float, "xyz").init, Vector!(float, "xyz") clickPosition=Vector!(float, "xyz").init) pure nothrow @safe @nogc
2015         {
2016             this.actionType = actionType;
2017             this.blockPosition = blockPosition;
2018             this.face = face;
2019             this.hotbarSlot = hotbarSlot;
2020             this.item = item;
2021             this.playerPosition = playerPosition;
2022             this.clickPosition = clickPosition;
2023         }
2024 
2025         mixin Make;
2026 
2027         override string toString()
2028         {
2029             return "InventoryTransaction.UseItem(actionType: " ~ std.conv.to!string(this.actionType) ~ ", blockPosition: " ~ std.conv.to!string(this.blockPosition) ~ ", face: " ~ std.conv.to!string(this.face) ~ ", hotbarSlot: " ~ std.conv.to!string(this.hotbarSlot) ~ ", item: " ~ std.conv.to!string(this.item) ~ ", playerPosition: " ~ std.conv.to!string(this.playerPosition) ~ ", clickPosition: " ~ std.conv.to!string(this.clickPosition) ~ ")";
2030         }
2031 
2032     }
2033 
2034     class UseItemOnEntity : Bedrock282Packet
2035     {
2036 
2037         enum typeof(type) TYPE = 3;
2038 
2039         // action type
2040         enum uint INTERACT = 0;
2041         enum uint ATTACK = 1;
2042 
2043         enum string[] __fields = ["entityId", "actionType", "hotbarSlot", "item", "unknown4", "unknown5"];
2044 
2045         @Var long entityId;
2046         @Var uint actionType;
2047         @Var int hotbarSlot;
2048         soupply.bedrock282.types.Slot item;
2049         Vector!(float, "xyz") unknown4;
2050         Vector!(float, "xyz") unknown5;
2051 
2052         this() pure nothrow @safe @nogc {}
2053 
2054         this(long entityId, uint actionType=uint.init, int hotbarSlot=int.init, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init, Vector!(float, "xyz") unknown4=Vector!(float, "xyz").init, Vector!(float, "xyz") unknown5=Vector!(float, "xyz").init) pure nothrow @safe @nogc
2055         {
2056             this.entityId = entityId;
2057             this.actionType = actionType;
2058             this.hotbarSlot = hotbarSlot;
2059             this.item = item;
2060             this.unknown4 = unknown4;
2061             this.unknown5 = unknown5;
2062         }
2063 
2064         mixin Make;
2065 
2066         override string toString()
2067         {
2068             return "InventoryTransaction.UseItemOnEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", actionType: " ~ std.conv.to!string(this.actionType) ~ ", hotbarSlot: " ~ std.conv.to!string(this.hotbarSlot) ~ ", item: " ~ std.conv.to!string(this.item) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ", unknown5: " ~ std.conv.to!string(this.unknown5) ~ ")";
2069         }
2070 
2071     }
2072 
2073     class ReleaseItem : Bedrock282Packet
2074     {
2075 
2076         enum typeof(type) TYPE = 4;
2077 
2078         // action type
2079         enum uint SHOOT_BOW = 0;
2080         enum uint CONSUME = 1;
2081 
2082         enum string[] __fields = ["actionType", "hotbarSlot", "item", "headPosition"];
2083 
2084         @Var uint actionType;
2085         @Var int hotbarSlot;
2086         soupply.bedrock282.types.Slot item;
2087         Vector!(float, "xyz") headPosition;
2088 
2089         this() pure nothrow @safe @nogc {}
2090 
2091         this(uint actionType, int hotbarSlot=int.init, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init, Vector!(float, "xyz") headPosition=Vector!(float, "xyz").init) pure nothrow @safe @nogc
2092         {
2093             this.actionType = actionType;
2094             this.hotbarSlot = hotbarSlot;
2095             this.item = item;
2096             this.headPosition = headPosition;
2097         }
2098 
2099         mixin Make;
2100 
2101         override string toString()
2102         {
2103             return "InventoryTransaction.ReleaseItem(actionType: " ~ std.conv.to!string(this.actionType) ~ ", hotbarSlot: " ~ std.conv.to!string(this.hotbarSlot) ~ ", item: " ~ std.conv.to!string(this.item) ~ ", headPosition: " ~ std.conv.to!string(this.headPosition) ~ ")";
2104         }
2105 
2106     }
2107 
2108 }
2109 
2110 class MobEquipment : Bedrock282Packet
2111 {
2112 
2113     enum uint ID = 31;
2114 
2115     enum bool CLIENTBOUND = true;
2116     enum bool SERVERBOUND = true;
2117 
2118     enum string[] __fields = ["entityId", "item", "inventorySlot", "hotbarSlot", "unknown4"];
2119 
2120     @Var long entityId;
2121     soupply.bedrock282.types.Slot item;
2122     ubyte inventorySlot;
2123     ubyte hotbarSlot;
2124     ubyte unknown4;
2125 
2126     this() pure nothrow @safe @nogc {}
2127 
2128     this(long entityId, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init, ubyte inventorySlot=ubyte.init, ubyte hotbarSlot=ubyte.init, ubyte unknown4=ubyte.init) pure nothrow @safe @nogc
2129     {
2130         this.entityId = entityId;
2131         this.item = item;
2132         this.inventorySlot = inventorySlot;
2133         this.hotbarSlot = hotbarSlot;
2134         this.unknown4 = unknown4;
2135     }
2136 
2137     mixin Make;
2138 
2139     public static typeof(this) fromBuffer(ubyte[] buffer)
2140     {
2141         MobEquipment ret = new MobEquipment();
2142         ret.decode(buffer);
2143         return ret;
2144     }
2145 
2146     override string toString()
2147     {
2148         return "MobEquipment(entityId: " ~ std.conv.to!string(this.entityId) ~ ", item: " ~ std.conv.to!string(this.item) ~ ", inventorySlot: " ~ std.conv.to!string(this.inventorySlot) ~ ", hotbarSlot: " ~ std.conv.to!string(this.hotbarSlot) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ")";
2149     }
2150 
2151 }
2152 
2153 class MobArmorEquipment : Bedrock282Packet
2154 {
2155 
2156     enum uint ID = 32;
2157 
2158     enum bool CLIENTBOUND = true;
2159     enum bool SERVERBOUND = true;
2160 
2161     enum string[] __fields = ["entityId", "armor"];
2162 
2163     @Var long entityId;
2164     soupply.bedrock282.types.Slot[4] armor;
2165 
2166     this() pure nothrow @safe @nogc {}
2167 
2168     this(long entityId, soupply.bedrock282.types.Slot[4] armor=(soupply.bedrock282.types.Slot[4]).init) pure nothrow @safe @nogc
2169     {
2170         this.entityId = entityId;
2171         this.armor = armor;
2172     }
2173 
2174     mixin Make;
2175 
2176     public static typeof(this) fromBuffer(ubyte[] buffer)
2177     {
2178         MobArmorEquipment ret = new MobArmorEquipment();
2179         ret.decode(buffer);
2180         return ret;
2181     }
2182 
2183     override string toString()
2184     {
2185         return "MobArmorEquipment(entityId: " ~ std.conv.to!string(this.entityId) ~ ", armor: " ~ std.conv.to!string(this.armor) ~ ")";
2186     }
2187 
2188 }
2189 
2190 class Interact : Bedrock282Packet
2191 {
2192 
2193     enum uint ID = 33;
2194 
2195     enum bool CLIENTBOUND = false;
2196     enum bool SERVERBOUND = true;
2197 
2198     // action
2199     enum ubyte LEAVE_VEHICLE = 3;
2200     enum ubyte HOVER = 4;
2201     enum ubyte OPEN_INVENTORY = 6;
2202 
2203     enum string[] __fields = ["action", "target", "targetPosition"];
2204 
2205     ubyte action;
2206     @Var long target;
2207     @Condition("action==4") Vector!(float, "xyz") targetPosition;
2208 
2209     this() pure nothrow @safe @nogc {}
2210 
2211     this(ubyte action, long target=long.init, Vector!(float, "xyz") targetPosition=Vector!(float, "xyz").init) pure nothrow @safe @nogc
2212     {
2213         this.action = action;
2214         this.target = target;
2215         this.targetPosition = targetPosition;
2216     }
2217 
2218     mixin Make;
2219 
2220     public static typeof(this) fromBuffer(ubyte[] buffer)
2221     {
2222         Interact ret = new Interact();
2223         ret.decode(buffer);
2224         return ret;
2225     }
2226 
2227     override string toString()
2228     {
2229         return "Interact(action: " ~ std.conv.to!string(this.action) ~ ", target: " ~ std.conv.to!string(this.target) ~ ", targetPosition: " ~ std.conv.to!string(this.targetPosition) ~ ")";
2230     }
2231 
2232 }
2233 
2234 class BlockPickRequest : Bedrock282Packet
2235 {
2236 
2237     enum uint ID = 34;
2238 
2239     enum bool CLIENTBOUND = false;
2240     enum bool SERVERBOUND = true;
2241 
2242     enum string[] __fields = ["position", "unknown1", "slot"];
2243 
2244     @Var Vector!(int, "xyz") position;
2245     bool unknown1;
2246     ubyte slot;
2247 
2248     this() pure nothrow @safe @nogc {}
2249 
2250     this(Vector!(int, "xyz") position, bool unknown1=bool.init, ubyte slot=ubyte.init) pure nothrow @safe @nogc
2251     {
2252         this.position = position;
2253         this.unknown1 = unknown1;
2254         this.slot = slot;
2255     }
2256 
2257     mixin Make;
2258 
2259     public static typeof(this) fromBuffer(ubyte[] buffer)
2260     {
2261         BlockPickRequest ret = new BlockPickRequest();
2262         ret.decode(buffer);
2263         return ret;
2264     }
2265 
2266     override string toString()
2267     {
2268         return "BlockPickRequest(position: " ~ std.conv.to!string(this.position) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ")";
2269     }
2270 
2271 }
2272 
2273 class EntityPickRequest : Bedrock282Packet
2274 {
2275 
2276     enum uint ID = 35;
2277 
2278     enum bool CLIENTBOUND = false;
2279     enum bool SERVERBOUND = true;
2280 
2281     enum string[] __fields = ["entityType", "slot"];
2282 
2283     long entityType;
2284     ubyte slot;
2285 
2286     this() pure nothrow @safe @nogc {}
2287 
2288     this(long entityType, ubyte slot=ubyte.init) pure nothrow @safe @nogc
2289     {
2290         this.entityType = entityType;
2291         this.slot = slot;
2292     }
2293 
2294     mixin Make;
2295 
2296     public static typeof(this) fromBuffer(ubyte[] buffer)
2297     {
2298         EntityPickRequest ret = new EntityPickRequest();
2299         ret.decode(buffer);
2300         return ret;
2301     }
2302 
2303     override string toString()
2304     {
2305         return "EntityPickRequest(entityType: " ~ std.conv.to!string(this.entityType) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ")";
2306     }
2307 
2308 }
2309 
2310 class PlayerAction : Bedrock282Packet
2311 {
2312 
2313     enum uint ID = 36;
2314 
2315     enum bool CLIENTBOUND = false;
2316     enum bool SERVERBOUND = true;
2317 
2318     // action
2319     enum int START_BREAK = 0;
2320     enum int ABORT_BREAK = 1;
2321     enum int STOP_BREAK = 2;
2322     enum int GET_UPDATED_BLOCK = 3;
2323     enum int DROP_ITEM = 4;
2324     enum int START_SLEEPING = 5;
2325     enum int STOP_SLEEPING = 6;
2326     enum int RESPAWN = 7;
2327     enum int JUMP = 8;
2328     enum int START_SPRINT = 9;
2329     enum int STOP_SPRINT = 10;
2330     enum int START_SNEAK = 11;
2331     enum int STOP_SNEAK = 12;
2332     enum int START_GLIDING = 15;
2333     enum int STOP_GLIDING = 16;
2334     enum int BUILD_DENIED = 17;
2335     enum int CONTINUE_BREAK = 18;
2336     enum int CHANGE_SKIN = 19;
2337     enum int SET_ENCHANTMENT_SEED = 20;
2338     enum int START_SWIMMING = 21;
2339     enum int STOP_SWIMMING = 22;
2340     enum int START_SPIN_ATTACK = 23;
2341     enum int STOP_SPIN_ATTACK = 24;
2342 
2343     enum string[] __fields = ["entityId", "action", "position", "face"];
2344 
2345     @Var long entityId;
2346     @Var int action;
2347     soupply.bedrock282.types.BlockPosition position;
2348     @Var int face;
2349 
2350     this() pure nothrow @safe @nogc {}
2351 
2352     this(long entityId, int action=int.init, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, int face=int.init) pure nothrow @safe @nogc
2353     {
2354         this.entityId = entityId;
2355         this.action = action;
2356         this.position = position;
2357         this.face = face;
2358     }
2359 
2360     mixin Make;
2361 
2362     public static typeof(this) fromBuffer(ubyte[] buffer)
2363     {
2364         PlayerAction ret = new PlayerAction();
2365         ret.decode(buffer);
2366         return ret;
2367     }
2368 
2369     override string toString()
2370     {
2371         return "PlayerAction(entityId: " ~ std.conv.to!string(this.entityId) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", face: " ~ std.conv.to!string(this.face) ~ ")";
2372     }
2373 
2374 }
2375 
2376 class EntityFall : Bedrock282Packet
2377 {
2378 
2379     enum uint ID = 37;
2380 
2381     enum bool CLIENTBOUND = false;
2382     enum bool SERVERBOUND = true;
2383 
2384     enum string[] __fields = ["entityId", "distance", "unknown2"];
2385 
2386     @Var long entityId;
2387     float distance;
2388     bool unknown2;
2389 
2390     this() pure nothrow @safe @nogc {}
2391 
2392     this(long entityId, float distance=float.init, bool unknown2=bool.init) pure nothrow @safe @nogc
2393     {
2394         this.entityId = entityId;
2395         this.distance = distance;
2396         this.unknown2 = unknown2;
2397     }
2398 
2399     mixin Make;
2400 
2401     public static typeof(this) fromBuffer(ubyte[] buffer)
2402     {
2403         EntityFall ret = new EntityFall();
2404         ret.decode(buffer);
2405         return ret;
2406     }
2407 
2408     override string toString()
2409     {
2410         return "EntityFall(entityId: " ~ std.conv.to!string(this.entityId) ~ ", distance: " ~ std.conv.to!string(this.distance) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
2411     }
2412 
2413 }
2414 
2415 class HurtArmor : Bedrock282Packet
2416 {
2417 
2418     enum uint ID = 38;
2419 
2420     enum bool CLIENTBOUND = true;
2421     enum bool SERVERBOUND = false;
2422 
2423     enum string[] __fields = ["unknown0"];
2424 
2425     @Var int unknown0;
2426 
2427     this() pure nothrow @safe @nogc {}
2428 
2429     this(int unknown0) pure nothrow @safe @nogc
2430     {
2431         this.unknown0 = unknown0;
2432     }
2433 
2434     mixin Make;
2435 
2436     public static typeof(this) fromBuffer(ubyte[] buffer)
2437     {
2438         HurtArmor ret = new HurtArmor();
2439         ret.decode(buffer);
2440         return ret;
2441     }
2442 
2443     override string toString()
2444     {
2445         return "HurtArmor(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ")";
2446     }
2447 
2448 }
2449 
2450 class SetEntityData : Bedrock282Packet
2451 {
2452 
2453     enum uint ID = 39;
2454 
2455     enum bool CLIENTBOUND = true;
2456     enum bool SERVERBOUND = false;
2457 
2458     enum string[] __fields = ["entityId", "metadata"];
2459 
2460     @Var long entityId;
2461     Metadata metadata;
2462 
2463     this() pure nothrow @safe @nogc {}
2464 
2465     this(long entityId, Metadata metadata=Metadata.init) pure nothrow @safe @nogc
2466     {
2467         this.entityId = entityId;
2468         this.metadata = metadata;
2469     }
2470 
2471     mixin Make;
2472 
2473     public static typeof(this) fromBuffer(ubyte[] buffer)
2474     {
2475         SetEntityData ret = new SetEntityData();
2476         ret.decode(buffer);
2477         return ret;
2478     }
2479 
2480     override string toString()
2481     {
2482         return "SetEntityData(entityId: " ~ std.conv.to!string(this.entityId) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ")";
2483     }
2484 
2485 }
2486 
2487 class SetEntityMotion : Bedrock282Packet
2488 {
2489 
2490     enum uint ID = 40;
2491 
2492     enum bool CLIENTBOUND = true;
2493     enum bool SERVERBOUND = false;
2494 
2495     enum string[] __fields = ["entityId", "motion"];
2496 
2497     @Var long entityId;
2498     Vector!(float, "xyz") motion;
2499 
2500     this() pure nothrow @safe @nogc {}
2501 
2502     this(long entityId, Vector!(float, "xyz") motion=Vector!(float, "xyz").init) pure nothrow @safe @nogc
2503     {
2504         this.entityId = entityId;
2505         this.motion = motion;
2506     }
2507 
2508     mixin Make;
2509 
2510     public static typeof(this) fromBuffer(ubyte[] buffer)
2511     {
2512         SetEntityMotion ret = new SetEntityMotion();
2513         ret.decode(buffer);
2514         return ret;
2515     }
2516 
2517     override string toString()
2518     {
2519         return "SetEntityMotion(entityId: " ~ std.conv.to!string(this.entityId) ~ ", motion: " ~ std.conv.to!string(this.motion) ~ ")";
2520     }
2521 
2522 }
2523 
2524 class SetEntityLink : Bedrock282Packet
2525 {
2526 
2527     enum uint ID = 41;
2528 
2529     enum bool CLIENTBOUND = true;
2530     enum bool SERVERBOUND = false;
2531 
2532     // action
2533     enum ubyte REMOVE = 0;
2534     enum ubyte ADD = 1;
2535 
2536     enum string[] __fields = ["vehicle", "passenger", "action"];
2537 
2538     @Var long vehicle;
2539     @Var long passenger;
2540     ubyte action;
2541 
2542     this() pure nothrow @safe @nogc {}
2543 
2544     this(long vehicle, long passenger=long.init, ubyte action=ubyte.init) pure nothrow @safe @nogc
2545     {
2546         this.vehicle = vehicle;
2547         this.passenger = passenger;
2548         this.action = action;
2549     }
2550 
2551     mixin Make;
2552 
2553     public static typeof(this) fromBuffer(ubyte[] buffer)
2554     {
2555         SetEntityLink ret = new SetEntityLink();
2556         ret.decode(buffer);
2557         return ret;
2558     }
2559 
2560     override string toString()
2561     {
2562         return "SetEntityLink(vehicle: " ~ std.conv.to!string(this.vehicle) ~ ", passenger: " ~ std.conv.to!string(this.passenger) ~ ", action: " ~ std.conv.to!string(this.action) ~ ")";
2563     }
2564 
2565 }
2566 
2567 class SetHealth : Bedrock282Packet
2568 {
2569 
2570     enum uint ID = 42;
2571 
2572     enum bool CLIENTBOUND = true;
2573     enum bool SERVERBOUND = false;
2574 
2575     enum string[] __fields = ["health"];
2576 
2577     @Var int health;
2578 
2579     this() pure nothrow @safe @nogc {}
2580 
2581     this(int health) pure nothrow @safe @nogc
2582     {
2583         this.health = health;
2584     }
2585 
2586     mixin Make;
2587 
2588     public static typeof(this) fromBuffer(ubyte[] buffer)
2589     {
2590         SetHealth ret = new SetHealth();
2591         ret.decode(buffer);
2592         return ret;
2593     }
2594 
2595     override string toString()
2596     {
2597         return "SetHealth(health: " ~ std.conv.to!string(this.health) ~ ")";
2598     }
2599 
2600 }
2601 
2602 class SetSpawnPosition : Bedrock282Packet
2603 {
2604 
2605     enum uint ID = 43;
2606 
2607     enum bool CLIENTBOUND = true;
2608     enum bool SERVERBOUND = false;
2609 
2610     // type
2611     enum int PLAYER_SPAWN = 0;
2612     enum int WORLD_SPAWN = 1;
2613 
2614     enum string[] __fields = ["type", "position", "forced"];
2615 
2616     @Var int type;
2617     soupply.bedrock282.types.BlockPosition position;
2618     bool forced;
2619 
2620     this() pure nothrow @safe @nogc {}
2621 
2622     this(int type, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, bool forced=bool.init) pure nothrow @safe @nogc
2623     {
2624         this.type = type;
2625         this.position = position;
2626         this.forced = forced;
2627     }
2628 
2629     mixin Make;
2630 
2631     public static typeof(this) fromBuffer(ubyte[] buffer)
2632     {
2633         SetSpawnPosition ret = new SetSpawnPosition();
2634         ret.decode(buffer);
2635         return ret;
2636     }
2637 
2638     override string toString()
2639     {
2640         return "SetSpawnPosition(type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", forced: " ~ std.conv.to!string(this.forced) ~ ")";
2641     }
2642 
2643 }
2644 
2645 class Animate : Bedrock282Packet
2646 {
2647 
2648     enum uint ID = 44;
2649 
2650     enum bool CLIENTBOUND = true;
2651     enum bool SERVERBOUND = true;
2652 
2653     // action
2654     enum int BREAKING = 1;
2655     enum int WAKE_UP = 3;
2656 
2657     enum string[] __fields = ["action", "entityId", "unknown2"];
2658 
2659     @Var int action;
2660     @Var long entityId;
2661     @Condition("action>128") float unknown2;
2662 
2663     this() pure nothrow @safe @nogc {}
2664 
2665     this(int action, long entityId=long.init, float unknown2=float.init) pure nothrow @safe @nogc
2666     {
2667         this.action = action;
2668         this.entityId = entityId;
2669         this.unknown2 = unknown2;
2670     }
2671 
2672     mixin Make;
2673 
2674     public static typeof(this) fromBuffer(ubyte[] buffer)
2675     {
2676         Animate ret = new Animate();
2677         ret.decode(buffer);
2678         return ret;
2679     }
2680 
2681     override string toString()
2682     {
2683         return "Animate(action: " ~ std.conv.to!string(this.action) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
2684     }
2685 
2686 }
2687 
2688 class Respawn : Bedrock282Packet
2689 {
2690 
2691     enum uint ID = 45;
2692 
2693     enum bool CLIENTBOUND = true;
2694     enum bool SERVERBOUND = false;
2695 
2696     enum string[] __fields = ["position"];
2697 
2698     Vector!(float, "xyz") position;
2699 
2700     this() pure nothrow @safe @nogc {}
2701 
2702     this(Vector!(float, "xyz") position) pure nothrow @safe @nogc
2703     {
2704         this.position = position;
2705     }
2706 
2707     mixin Make;
2708 
2709     public static typeof(this) fromBuffer(ubyte[] buffer)
2710     {
2711         Respawn ret = new Respawn();
2712         ret.decode(buffer);
2713         return ret;
2714     }
2715 
2716     override string toString()
2717     {
2718         return "Respawn(position: " ~ std.conv.to!string(this.position) ~ ")";
2719     }
2720 
2721 }
2722 
2723 class ContainerOpen : Bedrock282Packet
2724 {
2725 
2726     enum uint ID = 46;
2727 
2728     enum bool CLIENTBOUND = true;
2729     enum bool SERVERBOUND = false;
2730 
2731     enum string[] __fields = ["window", "type", "position", "entityId"];
2732 
2733     ubyte window;
2734     ubyte type;
2735     soupply.bedrock282.types.BlockPosition position;
2736     @Var long entityId;
2737 
2738     this() pure nothrow @safe @nogc {}
2739 
2740     this(ubyte window, ubyte type=ubyte.init, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, long entityId=long.init) pure nothrow @safe @nogc
2741     {
2742         this.window = window;
2743         this.type = type;
2744         this.position = position;
2745         this.entityId = entityId;
2746     }
2747 
2748     mixin Make;
2749 
2750     public static typeof(this) fromBuffer(ubyte[] buffer)
2751     {
2752         ContainerOpen ret = new ContainerOpen();
2753         ret.decode(buffer);
2754         return ret;
2755     }
2756 
2757     override string toString()
2758     {
2759         return "ContainerOpen(window: " ~ std.conv.to!string(this.window) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
2760     }
2761 
2762 }
2763 
2764 class ContainerClose : Bedrock282Packet
2765 {
2766 
2767     enum uint ID = 47;
2768 
2769     enum bool CLIENTBOUND = true;
2770     enum bool SERVERBOUND = true;
2771 
2772     enum string[] __fields = ["window"];
2773 
2774     ubyte window;
2775 
2776     this() pure nothrow @safe @nogc {}
2777 
2778     this(ubyte window) pure nothrow @safe @nogc
2779     {
2780         this.window = window;
2781     }
2782 
2783     mixin Make;
2784 
2785     public static typeof(this) fromBuffer(ubyte[] buffer)
2786     {
2787         ContainerClose ret = new ContainerClose();
2788         ret.decode(buffer);
2789         return ret;
2790     }
2791 
2792     override string toString()
2793     {
2794         return "ContainerClose(window: " ~ std.conv.to!string(this.window) ~ ")";
2795     }
2796 
2797 }
2798 
2799 class PlayerHotbar : Bedrock282Packet
2800 {
2801 
2802     enum uint ID = 48;
2803 
2804     enum bool CLIENTBOUND = false;
2805     enum bool SERVERBOUND = false;
2806 
2807     enum string[] __fields = [];
2808 
2809     mixin Make;
2810 
2811     public static typeof(this) fromBuffer(ubyte[] buffer)
2812     {
2813         PlayerHotbar ret = new PlayerHotbar();
2814         ret.decode(buffer);
2815         return ret;
2816     }
2817 
2818     override string toString()
2819     {
2820         return "PlayerHotbar()";
2821     }
2822 
2823 }
2824 
2825 class InventoryContent : Bedrock282Packet
2826 {
2827 
2828     enum uint ID = 49;
2829 
2830     enum bool CLIENTBOUND = true;
2831     enum bool SERVERBOUND = false;
2832 
2833     enum string[] __fields = ["window", "slots"];
2834 
2835     @Var uint window;
2836     soupply.bedrock282.types.Slot[] slots;
2837 
2838     this() pure nothrow @safe @nogc {}
2839 
2840     this(uint window, soupply.bedrock282.types.Slot[] slots=(soupply.bedrock282.types.Slot[]).init) pure nothrow @safe @nogc
2841     {
2842         this.window = window;
2843         this.slots = slots;
2844     }
2845 
2846     mixin Make;
2847 
2848     public static typeof(this) fromBuffer(ubyte[] buffer)
2849     {
2850         InventoryContent ret = new InventoryContent();
2851         ret.decode(buffer);
2852         return ret;
2853     }
2854 
2855     override string toString()
2856     {
2857         return "InventoryContent(window: " ~ std.conv.to!string(this.window) ~ ", slots: " ~ std.conv.to!string(this.slots) ~ ")";
2858     }
2859 
2860 }
2861 
2862 class InventorySlot : Bedrock282Packet
2863 {
2864 
2865     enum uint ID = 50;
2866 
2867     enum bool CLIENTBOUND = true;
2868     enum bool SERVERBOUND = false;
2869 
2870     enum string[] __fields = [];
2871 
2872     mixin Make;
2873 
2874     public static typeof(this) fromBuffer(ubyte[] buffer)
2875     {
2876         InventorySlot ret = new InventorySlot();
2877         ret.decode(buffer);
2878         return ret;
2879     }
2880 
2881     override string toString()
2882     {
2883         return "InventorySlot()";
2884     }
2885 
2886 }
2887 
2888 class ContainerSetData : Bedrock282Packet
2889 {
2890 
2891     enum uint ID = 51;
2892 
2893     enum bool CLIENTBOUND = true;
2894     enum bool SERVERBOUND = false;
2895 
2896     enum string[] __fields = ["window", "property", "value"];
2897 
2898     ubyte window;
2899     @Var int property;
2900     @Var int value;
2901 
2902     this() pure nothrow @safe @nogc {}
2903 
2904     this(ubyte window, int property=int.init, int value=int.init) pure nothrow @safe @nogc
2905     {
2906         this.window = window;
2907         this.property = property;
2908         this.value = value;
2909     }
2910 
2911     mixin Make;
2912 
2913     public static typeof(this) fromBuffer(ubyte[] buffer)
2914     {
2915         ContainerSetData ret = new ContainerSetData();
2916         ret.decode(buffer);
2917         return ret;
2918     }
2919 
2920     override string toString()
2921     {
2922         return "ContainerSetData(window: " ~ std.conv.to!string(this.window) ~ ", property: " ~ std.conv.to!string(this.property) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
2923     }
2924 
2925 }
2926 
2927 class CraftingData : Bedrock282Packet
2928 {
2929 
2930     enum uint ID = 52;
2931 
2932     enum bool CLIENTBOUND = true;
2933     enum bool SERVERBOUND = false;
2934 
2935     enum string[] __fields = ["recipes"];
2936 
2937     soupply.bedrock282.types.Recipe[] recipes;
2938 
2939     this() pure nothrow @safe @nogc {}
2940 
2941     this(soupply.bedrock282.types.Recipe[] recipes) pure nothrow @safe @nogc
2942     {
2943         this.recipes = recipes;
2944     }
2945 
2946     mixin Make;
2947 
2948     public static typeof(this) fromBuffer(ubyte[] buffer)
2949     {
2950         CraftingData ret = new CraftingData();
2951         ret.decode(buffer);
2952         return ret;
2953     }
2954 
2955     override string toString()
2956     {
2957         return "CraftingData(recipes: " ~ std.conv.to!string(this.recipes) ~ ")";
2958     }
2959 
2960 }
2961 
2962 class CraftingEvent : Bedrock282Packet
2963 {
2964 
2965     enum uint ID = 53;
2966 
2967     enum bool CLIENTBOUND = false;
2968     enum bool SERVERBOUND = true;
2969 
2970     enum string[] __fields = ["window", "type", "uuid", "input", "output"];
2971 
2972     ubyte window;
2973     @Var int type;
2974     soupply.bedrock282.types.McpeUuid uuid;
2975     soupply.bedrock282.types.Slot[] input;
2976     soupply.bedrock282.types.Slot[] output;
2977 
2978     this() pure nothrow @safe @nogc {}
2979 
2980     this(ubyte window, int type=int.init, soupply.bedrock282.types.McpeUuid uuid=soupply.bedrock282.types.McpeUuid.init, soupply.bedrock282.types.Slot[] input=(soupply.bedrock282.types.Slot[]).init, soupply.bedrock282.types.Slot[] output=(soupply.bedrock282.types.Slot[]).init) pure nothrow @safe @nogc
2981     {
2982         this.window = window;
2983         this.type = type;
2984         this.uuid = uuid;
2985         this.input = input;
2986         this.output = output;
2987     }
2988 
2989     mixin Make;
2990 
2991     public static typeof(this) fromBuffer(ubyte[] buffer)
2992     {
2993         CraftingEvent ret = new CraftingEvent();
2994         ret.decode(buffer);
2995         return ret;
2996     }
2997 
2998     override string toString()
2999     {
3000         return "CraftingEvent(window: " ~ std.conv.to!string(this.window) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", input: " ~ std.conv.to!string(this.input) ~ ", output: " ~ std.conv.to!string(this.output) ~ ")";
3001     }
3002 
3003 }
3004 
3005 class GuiDataPickItem : Bedrock282Packet
3006 {
3007 
3008     enum uint ID = 54;
3009 
3010     enum bool CLIENTBOUND = false;
3011     enum bool SERVERBOUND = true;
3012 
3013     enum string[] __fields = ["slot"];
3014 
3015     @LittleEndian uint slot;
3016 
3017     this() pure nothrow @safe @nogc {}
3018 
3019     this(uint slot) pure nothrow @safe @nogc
3020     {
3021         this.slot = slot;
3022     }
3023 
3024     mixin Make;
3025 
3026     public static typeof(this) fromBuffer(ubyte[] buffer)
3027     {
3028         GuiDataPickItem ret = new GuiDataPickItem();
3029         ret.decode(buffer);
3030         return ret;
3031     }
3032 
3033     override string toString()
3034     {
3035         return "GuiDataPickItem(slot: " ~ std.conv.to!string(this.slot) ~ ")";
3036     }
3037 
3038 }
3039 
3040 class AdventureSettings : Bedrock282Packet
3041 {
3042 
3043     enum uint ID = 55;
3044 
3045     enum bool CLIENTBOUND = true;
3046     enum bool SERVERBOUND = true;
3047 
3048     // flags
3049     enum uint IMMUTABLE_WORLD = 1;
3050     enum uint PVP_DISABLED = 2;
3051     enum uint PVM_DISABLED = 4;
3052     enum uint MVP_DISBALED = 8;
3053     enum uint EVP_DISABLED = 16;
3054     enum uint AUTO_JUMP = 32;
3055     enum uint ALLOW_FLIGHT = 64;
3056     enum uint NO_CLIP = 128;
3057     enum uint FLYING = 512;
3058     enum uint MUTED = 1024;
3059 
3060     // permission level
3061     enum uint LEVEL_USER = 0;
3062     enum uint LEVEL_OPERATOR = 1;
3063     enum uint LEVEL_HOST = 2;
3064     enum uint LEVEL_AUTOMATION = 3;
3065     enum uint LEVEL_ADMIN = 4;
3066 
3067     // abilities
3068     enum uint BUILD_AND_MINE = 1;
3069     enum uint DOORS_AND_SWITCHES = 2;
3070     enum uint OPEN_CONTAINERS = 4;
3071     enum uint ATTACK_PLAYERS = 8;
3072     enum uint ATTACK_MOBS = 16;
3073     enum uint OP = 32;
3074     enum uint TELEPORT = 64;
3075 
3076     // player rank
3077     enum uint VISITOR = 0;
3078     enum uint MEMBER = 1;
3079     enum uint OPERATOR = 2;
3080     enum uint CUSTOM = 3;
3081 
3082     enum string[] __fields = ["flags", "permissionLevel", "abilities", "playerRank", "customPermissions", "entityId"];
3083 
3084     @Var uint flags;
3085     @Var uint permissionLevel;
3086     @Var uint abilities;
3087     @Var uint playerRank;
3088     @Var uint customPermissions;
3089     long entityId;
3090 
3091     this() pure nothrow @safe @nogc {}
3092 
3093     this(uint flags, uint permissionLevel=uint.init, uint abilities=uint.init, uint playerRank=uint.init, uint customPermissions=uint.init, long entityId=long.init) pure nothrow @safe @nogc
3094     {
3095         this.flags = flags;
3096         this.permissionLevel = permissionLevel;
3097         this.abilities = abilities;
3098         this.playerRank = playerRank;
3099         this.customPermissions = customPermissions;
3100         this.entityId = entityId;
3101     }
3102 
3103     mixin Make;
3104 
3105     public static typeof(this) fromBuffer(ubyte[] buffer)
3106     {
3107         AdventureSettings ret = new AdventureSettings();
3108         ret.decode(buffer);
3109         return ret;
3110     }
3111 
3112     override string toString()
3113     {
3114         return "AdventureSettings(flags: " ~ std.conv.to!string(this.flags) ~ ", permissionLevel: " ~ std.conv.to!string(this.permissionLevel) ~ ", abilities: " ~ std.conv.to!string(this.abilities) ~ ", playerRank: " ~ std.conv.to!string(this.playerRank) ~ ", customPermissions: " ~ std.conv.to!string(this.customPermissions) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
3115     }
3116 
3117 }
3118 
3119 class BlockEntityData : Bedrock282Packet
3120 {
3121 
3122     enum uint ID = 56;
3123 
3124     enum bool CLIENTBOUND = true;
3125     enum bool SERVERBOUND = true;
3126 
3127     enum string[] __fields = ["position", "nbt"];
3128 
3129     soupply.bedrock282.types.BlockPosition position;
3130     @NoLength ubyte[] nbt;
3131 
3132     this() pure nothrow @safe @nogc {}
3133 
3134     this(soupply.bedrock282.types.BlockPosition position, ubyte[] nbt=(ubyte[]).init) pure nothrow @safe @nogc
3135     {
3136         this.position = position;
3137         this.nbt = nbt;
3138     }
3139 
3140     mixin Make;
3141 
3142     public static typeof(this) fromBuffer(ubyte[] buffer)
3143     {
3144         BlockEntityData ret = new BlockEntityData();
3145         ret.decode(buffer);
3146         return ret;
3147     }
3148 
3149     override string toString()
3150     {
3151         return "BlockEntityData(position: " ~ std.conv.to!string(this.position) ~ ", nbt: " ~ std.conv.to!string(this.nbt) ~ ")";
3152     }
3153 
3154 }
3155 
3156 class PlayerInput : Bedrock282Packet
3157 {
3158 
3159     enum uint ID = 57;
3160 
3161     enum bool CLIENTBOUND = false;
3162     enum bool SERVERBOUND = true;
3163 
3164     enum string[] __fields = ["sideways", "forward", "unknown2", "unknown3"];
3165 
3166     float sideways;
3167     float forward;
3168     bool unknown2;
3169     bool unknown3;
3170 
3171     this() pure nothrow @safe @nogc {}
3172 
3173     this(float sideways, float forward=float.init, bool unknown2=bool.init, bool unknown3=bool.init) pure nothrow @safe @nogc
3174     {
3175         this.sideways = sideways;
3176         this.forward = forward;
3177         this.unknown2 = unknown2;
3178         this.unknown3 = unknown3;
3179     }
3180 
3181     mixin Make;
3182 
3183     public static typeof(this) fromBuffer(ubyte[] buffer)
3184     {
3185         PlayerInput ret = new PlayerInput();
3186         ret.decode(buffer);
3187         return ret;
3188     }
3189 
3190     override string toString()
3191     {
3192         return "PlayerInput(sideways: " ~ std.conv.to!string(this.sideways) ~ ", forward: " ~ std.conv.to!string(this.forward) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ")";
3193     }
3194 
3195 }
3196 
3197 class FullChunkData : Bedrock282Packet
3198 {
3199 
3200     enum uint ID = 58;
3201 
3202     enum bool CLIENTBOUND = true;
3203     enum bool SERVERBOUND = false;
3204 
3205     enum string[] __fields = ["position", "data"];
3206 
3207     @Var Vector!(int, "xz") position;
3208     soupply.bedrock282.types.ChunkData data;
3209 
3210     this() pure nothrow @safe @nogc {}
3211 
3212     this(Vector!(int, "xz") position, soupply.bedrock282.types.ChunkData data=soupply.bedrock282.types.ChunkData.init) pure nothrow @safe @nogc
3213     {
3214         this.position = position;
3215         this.data = data;
3216     }
3217 
3218     mixin Make;
3219 
3220     public static typeof(this) fromBuffer(ubyte[] buffer)
3221     {
3222         FullChunkData ret = new FullChunkData();
3223         ret.decode(buffer);
3224         return ret;
3225     }
3226 
3227     override string toString()
3228     {
3229         return "FullChunkData(position: " ~ std.conv.to!string(this.position) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
3230     }
3231 
3232 }
3233 
3234 class SetCommandsEnabled : Bedrock282Packet
3235 {
3236 
3237     enum uint ID = 59;
3238 
3239     enum bool CLIENTBOUND = true;
3240     enum bool SERVERBOUND = false;
3241 
3242     enum string[] __fields = ["enabled"];
3243 
3244     bool enabled;
3245 
3246     this() pure nothrow @safe @nogc {}
3247 
3248     this(bool enabled) pure nothrow @safe @nogc
3249     {
3250         this.enabled = enabled;
3251     }
3252 
3253     mixin Make;
3254 
3255     public static typeof(this) fromBuffer(ubyte[] buffer)
3256     {
3257         SetCommandsEnabled ret = new SetCommandsEnabled();
3258         ret.decode(buffer);
3259         return ret;
3260     }
3261 
3262     override string toString()
3263     {
3264         return "SetCommandsEnabled(enabled: " ~ std.conv.to!string(this.enabled) ~ ")";
3265     }
3266 
3267 }
3268 
3269 class SetDifficulty : Bedrock282Packet
3270 {
3271 
3272     enum uint ID = 60;
3273 
3274     enum bool CLIENTBOUND = true;
3275     enum bool SERVERBOUND = false;
3276 
3277     // difficulty
3278     enum uint PEACEFUL = 0;
3279     enum uint EASY = 1;
3280     enum uint NORMAL = 2;
3281     enum uint HARD = 3;
3282 
3283     enum string[] __fields = ["difficulty"];
3284 
3285     @Var uint difficulty;
3286 
3287     this() pure nothrow @safe @nogc {}
3288 
3289     this(uint difficulty) pure nothrow @safe @nogc
3290     {
3291         this.difficulty = difficulty;
3292     }
3293 
3294     mixin Make;
3295 
3296     public static typeof(this) fromBuffer(ubyte[] buffer)
3297     {
3298         SetDifficulty ret = new SetDifficulty();
3299         ret.decode(buffer);
3300         return ret;
3301     }
3302 
3303     override string toString()
3304     {
3305         return "SetDifficulty(difficulty: " ~ std.conv.to!string(this.difficulty) ~ ")";
3306     }
3307 
3308 }
3309 
3310 class ChangeDimension : Bedrock282Packet
3311 {
3312 
3313     enum uint ID = 61;
3314 
3315     enum bool CLIENTBOUND = true;
3316     enum bool SERVERBOUND = false;
3317 
3318     // dimension
3319     enum int OVERWORLD = 0;
3320     enum int NETHER = 1;
3321     enum int END = 2;
3322 
3323     enum string[] __fields = ["dimension", "position", "unknown2"];
3324 
3325     @Var int dimension;
3326     Vector!(float, "xyz") position;
3327     bool unknown2;
3328 
3329     this() pure nothrow @safe @nogc {}
3330 
3331     this(int dimension, Vector!(float, "xyz") position=Vector!(float, "xyz").init, bool unknown2=bool.init) pure nothrow @safe @nogc
3332     {
3333         this.dimension = dimension;
3334         this.position = position;
3335         this.unknown2 = unknown2;
3336     }
3337 
3338     mixin Make;
3339 
3340     public static typeof(this) fromBuffer(ubyte[] buffer)
3341     {
3342         ChangeDimension ret = new ChangeDimension();
3343         ret.decode(buffer);
3344         return ret;
3345     }
3346 
3347     override string toString()
3348     {
3349         return "ChangeDimension(dimension: " ~ std.conv.to!string(this.dimension) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
3350     }
3351 
3352 }
3353 
3354 class SetPlayerGameType : Bedrock282Packet
3355 {
3356 
3357     enum uint ID = 62;
3358 
3359     enum bool CLIENTBOUND = true;
3360     enum bool SERVERBOUND = true;
3361 
3362     // gamemode
3363     enum int SURVIVAL = 0;
3364     enum int CREATIVE = 1;
3365     enum int ADVENTURE = 2;
3366 
3367     enum string[] __fields = ["gamemode"];
3368 
3369     @Var int gamemode;
3370 
3371     this() pure nothrow @safe @nogc {}
3372 
3373     this(int gamemode) pure nothrow @safe @nogc
3374     {
3375         this.gamemode = gamemode;
3376     }
3377 
3378     mixin Make;
3379 
3380     public static typeof(this) fromBuffer(ubyte[] buffer)
3381     {
3382         SetPlayerGameType ret = new SetPlayerGameType();
3383         ret.decode(buffer);
3384         return ret;
3385     }
3386 
3387     override string toString()
3388     {
3389         return "SetPlayerGameType(gamemode: " ~ std.conv.to!string(this.gamemode) ~ ")";
3390     }
3391 
3392 }
3393 
3394 class PlayerList : Bedrock282Packet
3395 {
3396 
3397     enum uint ID = 63;
3398 
3399     enum bool CLIENTBOUND = true;
3400     enum bool SERVERBOUND = false;
3401 
3402     enum string[] __fields = ["action"];
3403 
3404     ubyte action;
3405 
3406     this() pure nothrow @safe @nogc {}
3407 
3408     this(ubyte action) pure nothrow @safe @nogc
3409     {
3410         this.action = action;
3411     }
3412 
3413     mixin Make;
3414 
3415     public static typeof(this) fromBuffer(ubyte[] buffer)
3416     {
3417         PlayerList ret = new PlayerList();
3418         ret.decode(buffer);
3419         return ret;
3420     }
3421 
3422     override string toString()
3423     {
3424         return "PlayerList(action: " ~ std.conv.to!string(this.action) ~ ")";
3425     }
3426 
3427     enum string variantField = "action";
3428 
3429     alias Variants = TypeTuple!(Add, Remove);
3430 
3431     class Add : Bedrock282Packet
3432     {
3433 
3434         enum typeof(action) ACTION = 0;
3435 
3436         enum string[] __fields = ["players"];
3437 
3438         soupply.bedrock282.types.PlayerList[] players;
3439 
3440         this() pure nothrow @safe @nogc {}
3441 
3442         this(soupply.bedrock282.types.PlayerList[] players) pure nothrow @safe @nogc
3443         {
3444             this.players = players;
3445         }
3446 
3447         mixin Make;
3448 
3449         override string toString()
3450         {
3451             return "PlayerList.Add(players: " ~ std.conv.to!string(this.players) ~ ")";
3452         }
3453 
3454     }
3455 
3456     class Remove : Bedrock282Packet
3457     {
3458 
3459         enum typeof(action) ACTION = 1;
3460 
3461         enum string[] __fields = ["players"];
3462 
3463         soupply.bedrock282.types.McpeUuid[] players;
3464 
3465         this() pure nothrow @safe @nogc {}
3466 
3467         this(soupply.bedrock282.types.McpeUuid[] players) pure nothrow @safe @nogc
3468         {
3469             this.players = players;
3470         }
3471 
3472         mixin Make;
3473 
3474         override string toString()
3475         {
3476             return "PlayerList.Remove(players: " ~ std.conv.to!string(this.players) ~ ")";
3477         }
3478 
3479     }
3480 
3481 }
3482 
3483 class SimpleEvent : Bedrock282Packet
3484 {
3485 
3486     enum uint ID = 64;
3487 
3488     enum bool CLIENTBOUND = true;
3489     enum bool SERVERBOUND = true;
3490 
3491     enum string[] __fields = [];
3492 
3493     mixin Make;
3494 
3495     public static typeof(this) fromBuffer(ubyte[] buffer)
3496     {
3497         SimpleEvent ret = new SimpleEvent();
3498         ret.decode(buffer);
3499         return ret;
3500     }
3501 
3502     override string toString()
3503     {
3504         return "SimpleEvent()";
3505     }
3506 
3507 }
3508 
3509 class Event : Bedrock282Packet
3510 {
3511 
3512     enum uint ID = 65;
3513 
3514     enum bool CLIENTBOUND = true;
3515     enum bool SERVERBOUND = false;
3516 
3517     enum string[] __fields = ["entityId", "eventId"];
3518 
3519     @Var long entityId;
3520     @Var int eventId;
3521 
3522     this() pure nothrow @safe @nogc {}
3523 
3524     this(long entityId, int eventId=int.init) pure nothrow @safe @nogc
3525     {
3526         this.entityId = entityId;
3527         this.eventId = eventId;
3528     }
3529 
3530     mixin Make;
3531 
3532     public static typeof(this) fromBuffer(ubyte[] buffer)
3533     {
3534         Event ret = new Event();
3535         ret.decode(buffer);
3536         return ret;
3537     }
3538 
3539     override string toString()
3540     {
3541         return "Event(entityId: " ~ std.conv.to!string(this.entityId) ~ ", eventId: " ~ std.conv.to!string(this.eventId) ~ ")";
3542     }
3543 
3544 }
3545 
3546 class SpawnExperienceOrb : Bedrock282Packet
3547 {
3548 
3549     enum uint ID = 66;
3550 
3551     enum bool CLIENTBOUND = true;
3552     enum bool SERVERBOUND = false;
3553 
3554     enum string[] __fields = ["position", "count"];
3555 
3556     Vector!(float, "xyz") position;
3557     @Var int count;
3558 
3559     this() pure nothrow @safe @nogc {}
3560 
3561     this(Vector!(float, "xyz") position, int count=int.init) pure nothrow @safe @nogc
3562     {
3563         this.position = position;
3564         this.count = count;
3565     }
3566 
3567     mixin Make;
3568 
3569     public static typeof(this) fromBuffer(ubyte[] buffer)
3570     {
3571         SpawnExperienceOrb ret = new SpawnExperienceOrb();
3572         ret.decode(buffer);
3573         return ret;
3574     }
3575 
3576     override string toString()
3577     {
3578         return "SpawnExperienceOrb(position: " ~ std.conv.to!string(this.position) ~ ", count: " ~ std.conv.to!string(this.count) ~ ")";
3579     }
3580 
3581 }
3582 
3583 class ClientboundMapItemData : Bedrock282Packet
3584 {
3585 
3586     enum uint ID = 67;
3587 
3588     enum bool CLIENTBOUND = true;
3589     enum bool SERVERBOUND = false;
3590 
3591     // update
3592     enum uint TEXTURE = 2;
3593     enum uint DECORATIONS = 4;
3594     enum uint ENTITIES = 8;
3595 
3596     enum string[] __fields = ["mapId", "update", "scale", "size", "offset", "data", "decorations"];
3597 
3598     @Var long mapId;
3599     @Var uint update;
3600     @Condition("update==2||update==4") ubyte scale;
3601     @Condition("update==2") @Var Vector!(int, "xz") size;
3602     @Condition("update==2") @Var Vector!(int, "xz") offset;
3603     @Condition("update==2") @NoLength ubyte[] data;
3604     @Condition("update==4") soupply.bedrock282.types.Decoration[] decorations;
3605 
3606     this() pure nothrow @safe @nogc {}
3607 
3608     this(long mapId, uint update=uint.init, ubyte scale=ubyte.init, Vector!(int, "xz") size=Vector!(int, "xz").init, Vector!(int, "xz") offset=Vector!(int, "xz").init, ubyte[] data=(ubyte[]).init, soupply.bedrock282.types.Decoration[] decorations=(soupply.bedrock282.types.Decoration[]).init) pure nothrow @safe @nogc
3609     {
3610         this.mapId = mapId;
3611         this.update = update;
3612         this.scale = scale;
3613         this.size = size;
3614         this.offset = offset;
3615         this.data = data;
3616         this.decorations = decorations;
3617     }
3618 
3619     mixin Make;
3620 
3621     public static typeof(this) fromBuffer(ubyte[] buffer)
3622     {
3623         ClientboundMapItemData ret = new ClientboundMapItemData();
3624         ret.decode(buffer);
3625         return ret;
3626     }
3627 
3628     override string toString()
3629     {
3630         return "ClientboundMapItemData(mapId: " ~ std.conv.to!string(this.mapId) ~ ", update: " ~ std.conv.to!string(this.update) ~ ", scale: " ~ std.conv.to!string(this.scale) ~ ", size: " ~ std.conv.to!string(this.size) ~ ", offset: " ~ std.conv.to!string(this.offset) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", decorations: " ~ std.conv.to!string(this.decorations) ~ ")";
3631     }
3632 
3633 }
3634 
3635 class MapInfoRequest : Bedrock282Packet
3636 {
3637 
3638     enum uint ID = 68;
3639 
3640     enum bool CLIENTBOUND = false;
3641     enum bool SERVERBOUND = true;
3642 
3643     enum string[] __fields = ["mapId"];
3644 
3645     @Var long mapId;
3646 
3647     this() pure nothrow @safe @nogc {}
3648 
3649     this(long mapId) pure nothrow @safe @nogc
3650     {
3651         this.mapId = mapId;
3652     }
3653 
3654     mixin Make;
3655 
3656     public static typeof(this) fromBuffer(ubyte[] buffer)
3657     {
3658         MapInfoRequest ret = new MapInfoRequest();
3659         ret.decode(buffer);
3660         return ret;
3661     }
3662 
3663     override string toString()
3664     {
3665         return "MapInfoRequest(mapId: " ~ std.conv.to!string(this.mapId) ~ ")";
3666     }
3667 
3668 }
3669 
3670 class RequestChunkRadius : Bedrock282Packet
3671 {
3672 
3673     enum uint ID = 69;
3674 
3675     enum bool CLIENTBOUND = false;
3676     enum bool SERVERBOUND = true;
3677 
3678     enum string[] __fields = ["radius"];
3679 
3680     @Var int radius;
3681 
3682     this() pure nothrow @safe @nogc {}
3683 
3684     this(int radius) pure nothrow @safe @nogc
3685     {
3686         this.radius = radius;
3687     }
3688 
3689     mixin Make;
3690 
3691     public static typeof(this) fromBuffer(ubyte[] buffer)
3692     {
3693         RequestChunkRadius ret = new RequestChunkRadius();
3694         ret.decode(buffer);
3695         return ret;
3696     }
3697 
3698     override string toString()
3699     {
3700         return "RequestChunkRadius(radius: " ~ std.conv.to!string(this.radius) ~ ")";
3701     }
3702 
3703 }
3704 
3705 class ChunkRadiusUpdated : Bedrock282Packet
3706 {
3707 
3708     enum uint ID = 70;
3709 
3710     enum bool CLIENTBOUND = true;
3711     enum bool SERVERBOUND = false;
3712 
3713     enum string[] __fields = ["radius"];
3714 
3715     @Var int radius;
3716 
3717     this() pure nothrow @safe @nogc {}
3718 
3719     this(int radius) pure nothrow @safe @nogc
3720     {
3721         this.radius = radius;
3722     }
3723 
3724     mixin Make;
3725 
3726     public static typeof(this) fromBuffer(ubyte[] buffer)
3727     {
3728         ChunkRadiusUpdated ret = new ChunkRadiusUpdated();
3729         ret.decode(buffer);
3730         return ret;
3731     }
3732 
3733     override string toString()
3734     {
3735         return "ChunkRadiusUpdated(radius: " ~ std.conv.to!string(this.radius) ~ ")";
3736     }
3737 
3738 }
3739 
3740 class ItemFrameDropItem : Bedrock282Packet
3741 {
3742 
3743     enum uint ID = 71;
3744 
3745     enum bool CLIENTBOUND = true;
3746     enum bool SERVERBOUND = false;
3747 
3748     enum string[] __fields = ["position", "item"];
3749 
3750     soupply.bedrock282.types.BlockPosition position;
3751     soupply.bedrock282.types.Slot item;
3752 
3753     this() pure nothrow @safe @nogc {}
3754 
3755     this(soupply.bedrock282.types.BlockPosition position, soupply.bedrock282.types.Slot item=soupply.bedrock282.types.Slot.init) pure nothrow @safe @nogc
3756     {
3757         this.position = position;
3758         this.item = item;
3759     }
3760 
3761     mixin Make;
3762 
3763     public static typeof(this) fromBuffer(ubyte[] buffer)
3764     {
3765         ItemFrameDropItem ret = new ItemFrameDropItem();
3766         ret.decode(buffer);
3767         return ret;
3768     }
3769 
3770     override string toString()
3771     {
3772         return "ItemFrameDropItem(position: " ~ std.conv.to!string(this.position) ~ ", item: " ~ std.conv.to!string(this.item) ~ ")";
3773     }
3774 
3775 }
3776 
3777 class GameRulesChanged : Bedrock282Packet
3778 {
3779 
3780     enum uint ID = 72;
3781 
3782     enum bool CLIENTBOUND = true;
3783     enum bool SERVERBOUND = false;
3784 
3785     enum string[] __fields = ["rules"];
3786 
3787     soupply.bedrock282.types.Rule[] rules;
3788 
3789     this() pure nothrow @safe @nogc {}
3790 
3791     this(soupply.bedrock282.types.Rule[] rules) pure nothrow @safe @nogc
3792     {
3793         this.rules = rules;
3794     }
3795 
3796     mixin Make;
3797 
3798     public static typeof(this) fromBuffer(ubyte[] buffer)
3799     {
3800         GameRulesChanged ret = new GameRulesChanged();
3801         ret.decode(buffer);
3802         return ret;
3803     }
3804 
3805     override string toString()
3806     {
3807         return "GameRulesChanged(rules: " ~ std.conv.to!string(this.rules) ~ ")";
3808     }
3809 
3810 }
3811 
3812 class Camera : Bedrock282Packet
3813 {
3814 
3815     enum uint ID = 73;
3816 
3817     enum bool CLIENTBOUND = true;
3818     enum bool SERVERBOUND = false;
3819 
3820     enum string[] __fields = ["unknown0", "unknown1"];
3821 
3822     @Var long unknown0;
3823     @Var long unknown1;
3824 
3825     this() pure nothrow @safe @nogc {}
3826 
3827     this(long unknown0, long unknown1=long.init) pure nothrow @safe @nogc
3828     {
3829         this.unknown0 = unknown0;
3830         this.unknown1 = unknown1;
3831     }
3832 
3833     mixin Make;
3834 
3835     public static typeof(this) fromBuffer(ubyte[] buffer)
3836     {
3837         Camera ret = new Camera();
3838         ret.decode(buffer);
3839         return ret;
3840     }
3841 
3842     override string toString()
3843     {
3844         return "Camera(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ")";
3845     }
3846 
3847 }
3848 
3849 class BossEvent : Bedrock282Packet
3850 {
3851 
3852     enum uint ID = 74;
3853 
3854     enum bool CLIENTBOUND = true;
3855     enum bool SERVERBOUND = false;
3856 
3857     // event id
3858     enum uint ADD = 0;
3859     enum uint UPDATE = 1;
3860     enum uint REMOVE = 2;
3861 
3862     enum string[] __fields = ["entityId", "eventId"];
3863 
3864     @Var long entityId;
3865     @Var uint eventId;
3866 
3867     this() pure nothrow @safe @nogc {}
3868 
3869     this(long entityId, uint eventId=uint.init) pure nothrow @safe @nogc
3870     {
3871         this.entityId = entityId;
3872         this.eventId = eventId;
3873     }
3874 
3875     mixin Make;
3876 
3877     public static typeof(this) fromBuffer(ubyte[] buffer)
3878     {
3879         BossEvent ret = new BossEvent();
3880         ret.decode(buffer);
3881         return ret;
3882     }
3883 
3884     override string toString()
3885     {
3886         return "BossEvent(entityId: " ~ std.conv.to!string(this.entityId) ~ ", eventId: " ~ std.conv.to!string(this.eventId) ~ ")";
3887     }
3888 
3889 }
3890 
3891 class ShowCredits : Bedrock282Packet
3892 {
3893 
3894     enum uint ID = 75;
3895 
3896     enum bool CLIENTBOUND = true;
3897     enum bool SERVERBOUND = true;
3898 
3899     // status
3900     enum int START = 0;
3901     enum int END = 1;
3902 
3903     enum string[] __fields = ["entityId", "status"];
3904 
3905     @Var long entityId;
3906     @Var int status;
3907 
3908     this() pure nothrow @safe @nogc {}
3909 
3910     this(long entityId, int status=int.init) pure nothrow @safe @nogc
3911     {
3912         this.entityId = entityId;
3913         this.status = status;
3914     }
3915 
3916     mixin Make;
3917 
3918     public static typeof(this) fromBuffer(ubyte[] buffer)
3919     {
3920         ShowCredits ret = new ShowCredits();
3921         ret.decode(buffer);
3922         return ret;
3923     }
3924 
3925     override string toString()
3926     {
3927         return "ShowCredits(entityId: " ~ std.conv.to!string(this.entityId) ~ ", status: " ~ std.conv.to!string(this.status) ~ ")";
3928     }
3929 
3930 }
3931 
3932 class AvailableCommands : Bedrock282Packet
3933 {
3934 
3935     enum uint ID = 76;
3936 
3937     enum bool CLIENTBOUND = true;
3938     enum bool SERVERBOUND = false;
3939 
3940     enum string[] __fields = ["enumValues", "unknown1", "enums", "commands"];
3941 
3942     string[] enumValues;
3943     string[] unknown1;
3944     soupply.bedrock282.types.Enum[] enums;
3945     soupply.bedrock282.types.Command[] commands;
3946 
3947     this() pure nothrow @safe @nogc {}
3948 
3949     this(string[] enumValues, string[] unknown1=(string[]).init, soupply.bedrock282.types.Enum[] enums=(soupply.bedrock282.types.Enum[]).init, soupply.bedrock282.types.Command[] commands=(soupply.bedrock282.types.Command[]).init) pure nothrow @safe @nogc
3950     {
3951         this.enumValues = enumValues;
3952         this.unknown1 = unknown1;
3953         this.enums = enums;
3954         this.commands = commands;
3955     }
3956 
3957     mixin Make;
3958 
3959     public static typeof(this) fromBuffer(ubyte[] buffer)
3960     {
3961         AvailableCommands ret = new AvailableCommands();
3962         ret.decode(buffer);
3963         return ret;
3964     }
3965 
3966     override string toString()
3967     {
3968         return "AvailableCommands(enumValues: " ~ std.conv.to!string(this.enumValues) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", enums: " ~ std.conv.to!string(this.enums) ~ ", commands: " ~ std.conv.to!string(this.commands) ~ ")";
3969     }
3970 
3971 }
3972 
3973 class CommandRequest : Bedrock282Packet
3974 {
3975 
3976     enum uint ID = 77;
3977 
3978     enum bool CLIENTBOUND = false;
3979     enum bool SERVERBOUND = true;
3980 
3981     // type
3982     enum uint PLAYER = 0;
3983     enum uint COMMAND_BLOCK = 1;
3984     enum uint MINECART_COMMAND_BLOCK = 2;
3985     enum uint DEV_CONSOLE = 3;
3986 
3987     enum string[] __fields = ["command", "type", "uuid", "requestId", "playerId", "internal"];
3988 
3989     string command;
3990     @Var uint type;
3991     soupply.bedrock282.types.McpeUuid uuid;
3992     string requestId;
3993     @Condition("type==3") @Var int playerId;
3994     bool internal;
3995 
3996     this() pure nothrow @safe @nogc {}
3997 
3998     this(string command, uint type=uint.init, soupply.bedrock282.types.McpeUuid uuid=soupply.bedrock282.types.McpeUuid.init, string requestId=string.init, int playerId=int.init, bool internal=bool.init) pure nothrow @safe @nogc
3999     {
4000         this.command = command;
4001         this.type = type;
4002         this.uuid = uuid;
4003         this.requestId = requestId;
4004         this.playerId = playerId;
4005         this.internal = internal;
4006     }
4007 
4008     mixin Make;
4009 
4010     public static typeof(this) fromBuffer(ubyte[] buffer)
4011     {
4012         CommandRequest ret = new CommandRequest();
4013         ret.decode(buffer);
4014         return ret;
4015     }
4016 
4017     override string toString()
4018     {
4019         return "CommandRequest(command: " ~ std.conv.to!string(this.command) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", requestId: " ~ std.conv.to!string(this.requestId) ~ ", playerId: " ~ std.conv.to!string(this.playerId) ~ ", internal: " ~ std.conv.to!string(this.internal) ~ ")";
4020     }
4021 
4022 }
4023 
4024 class CommandBlockUpdate : Bedrock282Packet
4025 {
4026 
4027     enum uint ID = 78;
4028 
4029     enum bool CLIENTBOUND = true;
4030     enum bool SERVERBOUND = true;
4031 
4032     enum string[] __fields = ["updateBlock", "position", "mode", "redstoneMode", "conditional", "minecart", "command", "lastOutput", "hover", "trackOutput"];
4033 
4034     bool updateBlock;
4035     @Condition("updateBlock==true") soupply.bedrock282.types.BlockPosition position;
4036     @Condition("updateBlock==true") @Var uint mode;
4037     @Condition("updateBlock==true") bool redstoneMode;
4038     @Condition("updateBlock==true") bool conditional;
4039     @Condition("updateBlock==false") @Var long minecart;
4040     string command;
4041     string lastOutput;
4042     string hover;
4043     bool trackOutput;
4044 
4045     this() pure nothrow @safe @nogc {}
4046 
4047     this(bool updateBlock, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, uint mode=uint.init, bool redstoneMode=bool.init, bool conditional=bool.init, long minecart=long.init, string command=string.init, string lastOutput=string.init, string hover=string.init, bool trackOutput=bool.init) pure nothrow @safe @nogc
4048     {
4049         this.updateBlock = updateBlock;
4050         this.position = position;
4051         this.mode = mode;
4052         this.redstoneMode = redstoneMode;
4053         this.conditional = conditional;
4054         this.minecart = minecart;
4055         this.command = command;
4056         this.lastOutput = lastOutput;
4057         this.hover = hover;
4058         this.trackOutput = trackOutput;
4059     }
4060 
4061     mixin Make;
4062 
4063     public static typeof(this) fromBuffer(ubyte[] buffer)
4064     {
4065         CommandBlockUpdate ret = new CommandBlockUpdate();
4066         ret.decode(buffer);
4067         return ret;
4068     }
4069 
4070     override string toString()
4071     {
4072         return "CommandBlockUpdate(updateBlock: " ~ std.conv.to!string(this.updateBlock) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", mode: " ~ std.conv.to!string(this.mode) ~ ", redstoneMode: " ~ std.conv.to!string(this.redstoneMode) ~ ", conditional: " ~ std.conv.to!string(this.conditional) ~ ", minecart: " ~ std.conv.to!string(this.minecart) ~ ", command: " ~ std.conv.to!string(this.command) ~ ", lastOutput: " ~ std.conv.to!string(this.lastOutput) ~ ", hover: " ~ std.conv.to!string(this.hover) ~ ", trackOutput: " ~ std.conv.to!string(this.trackOutput) ~ ")";
4073     }
4074 
4075 }
4076 
4077 class CommandOutput : Bedrock282Packet
4078 {
4079 
4080     enum uint ID = 79;
4081 
4082     enum bool CLIENTBOUND = true;
4083     enum bool SERVERBOUND = false;
4084 
4085     enum string[] __fields = ["originData", "outputType", "successCount", "messages", "unknown4"];
4086 
4087     soupply.bedrock282.types.CommandOriginData originData;
4088     ubyte outputType;
4089     @Var uint successCount;
4090     soupply.bedrock282.types.CommandMessage[] messages;
4091     @Condition("outputType==4") string unknown4;
4092 
4093     this() pure nothrow @safe @nogc {}
4094 
4095     this(soupply.bedrock282.types.CommandOriginData originData, ubyte outputType=ubyte.init, uint successCount=uint.init, soupply.bedrock282.types.CommandMessage[] messages=(soupply.bedrock282.types.CommandMessage[]).init, string unknown4=string.init) pure nothrow @safe @nogc
4096     {
4097         this.originData = originData;
4098         this.outputType = outputType;
4099         this.successCount = successCount;
4100         this.messages = messages;
4101         this.unknown4 = unknown4;
4102     }
4103 
4104     mixin Make;
4105 
4106     public static typeof(this) fromBuffer(ubyte[] buffer)
4107     {
4108         CommandOutput ret = new CommandOutput();
4109         ret.decode(buffer);
4110         return ret;
4111     }
4112 
4113     override string toString()
4114     {
4115         return "CommandOutput(originData: " ~ std.conv.to!string(this.originData) ~ ", outputType: " ~ std.conv.to!string(this.outputType) ~ ", successCount: " ~ std.conv.to!string(this.successCount) ~ ", messages: " ~ std.conv.to!string(this.messages) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ")";
4116     }
4117 
4118 }
4119 
4120 class UpdateTrade : Bedrock282Packet
4121 {
4122 
4123     enum uint ID = 80;
4124 
4125     enum bool CLIENTBOUND = true;
4126     enum bool SERVERBOUND = false;
4127 
4128     enum string[] __fields = ["window", "windowType", "unknown2", "unknown3", "willing", "trader", "player", "displayName", "offers"];
4129 
4130     ubyte window;
4131     ubyte windowType = 15;
4132     @Var int unknown2;
4133     @Var int unknown3;
4134     bool willing;
4135     @Var long trader;
4136     @Var long player;
4137     string displayName;
4138     @NoLength ubyte[] offers;
4139 
4140     this() pure nothrow @safe @nogc {}
4141 
4142     this(ubyte window, ubyte windowType=15, int unknown2=int.init, int unknown3=int.init, bool willing=bool.init, long trader=long.init, long player=long.init, string displayName=string.init, ubyte[] offers=(ubyte[]).init) pure nothrow @safe @nogc
4143     {
4144         this.window = window;
4145         this.windowType = windowType;
4146         this.unknown2 = unknown2;
4147         this.unknown3 = unknown3;
4148         this.willing = willing;
4149         this.trader = trader;
4150         this.player = player;
4151         this.displayName = displayName;
4152         this.offers = offers;
4153     }
4154 
4155     mixin Make;
4156 
4157     public static typeof(this) fromBuffer(ubyte[] buffer)
4158     {
4159         UpdateTrade ret = new UpdateTrade();
4160         ret.decode(buffer);
4161         return ret;
4162     }
4163 
4164     override string toString()
4165     {
4166         return "UpdateTrade(window: " ~ std.conv.to!string(this.window) ~ ", windowType: " ~ std.conv.to!string(this.windowType) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ", willing: " ~ std.conv.to!string(this.willing) ~ ", trader: " ~ std.conv.to!string(this.trader) ~ ", player: " ~ std.conv.to!string(this.player) ~ ", displayName: " ~ std.conv.to!string(this.displayName) ~ ", offers: " ~ std.conv.to!string(this.offers) ~ ")";
4167     }
4168 
4169 }
4170 
4171 class UpdateEquip : Bedrock282Packet
4172 {
4173 
4174     enum uint ID = 81;
4175 
4176     enum bool CLIENTBOUND = true;
4177     enum bool SERVERBOUND = false;
4178 
4179     enum string[] __fields = [];
4180 
4181     mixin Make;
4182 
4183     public static typeof(this) fromBuffer(ubyte[] buffer)
4184     {
4185         UpdateEquip ret = new UpdateEquip();
4186         ret.decode(buffer);
4187         return ret;
4188     }
4189 
4190     override string toString()
4191     {
4192         return "UpdateEquip()";
4193     }
4194 
4195 }
4196 
4197 class ResourcePackDataInfo : Bedrock282Packet
4198 {
4199 
4200     enum uint ID = 82;
4201 
4202     enum bool CLIENTBOUND = true;
4203     enum bool SERVERBOUND = false;
4204 
4205     enum string[] __fields = ["id", "maxChunkSize", "chunkCount", "compressedPackSize", "sha256"];
4206 
4207     string id;
4208     uint maxChunkSize;
4209     uint chunkCount;
4210     ulong compressedPackSize;
4211     string sha256;
4212 
4213     this() pure nothrow @safe @nogc {}
4214 
4215     this(string id, uint maxChunkSize=uint.init, uint chunkCount=uint.init, ulong compressedPackSize=ulong.init, string sha256=string.init) pure nothrow @safe @nogc
4216     {
4217         this.id = id;
4218         this.maxChunkSize = maxChunkSize;
4219         this.chunkCount = chunkCount;
4220         this.compressedPackSize = compressedPackSize;
4221         this.sha256 = sha256;
4222     }
4223 
4224     mixin Make;
4225 
4226     public static typeof(this) fromBuffer(ubyte[] buffer)
4227     {
4228         ResourcePackDataInfo ret = new ResourcePackDataInfo();
4229         ret.decode(buffer);
4230         return ret;
4231     }
4232 
4233     override string toString()
4234     {
4235         return "ResourcePackDataInfo(id: " ~ std.conv.to!string(this.id) ~ ", maxChunkSize: " ~ std.conv.to!string(this.maxChunkSize) ~ ", chunkCount: " ~ std.conv.to!string(this.chunkCount) ~ ", compressedPackSize: " ~ std.conv.to!string(this.compressedPackSize) ~ ", sha256: " ~ std.conv.to!string(this.sha256) ~ ")";
4236     }
4237 
4238 }
4239 
4240 class ResourcePackChunkData : Bedrock282Packet
4241 {
4242 
4243     enum uint ID = 83;
4244 
4245     enum bool CLIENTBOUND = true;
4246     enum bool SERVERBOUND = false;
4247 
4248     enum string[] __fields = ["id", "chunkIndex", "progress", "data"];
4249 
4250     string id;
4251     uint chunkIndex;
4252     ulong progress;
4253     @Length!uint ubyte[] data;
4254 
4255     this() pure nothrow @safe @nogc {}
4256 
4257     this(string id, uint chunkIndex=uint.init, ulong progress=ulong.init, ubyte[] data=(ubyte[]).init) pure nothrow @safe @nogc
4258     {
4259         this.id = id;
4260         this.chunkIndex = chunkIndex;
4261         this.progress = progress;
4262         this.data = data;
4263     }
4264 
4265     mixin Make;
4266 
4267     public static typeof(this) fromBuffer(ubyte[] buffer)
4268     {
4269         ResourcePackChunkData ret = new ResourcePackChunkData();
4270         ret.decode(buffer);
4271         return ret;
4272     }
4273 
4274     override string toString()
4275     {
4276         return "ResourcePackChunkData(id: " ~ std.conv.to!string(this.id) ~ ", chunkIndex: " ~ std.conv.to!string(this.chunkIndex) ~ ", progress: " ~ std.conv.to!string(this.progress) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
4277     }
4278 
4279 }
4280 
4281 class ResourcePackChunkRequest : Bedrock282Packet
4282 {
4283 
4284     enum uint ID = 84;
4285 
4286     enum bool CLIENTBOUND = false;
4287     enum bool SERVERBOUND = true;
4288 
4289     enum string[] __fields = ["id", "chunkIndex"];
4290 
4291     string id;
4292     uint chunkIndex;
4293 
4294     this() pure nothrow @safe @nogc {}
4295 
4296     this(string id, uint chunkIndex=uint.init) pure nothrow @safe @nogc
4297     {
4298         this.id = id;
4299         this.chunkIndex = chunkIndex;
4300     }
4301 
4302     mixin Make;
4303 
4304     public static typeof(this) fromBuffer(ubyte[] buffer)
4305     {
4306         ResourcePackChunkRequest ret = new ResourcePackChunkRequest();
4307         ret.decode(buffer);
4308         return ret;
4309     }
4310 
4311     override string toString()
4312     {
4313         return "ResourcePackChunkRequest(id: " ~ std.conv.to!string(this.id) ~ ", chunkIndex: " ~ std.conv.to!string(this.chunkIndex) ~ ")";
4314     }
4315 
4316 }
4317 
4318 class Transfer : Bedrock282Packet
4319 {
4320 
4321     enum uint ID = 85;
4322 
4323     enum bool CLIENTBOUND = true;
4324     enum bool SERVERBOUND = false;
4325 
4326     enum string[] __fields = ["ip", "port"];
4327 
4328     string ip;
4329     ushort port = 19132;
4330 
4331     this() pure nothrow @safe @nogc {}
4332 
4333     this(string ip, ushort port=19132) pure nothrow @safe @nogc
4334     {
4335         this.ip = ip;
4336         this.port = port;
4337     }
4338 
4339     mixin Make;
4340 
4341     public static typeof(this) fromBuffer(ubyte[] buffer)
4342     {
4343         Transfer ret = new Transfer();
4344         ret.decode(buffer);
4345         return ret;
4346     }
4347 
4348     override string toString()
4349     {
4350         return "Transfer(ip: " ~ std.conv.to!string(this.ip) ~ ", port: " ~ std.conv.to!string(this.port) ~ ")";
4351     }
4352 
4353 }
4354 
4355 class PlaySound : Bedrock282Packet
4356 {
4357 
4358     enum uint ID = 86;
4359 
4360     enum bool CLIENTBOUND = true;
4361     enum bool SERVERBOUND = false;
4362 
4363     enum string[] __fields = ["name", "position", "volume", "pitch"];
4364 
4365     string name;
4366     soupply.bedrock282.types.BlockPosition position;
4367     float volume;
4368     float pitch;
4369 
4370     this() pure nothrow @safe @nogc {}
4371 
4372     this(string name, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, float volume=float.init, float pitch=float.init) pure nothrow @safe @nogc
4373     {
4374         this.name = name;
4375         this.position = position;
4376         this.volume = volume;
4377         this.pitch = pitch;
4378     }
4379 
4380     mixin Make;
4381 
4382     public static typeof(this) fromBuffer(ubyte[] buffer)
4383     {
4384         PlaySound ret = new PlaySound();
4385         ret.decode(buffer);
4386         return ret;
4387     }
4388 
4389     override string toString()
4390     {
4391         return "PlaySound(name: " ~ std.conv.to!string(this.name) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", volume: " ~ std.conv.to!string(this.volume) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ")";
4392     }
4393 
4394 }
4395 
4396 class StopSound : Bedrock282Packet
4397 {
4398 
4399     enum uint ID = 87;
4400 
4401     enum bool CLIENTBOUND = true;
4402     enum bool SERVERBOUND = false;
4403 
4404     enum string[] __fields = ["name", "stopAll"];
4405 
4406     string name;
4407     bool stopAll;
4408 
4409     this() pure nothrow @safe @nogc {}
4410 
4411     this(string name, bool stopAll=bool.init) pure nothrow @safe @nogc
4412     {
4413         this.name = name;
4414         this.stopAll = stopAll;
4415     }
4416 
4417     mixin Make;
4418 
4419     public static typeof(this) fromBuffer(ubyte[] buffer)
4420     {
4421         StopSound ret = new StopSound();
4422         ret.decode(buffer);
4423         return ret;
4424     }
4425 
4426     override string toString()
4427     {
4428         return "StopSound(name: " ~ std.conv.to!string(this.name) ~ ", stopAll: " ~ std.conv.to!string(this.stopAll) ~ ")";
4429     }
4430 
4431 }
4432 
4433 class SetTitle : Bedrock282Packet
4434 {
4435 
4436     enum uint ID = 88;
4437 
4438     enum bool CLIENTBOUND = true;
4439     enum bool SERVERBOUND = false;
4440 
4441     // action
4442     enum int HIDE = 0;
4443     enum int RESET = 1;
4444     enum int SET_TITLE = 2;
4445     enum int SET_SUBTITLE = 3;
4446     enum int SET_ACTION_BAR = 4;
4447     enum int SET_TIMINGS = 5;
4448 
4449     enum string[] __fields = ["action", "text", "fadeIn", "stay", "fadeOut"];
4450 
4451     @Var int action;
4452     string text;
4453     @Var int fadeIn;
4454     @Var int stay;
4455     @Var int fadeOut;
4456 
4457     this() pure nothrow @safe @nogc {}
4458 
4459     this(int action, string text=string.init, int fadeIn=int.init, int stay=int.init, int fadeOut=int.init) pure nothrow @safe @nogc
4460     {
4461         this.action = action;
4462         this.text = text;
4463         this.fadeIn = fadeIn;
4464         this.stay = stay;
4465         this.fadeOut = fadeOut;
4466     }
4467 
4468     mixin Make;
4469 
4470     public static typeof(this) fromBuffer(ubyte[] buffer)
4471     {
4472         SetTitle ret = new SetTitle();
4473         ret.decode(buffer);
4474         return ret;
4475     }
4476 
4477     override string toString()
4478     {
4479         return "SetTitle(action: " ~ std.conv.to!string(this.action) ~ ", text: " ~ std.conv.to!string(this.text) ~ ", fadeIn: " ~ std.conv.to!string(this.fadeIn) ~ ", stay: " ~ std.conv.to!string(this.stay) ~ ", fadeOut: " ~ std.conv.to!string(this.fadeOut) ~ ")";
4480     }
4481 
4482 }
4483 
4484 class AddBehaviorTree : Bedrock282Packet
4485 {
4486 
4487     enum uint ID = 89;
4488 
4489     enum bool CLIENTBOUND = true;
4490     enum bool SERVERBOUND = false;
4491 
4492     enum string[] __fields = ["unknown0"];
4493 
4494     string unknown0;
4495 
4496     this() pure nothrow @safe @nogc {}
4497 
4498     this(string unknown0) pure nothrow @safe @nogc
4499     {
4500         this.unknown0 = unknown0;
4501     }
4502 
4503     mixin Make;
4504 
4505     public static typeof(this) fromBuffer(ubyte[] buffer)
4506     {
4507         AddBehaviorTree ret = new AddBehaviorTree();
4508         ret.decode(buffer);
4509         return ret;
4510     }
4511 
4512     override string toString()
4513     {
4514         return "AddBehaviorTree(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ")";
4515     }
4516 
4517 }
4518 
4519 class StructureBlockUpdate : Bedrock282Packet
4520 {
4521 
4522     enum uint ID = 90;
4523 
4524     enum bool CLIENTBOUND = true;
4525     enum bool SERVERBOUND = false;
4526 
4527     enum string[] __fields = [];
4528 
4529     mixin Make;
4530 
4531     public static typeof(this) fromBuffer(ubyte[] buffer)
4532     {
4533         StructureBlockUpdate ret = new StructureBlockUpdate();
4534         ret.decode(buffer);
4535         return ret;
4536     }
4537 
4538     override string toString()
4539     {
4540         return "StructureBlockUpdate()";
4541     }
4542 
4543 }
4544 
4545 class ShowStoreOffer : Bedrock282Packet
4546 {
4547 
4548     enum uint ID = 91;
4549 
4550     enum bool CLIENTBOUND = true;
4551     enum bool SERVERBOUND = false;
4552 
4553     enum string[] __fields = ["unknown0", "unknown1", "unknown2"];
4554 
4555     string unknown0;
4556     bool unknown1;
4557     string unknown2;
4558 
4559     this() pure nothrow @safe @nogc {}
4560 
4561     this(string unknown0, bool unknown1=bool.init, string unknown2=string.init) pure nothrow @safe @nogc
4562     {
4563         this.unknown0 = unknown0;
4564         this.unknown1 = unknown1;
4565         this.unknown2 = unknown2;
4566     }
4567 
4568     mixin Make;
4569 
4570     public static typeof(this) fromBuffer(ubyte[] buffer)
4571     {
4572         ShowStoreOffer ret = new ShowStoreOffer();
4573         ret.decode(buffer);
4574         return ret;
4575     }
4576 
4577     override string toString()
4578     {
4579         return "ShowStoreOffer(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
4580     }
4581 
4582 }
4583 
4584 class PurchaseReceipt : Bedrock282Packet
4585 {
4586 
4587     enum uint ID = 92;
4588 
4589     enum bool CLIENTBOUND = false;
4590     enum bool SERVERBOUND = true;
4591 
4592     enum string[] __fields = ["unknown0"];
4593 
4594     string[] unknown0;
4595 
4596     this() pure nothrow @safe @nogc {}
4597 
4598     this(string[] unknown0) pure nothrow @safe @nogc
4599     {
4600         this.unknown0 = unknown0;
4601     }
4602 
4603     mixin Make;
4604 
4605     public static typeof(this) fromBuffer(ubyte[] buffer)
4606     {
4607         PurchaseReceipt ret = new PurchaseReceipt();
4608         ret.decode(buffer);
4609         return ret;
4610     }
4611 
4612     override string toString()
4613     {
4614         return "PurchaseReceipt(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ")";
4615     }
4616 
4617 }
4618 
4619 class PlayerSkin : Bedrock282Packet
4620 {
4621 
4622     enum uint ID = 93;
4623 
4624     enum bool CLIENTBOUND = true;
4625     enum bool SERVERBOUND = false;
4626 
4627     enum string[] __fields = ["uuid", "skinId", "skinName", "unknown3", "skinData", "capeData", "geometryModel", "geometryData"];
4628 
4629     soupply.bedrock282.types.McpeUuid uuid;
4630     string skinId;
4631     string skinName;
4632     string unknown3;
4633     ubyte[] skinData;
4634     ubyte[] capeData;
4635     string geometryModel;
4636     ubyte[] geometryData;
4637 
4638     this() pure nothrow @safe @nogc {}
4639 
4640     this(soupply.bedrock282.types.McpeUuid uuid, string skinId=string.init, string skinName=string.init, string unknown3=string.init, ubyte[] skinData=(ubyte[]).init, ubyte[] capeData=(ubyte[]).init, string geometryModel=string.init, ubyte[] geometryData=(ubyte[]).init) pure nothrow @safe @nogc
4641     {
4642         this.uuid = uuid;
4643         this.skinId = skinId;
4644         this.skinName = skinName;
4645         this.unknown3 = unknown3;
4646         this.skinData = skinData;
4647         this.capeData = capeData;
4648         this.geometryModel = geometryModel;
4649         this.geometryData = geometryData;
4650     }
4651 
4652     mixin Make;
4653 
4654     public static typeof(this) fromBuffer(ubyte[] buffer)
4655     {
4656         PlayerSkin ret = new PlayerSkin();
4657         ret.decode(buffer);
4658         return ret;
4659     }
4660 
4661     override string toString()
4662     {
4663         return "PlayerSkin(uuid: " ~ std.conv.to!string(this.uuid) ~ ", skinId: " ~ std.conv.to!string(this.skinId) ~ ", skinName: " ~ std.conv.to!string(this.skinName) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ", skinData: " ~ std.conv.to!string(this.skinData) ~ ", capeData: " ~ std.conv.to!string(this.capeData) ~ ", geometryModel: " ~ std.conv.to!string(this.geometryModel) ~ ", geometryData: " ~ std.conv.to!string(this.geometryData) ~ ")";
4664     }
4665 
4666 }
4667 
4668 class SubClientLogin : Bedrock282Packet
4669 {
4670 
4671     enum uint ID = 94;
4672 
4673     enum bool CLIENTBOUND = true;
4674     enum bool SERVERBOUND = false;
4675 
4676     enum string[] __fields = [];
4677 
4678     mixin Make;
4679 
4680     public static typeof(this) fromBuffer(ubyte[] buffer)
4681     {
4682         SubClientLogin ret = new SubClientLogin();
4683         ret.decode(buffer);
4684         return ret;
4685     }
4686 
4687     override string toString()
4688     {
4689         return "SubClientLogin()";
4690     }
4691 
4692 }
4693 
4694 class WSConnect : Bedrock282Packet
4695 {
4696 
4697     enum uint ID = 95;
4698 
4699     enum bool CLIENTBOUND = false;
4700     enum bool SERVERBOUND = false;
4701 
4702     enum string[] __fields = ["unknown0"];
4703 
4704     string unknown0;
4705 
4706     this() pure nothrow @safe @nogc {}
4707 
4708     this(string unknown0) pure nothrow @safe @nogc
4709     {
4710         this.unknown0 = unknown0;
4711     }
4712 
4713     mixin Make;
4714 
4715     public static typeof(this) fromBuffer(ubyte[] buffer)
4716     {
4717         WSConnect ret = new WSConnect();
4718         ret.decode(buffer);
4719         return ret;
4720     }
4721 
4722     override string toString()
4723     {
4724         return "WSConnect(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ")";
4725     }
4726 
4727 }
4728 
4729 class SetLastHurtBy : Bedrock282Packet
4730 {
4731 
4732     enum uint ID = 96;
4733 
4734     enum bool CLIENTBOUND = true;
4735     enum bool SERVERBOUND = false;
4736 
4737     enum string[] __fields = ["unknown0"];
4738 
4739     @Var int unknown0;
4740 
4741     this() pure nothrow @safe @nogc {}
4742 
4743     this(int unknown0) pure nothrow @safe @nogc
4744     {
4745         this.unknown0 = unknown0;
4746     }
4747 
4748     mixin Make;
4749 
4750     public static typeof(this) fromBuffer(ubyte[] buffer)
4751     {
4752         SetLastHurtBy ret = new SetLastHurtBy();
4753         ret.decode(buffer);
4754         return ret;
4755     }
4756 
4757     override string toString()
4758     {
4759         return "SetLastHurtBy(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ")";
4760     }
4761 
4762 }
4763 
4764 class BookEdit : Bedrock282Packet
4765 {
4766 
4767     enum uint ID = 97;
4768 
4769     enum bool CLIENTBOUND = true;
4770     enum bool SERVERBOUND = true;
4771 
4772     enum string[] __fields = ["type", "slot"];
4773 
4774     ubyte type;
4775     ubyte slot;
4776 
4777     this() pure nothrow @safe @nogc {}
4778 
4779     this(ubyte type, ubyte slot=ubyte.init) pure nothrow @safe @nogc
4780     {
4781         this.type = type;
4782         this.slot = slot;
4783     }
4784 
4785     mixin Make;
4786 
4787     public static typeof(this) fromBuffer(ubyte[] buffer)
4788     {
4789         BookEdit ret = new BookEdit();
4790         ret.decode(buffer);
4791         return ret;
4792     }
4793 
4794     override string toString()
4795     {
4796         return "BookEdit(type: " ~ std.conv.to!string(this.type) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ")";
4797     }
4798 
4799     enum string variantField = "type";
4800 
4801     alias Variants = TypeTuple!(ReplacePage, AddPage, DeletePage, SwapPages, Sign);
4802 
4803     class ReplacePage : Bedrock282Packet
4804     {
4805 
4806         enum typeof(type) TYPE = 0;
4807 
4808         enum string[] __fields = ["pageNumber", "unknown1", "unknown2"];
4809 
4810         ubyte pageNumber;
4811         string unknown1;
4812         string unknown2;
4813 
4814         this() pure nothrow @safe @nogc {}
4815 
4816         this(ubyte pageNumber, string unknown1=string.init, string unknown2=string.init) pure nothrow @safe @nogc
4817         {
4818             this.pageNumber = pageNumber;
4819             this.unknown1 = unknown1;
4820             this.unknown2 = unknown2;
4821         }
4822 
4823         mixin Make;
4824 
4825         override string toString()
4826         {
4827             return "BookEdit.ReplacePage(pageNumber: " ~ std.conv.to!string(this.pageNumber) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
4828         }
4829 
4830     }
4831 
4832     class AddPage : Bedrock282Packet
4833     {
4834 
4835         enum typeof(type) TYPE = 1;
4836 
4837         enum string[] __fields = ["pageNumber", "unknown1", "unknown2"];
4838 
4839         ubyte pageNumber;
4840         string unknown1;
4841         string unknown2;
4842 
4843         this() pure nothrow @safe @nogc {}
4844 
4845         this(ubyte pageNumber, string unknown1=string.init, string unknown2=string.init) pure nothrow @safe @nogc
4846         {
4847             this.pageNumber = pageNumber;
4848             this.unknown1 = unknown1;
4849             this.unknown2 = unknown2;
4850         }
4851 
4852         mixin Make;
4853 
4854         override string toString()
4855         {
4856             return "BookEdit.AddPage(pageNumber: " ~ std.conv.to!string(this.pageNumber) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
4857         }
4858 
4859     }
4860 
4861     class DeletePage : Bedrock282Packet
4862     {
4863 
4864         enum typeof(type) TYPE = 2;
4865 
4866         enum string[] __fields = ["pageNumber"];
4867 
4868         ubyte pageNumber;
4869 
4870         this() pure nothrow @safe @nogc {}
4871 
4872         this(ubyte pageNumber) pure nothrow @safe @nogc
4873         {
4874             this.pageNumber = pageNumber;
4875         }
4876 
4877         mixin Make;
4878 
4879         override string toString()
4880         {
4881             return "BookEdit.DeletePage(pageNumber: " ~ std.conv.to!string(this.pageNumber) ~ ")";
4882         }
4883 
4884     }
4885 
4886     class SwapPages : Bedrock282Packet
4887     {
4888 
4889         enum typeof(type) TYPE = 3;
4890 
4891         enum string[] __fields = ["page1", "page2"];
4892 
4893         ubyte page1;
4894         ubyte page2;
4895 
4896         this() pure nothrow @safe @nogc {}
4897 
4898         this(ubyte page1, ubyte page2=ubyte.init) pure nothrow @safe @nogc
4899         {
4900             this.page1 = page1;
4901             this.page2 = page2;
4902         }
4903 
4904         mixin Make;
4905 
4906         override string toString()
4907         {
4908             return "BookEdit.SwapPages(page1: " ~ std.conv.to!string(this.page1) ~ ", page2: " ~ std.conv.to!string(this.page2) ~ ")";
4909         }
4910 
4911     }
4912 
4913     class Sign : Bedrock282Packet
4914     {
4915 
4916         enum typeof(type) TYPE = 4;
4917 
4918         enum string[] __fields = ["title", "author"];
4919 
4920         string title;
4921         string author;
4922 
4923         this() pure nothrow @safe @nogc {}
4924 
4925         this(string title, string author=string.init) pure nothrow @safe @nogc
4926         {
4927             this.title = title;
4928             this.author = author;
4929         }
4930 
4931         mixin Make;
4932 
4933         override string toString()
4934         {
4935             return "BookEdit.Sign(title: " ~ std.conv.to!string(this.title) ~ ", author: " ~ std.conv.to!string(this.author) ~ ")";
4936         }
4937 
4938     }
4939 
4940 }
4941 
4942 class NpcRequest : Bedrock282Packet
4943 {
4944 
4945     enum uint ID = 98;
4946 
4947     enum bool CLIENTBOUND = false;
4948     enum bool SERVERBOUND = true;
4949 
4950     enum string[] __fields = ["entityId", "requestType", "command", "actionType"];
4951 
4952     @Var long entityId;
4953     ubyte requestType;
4954     string command;
4955     ubyte actionType;
4956 
4957     this() pure nothrow @safe @nogc {}
4958 
4959     this(long entityId, ubyte requestType=ubyte.init, string command=string.init, ubyte actionType=ubyte.init) pure nothrow @safe @nogc
4960     {
4961         this.entityId = entityId;
4962         this.requestType = requestType;
4963         this.command = command;
4964         this.actionType = actionType;
4965     }
4966 
4967     mixin Make;
4968 
4969     public static typeof(this) fromBuffer(ubyte[] buffer)
4970     {
4971         NpcRequest ret = new NpcRequest();
4972         ret.decode(buffer);
4973         return ret;
4974     }
4975 
4976     override string toString()
4977     {
4978         return "NpcRequest(entityId: " ~ std.conv.to!string(this.entityId) ~ ", requestType: " ~ std.conv.to!string(this.requestType) ~ ", command: " ~ std.conv.to!string(this.command) ~ ", actionType: " ~ std.conv.to!string(this.actionType) ~ ")";
4979     }
4980 
4981 }
4982 
4983 class PhotoTransfer : Bedrock282Packet
4984 {
4985 
4986     enum uint ID = 99;
4987 
4988     enum bool CLIENTBOUND = false;
4989     enum bool SERVERBOUND = true;
4990 
4991     enum string[] __fields = ["unknown0", "unknown1", "unknown2"];
4992 
4993     string unknown0;
4994     string unknown1;
4995     string unknown2;
4996 
4997     this() pure nothrow @safe @nogc {}
4998 
4999     this(string unknown0, string unknown1=string.init, string unknown2=string.init) pure nothrow @safe @nogc
5000     {
5001         this.unknown0 = unknown0;
5002         this.unknown1 = unknown1;
5003         this.unknown2 = unknown2;
5004     }
5005 
5006     mixin Make;
5007 
5008     public static typeof(this) fromBuffer(ubyte[] buffer)
5009     {
5010         PhotoTransfer ret = new PhotoTransfer();
5011         ret.decode(buffer);
5012         return ret;
5013     }
5014 
5015     override string toString()
5016     {
5017         return "PhotoTransfer(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ", unknown1: " ~ std.conv.to!string(this.unknown1) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
5018     }
5019 
5020 }
5021 
5022 class ModalFormRequest : Bedrock282Packet
5023 {
5024 
5025     enum uint ID = 100;
5026 
5027     enum bool CLIENTBOUND = true;
5028     enum bool SERVERBOUND = false;
5029 
5030     enum string[] __fields = ["formId", "data"];
5031 
5032     @Var uint formId;
5033     string data;
5034 
5035     this() pure nothrow @safe @nogc {}
5036 
5037     this(uint formId, string data=string.init) pure nothrow @safe @nogc
5038     {
5039         this.formId = formId;
5040         this.data = data;
5041     }
5042 
5043     mixin Make;
5044 
5045     public static typeof(this) fromBuffer(ubyte[] buffer)
5046     {
5047         ModalFormRequest ret = new ModalFormRequest();
5048         ret.decode(buffer);
5049         return ret;
5050     }
5051 
5052     override string toString()
5053     {
5054         return "ModalFormRequest(formId: " ~ std.conv.to!string(this.formId) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
5055     }
5056 
5057 }
5058 
5059 class ModalFormResponse : Bedrock282Packet
5060 {
5061 
5062     enum uint ID = 101;
5063 
5064     enum bool CLIENTBOUND = true;
5065     enum bool SERVERBOUND = false;
5066 
5067     enum string[] __fields = ["formId", "data"];
5068 
5069     @Var uint formId;
5070     string data;
5071 
5072     this() pure nothrow @safe @nogc {}
5073 
5074     this(uint formId, string data=string.init) pure nothrow @safe @nogc
5075     {
5076         this.formId = formId;
5077         this.data = data;
5078     }
5079 
5080     mixin Make;
5081 
5082     public static typeof(this) fromBuffer(ubyte[] buffer)
5083     {
5084         ModalFormResponse ret = new ModalFormResponse();
5085         ret.decode(buffer);
5086         return ret;
5087     }
5088 
5089     override string toString()
5090     {
5091         return "ModalFormResponse(formId: " ~ std.conv.to!string(this.formId) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
5092     }
5093 
5094 }
5095 
5096 class ServerSettingsRequest : Bedrock282Packet
5097 {
5098 
5099     enum uint ID = 102;
5100 
5101     enum bool CLIENTBOUND = false;
5102     enum bool SERVERBOUND = true;
5103 
5104     enum string[] __fields = [];
5105 
5106     mixin Make;
5107 
5108     public static typeof(this) fromBuffer(ubyte[] buffer)
5109     {
5110         ServerSettingsRequest ret = new ServerSettingsRequest();
5111         ret.decode(buffer);
5112         return ret;
5113     }
5114 
5115     override string toString()
5116     {
5117         return "ServerSettingsRequest()";
5118     }
5119 
5120 }
5121 
5122 class ServerSettingsResponse : Bedrock282Packet
5123 {
5124 
5125     enum uint ID = 103;
5126 
5127     enum bool CLIENTBOUND = true;
5128     enum bool SERVERBOUND = false;
5129 
5130     enum string[] __fields = ["formId", "data"];
5131 
5132     @Var uint formId;
5133     string data;
5134 
5135     this() pure nothrow @safe @nogc {}
5136 
5137     this(uint formId, string data=string.init) pure nothrow @safe @nogc
5138     {
5139         this.formId = formId;
5140         this.data = data;
5141     }
5142 
5143     mixin Make;
5144 
5145     public static typeof(this) fromBuffer(ubyte[] buffer)
5146     {
5147         ServerSettingsResponse ret = new ServerSettingsResponse();
5148         ret.decode(buffer);
5149         return ret;
5150     }
5151 
5152     override string toString()
5153     {
5154         return "ServerSettingsResponse(formId: " ~ std.conv.to!string(this.formId) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
5155     }
5156 
5157 }
5158 
5159 class ShowProfile : Bedrock282Packet
5160 {
5161 
5162     enum uint ID = 104;
5163 
5164     enum bool CLIENTBOUND = true;
5165     enum bool SERVERBOUND = false;
5166 
5167     enum string[] __fields = [];
5168 
5169     mixin Make;
5170 
5171     public static typeof(this) fromBuffer(ubyte[] buffer)
5172     {
5173         ShowProfile ret = new ShowProfile();
5174         ret.decode(buffer);
5175         return ret;
5176     }
5177 
5178     override string toString()
5179     {
5180         return "ShowProfile()";
5181     }
5182 
5183 }
5184 
5185 class SetDefaultGameType : Bedrock282Packet
5186 {
5187 
5188     enum uint ID = 105;
5189 
5190     enum bool CLIENTBOUND = true;
5191     enum bool SERVERBOUND = false;
5192 
5193     // game type
5194     enum uint SURVIVAL = 0;
5195     enum uint CREATIVE = 1;
5196     enum uint ADVENTURE = 2;
5197 
5198     enum string[] __fields = ["gameType"];
5199 
5200     @Var uint gameType;
5201 
5202     this() pure nothrow @safe @nogc {}
5203 
5204     this(uint gameType) pure nothrow @safe @nogc
5205     {
5206         this.gameType = gameType;
5207     }
5208 
5209     mixin Make;
5210 
5211     public static typeof(this) fromBuffer(ubyte[] buffer)
5212     {
5213         SetDefaultGameType ret = new SetDefaultGameType();
5214         ret.decode(buffer);
5215         return ret;
5216     }
5217 
5218     override string toString()
5219     {
5220         return "SetDefaultGameType(gameType: " ~ std.conv.to!string(this.gameType) ~ ")";
5221     }
5222 
5223 }
5224 
5225 class RemoveObject : Bedrock282Packet
5226 {
5227 
5228     enum uint ID = 106;
5229 
5230     enum bool CLIENTBOUND = true;
5231     enum bool SERVERBOUND = false;
5232 
5233     enum string[] __fields = ["objectName"];
5234 
5235     string objectName;
5236 
5237     this() pure nothrow @safe @nogc {}
5238 
5239     this(string objectName) pure nothrow @safe @nogc
5240     {
5241         this.objectName = objectName;
5242     }
5243 
5244     mixin Make;
5245 
5246     public static typeof(this) fromBuffer(ubyte[] buffer)
5247     {
5248         RemoveObject ret = new RemoveObject();
5249         ret.decode(buffer);
5250         return ret;
5251     }
5252 
5253     override string toString()
5254     {
5255         return "RemoveObject(objectName: " ~ std.conv.to!string(this.objectName) ~ ")";
5256     }
5257 
5258 }
5259 
5260 class SetDisplayObjective : Bedrock282Packet
5261 {
5262 
5263     enum uint ID = 107;
5264 
5265     enum bool CLIENTBOUND = true;
5266     enum bool SERVERBOUND = false;
5267 
5268     enum string[] __fields = ["displaySlot", "objectiveName", "displayName", "criteriaName", "sortOrder"];
5269 
5270     string displaySlot;
5271     string objectiveName;
5272     string displayName;
5273     string criteriaName;
5274     @Var int sortOrder;
5275 
5276     this() pure nothrow @safe @nogc {}
5277 
5278     this(string displaySlot, string objectiveName=string.init, string displayName=string.init, string criteriaName=string.init, int sortOrder=int.init) pure nothrow @safe @nogc
5279     {
5280         this.displaySlot = displaySlot;
5281         this.objectiveName = objectiveName;
5282         this.displayName = displayName;
5283         this.criteriaName = criteriaName;
5284         this.sortOrder = sortOrder;
5285     }
5286 
5287     mixin Make;
5288 
5289     public static typeof(this) fromBuffer(ubyte[] buffer)
5290     {
5291         SetDisplayObjective ret = new SetDisplayObjective();
5292         ret.decode(buffer);
5293         return ret;
5294     }
5295 
5296     override string toString()
5297     {
5298         return "SetDisplayObjective(displaySlot: " ~ std.conv.to!string(this.displaySlot) ~ ", objectiveName: " ~ std.conv.to!string(this.objectiveName) ~ ", displayName: " ~ std.conv.to!string(this.displayName) ~ ", criteriaName: " ~ std.conv.to!string(this.criteriaName) ~ ", sortOrder: " ~ std.conv.to!string(this.sortOrder) ~ ")";
5299     }
5300 
5301 }
5302 
5303 class SetScore : Bedrock282Packet
5304 {
5305 
5306     enum uint ID = 108;
5307 
5308     enum bool CLIENTBOUND = true;
5309     enum bool SERVERBOUND = false;
5310 
5311     // type
5312     enum ubyte MODIFY = 0;
5313     enum ubyte RESET = 1;
5314 
5315     enum string[] __fields = ["type", "scores"];
5316 
5317     ubyte type;
5318     soupply.bedrock282.types.Score[] scores;
5319 
5320     this() pure nothrow @safe @nogc {}
5321 
5322     this(ubyte type, soupply.bedrock282.types.Score[] scores=(soupply.bedrock282.types.Score[]).init) pure nothrow @safe @nogc
5323     {
5324         this.type = type;
5325         this.scores = scores;
5326     }
5327 
5328     mixin Make;
5329 
5330     public static typeof(this) fromBuffer(ubyte[] buffer)
5331     {
5332         SetScore ret = new SetScore();
5333         ret.decode(buffer);
5334         return ret;
5335     }
5336 
5337     override string toString()
5338     {
5339         return "SetScore(type: " ~ std.conv.to!string(this.type) ~ ", scores: " ~ std.conv.to!string(this.scores) ~ ")";
5340     }
5341 
5342 }
5343 
5344 class LabTable : Bedrock282Packet
5345 {
5346 
5347     enum uint ID = 109;
5348 
5349     enum bool CLIENTBOUND = true;
5350     enum bool SERVERBOUND = false;
5351 
5352     enum string[] __fields = ["unknown0", "position", "reactionType"];
5353 
5354     ubyte unknown0;
5355     soupply.bedrock282.types.BlockPosition position;
5356     ubyte reactionType;
5357 
5358     this() pure nothrow @safe @nogc {}
5359 
5360     this(ubyte unknown0, soupply.bedrock282.types.BlockPosition position=soupply.bedrock282.types.BlockPosition.init, ubyte reactionType=ubyte.init) pure nothrow @safe @nogc
5361     {
5362         this.unknown0 = unknown0;
5363         this.position = position;
5364         this.reactionType = reactionType;
5365     }
5366 
5367     mixin Make;
5368 
5369     public static typeof(this) fromBuffer(ubyte[] buffer)
5370     {
5371         LabTable ret = new LabTable();
5372         ret.decode(buffer);
5373         return ret;
5374     }
5375 
5376     override string toString()
5377     {
5378         return "LabTable(unknown0: " ~ std.conv.to!string(this.unknown0) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", reactionType: " ~ std.conv.to!string(this.reactionType) ~ ")";
5379     }
5380 
5381 }
5382 
5383 class UpdateBlockSynced : Bedrock282Packet
5384 {
5385 
5386     enum uint ID = 110;
5387 
5388     enum bool CLIENTBOUND = true;
5389     enum bool SERVERBOUND = false;
5390 
5391     // flags and meta
5392     enum uint NEIGHBORS = 1;
5393     enum uint NETWORK = 2;
5394     enum uint NO_GRAPHIC = 4;
5395     enum uint PRIORITY = 8;
5396 
5397     enum string[] __fields = ["position", "block", "flagsAndMeta", "entityId", "unknown4"];
5398 
5399     soupply.bedrock282.types.BlockPosition position;
5400     @Var uint block;
5401     @Var uint flagsAndMeta;
5402     @Var long entityId;
5403     @Var ulong unknown4;
5404 
5405     this() pure nothrow @safe @nogc {}
5406 
5407     this(soupply.bedrock282.types.BlockPosition position, uint block=uint.init, uint flagsAndMeta=uint.init, long entityId=long.init, ulong unknown4=ulong.init) pure nothrow @safe @nogc
5408     {
5409         this.position = position;
5410         this.block = block;
5411         this.flagsAndMeta = flagsAndMeta;
5412         this.entityId = entityId;
5413         this.unknown4 = unknown4;
5414     }
5415 
5416     mixin Make;
5417 
5418     public static typeof(this) fromBuffer(ubyte[] buffer)
5419     {
5420         UpdateBlockSynced ret = new UpdateBlockSynced();
5421         ret.decode(buffer);
5422         return ret;
5423     }
5424 
5425     override string toString()
5426     {
5427         return "UpdateBlockSynced(position: " ~ std.conv.to!string(this.position) ~ ", block: " ~ std.conv.to!string(this.block) ~ ", flagsAndMeta: " ~ std.conv.to!string(this.flagsAndMeta) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ")";
5428     }
5429 
5430 }
5431 
5432 class MoveEntityDelta : Bedrock282Packet
5433 {
5434 
5435     enum uint ID = 111;
5436 
5437     enum bool CLIENTBOUND = true;
5438     enum bool SERVERBOUND = false;
5439 
5440     // flags
5441     enum ubyte HAS_DIFF_X = 1;
5442     enum ubyte HAS_DIFF_Y = 2;
5443     enum ubyte HAS_DIFF_Z = 4;
5444     enum ubyte HAS_ROT_X = 8;
5445     enum ubyte HAS_ROT_Y = 16;
5446     enum ubyte HAS_ROT_Z = 32;
5447 
5448     enum string[] __fields = ["flags", "xDiff", "yDiff", "zDiff", "xRot", "yRot", "zRot"];
5449 
5450     ubyte flags;
5451     @Condition("(flags&1)!=0") @Var int xDiff;
5452     @Condition("(flags&2)!=0") @Var int yDiff;
5453     @Condition("(flags&4)!=0") @Var int zDiff;
5454     @Condition("(flags&8)!=0") byte xRot;
5455     @Condition("(flags&16)!=0") byte yRot;
5456     @Condition("(flags&32)!=0") byte zRot;
5457 
5458     this() pure nothrow @safe @nogc {}
5459 
5460     this(ubyte flags, int xDiff=int.init, int yDiff=int.init, int zDiff=int.init, byte xRot=byte.init, byte yRot=byte.init, byte zRot=byte.init) pure nothrow @safe @nogc
5461     {
5462         this.flags = flags;
5463         this.xDiff = xDiff;
5464         this.yDiff = yDiff;
5465         this.zDiff = zDiff;
5466         this.xRot = xRot;
5467         this.yRot = yRot;
5468         this.zRot = zRot;
5469     }
5470 
5471     mixin Make;
5472 
5473     public static typeof(this) fromBuffer(ubyte[] buffer)
5474     {
5475         MoveEntityDelta ret = new MoveEntityDelta();
5476         ret.decode(buffer);
5477         return ret;
5478     }
5479 
5480     override string toString()
5481     {
5482         return "MoveEntityDelta(flags: " ~ std.conv.to!string(this.flags) ~ ", xDiff: " ~ std.conv.to!string(this.xDiff) ~ ", yDiff: " ~ std.conv.to!string(this.yDiff) ~ ", zDiff: " ~ std.conv.to!string(this.zDiff) ~ ", xRot: " ~ std.conv.to!string(this.xRot) ~ ", yRot: " ~ std.conv.to!string(this.yRot) ~ ", zRot: " ~ std.conv.to!string(this.zRot) ~ ")";
5483     }
5484 
5485 }
5486 
5487 class SetScoreboardIdentity : Bedrock282Packet
5488 {
5489 
5490     enum uint ID = 112;
5491 
5492     enum bool CLIENTBOUND = true;
5493     enum bool SERVERBOUND = false;
5494 
5495     // type
5496     enum ubyte REGISTER = 0;
5497     enum ubyte CLEAR = 1;
5498 
5499     enum string[] __fields = ["type", "registerEntries", "clearEntries"];
5500 
5501     ubyte type;
5502     @Condition("type==0") soupply.bedrock282.types.RegisterEntry[] registerEntries;
5503     @Condition("type==1") @Var long[] clearEntries;
5504 
5505     this() pure nothrow @safe @nogc {}
5506 
5507     this(ubyte type, soupply.bedrock282.types.RegisterEntry[] registerEntries=(soupply.bedrock282.types.RegisterEntry[]).init, long[] clearEntries=(long[]).init) pure nothrow @safe @nogc
5508     {
5509         this.type = type;
5510         this.registerEntries = registerEntries;
5511         this.clearEntries = clearEntries;
5512     }
5513 
5514     mixin Make;
5515 
5516     public static typeof(this) fromBuffer(ubyte[] buffer)
5517     {
5518         SetScoreboardIdentity ret = new SetScoreboardIdentity();
5519         ret.decode(buffer);
5520         return ret;
5521     }
5522 
5523     override string toString()
5524     {
5525         return "SetScoreboardIdentity(type: " ~ std.conv.to!string(this.type) ~ ", registerEntries: " ~ std.conv.to!string(this.registerEntries) ~ ", clearEntries: " ~ std.conv.to!string(this.clearEntries) ~ ")";
5526     }
5527 
5528 }
5529 
5530 class SetLocalPlayerAsInitialized : Bedrock282Packet
5531 {
5532 
5533     enum uint ID = 113;
5534 
5535     enum bool CLIENTBOUND = true;
5536     enum bool SERVERBOUND = false;
5537 
5538     enum string[] __fields = ["entityRuntimeId"];
5539 
5540     @Var ulong entityRuntimeId;
5541 
5542     this() pure nothrow @safe @nogc {}
5543 
5544     this(ulong entityRuntimeId) pure nothrow @safe @nogc
5545     {
5546         this.entityRuntimeId = entityRuntimeId;
5547     }
5548 
5549     mixin Make;
5550 
5551     public static typeof(this) fromBuffer(ubyte[] buffer)
5552     {
5553         SetLocalPlayerAsInitialized ret = new SetLocalPlayerAsInitialized();
5554         ret.decode(buffer);
5555         return ret;
5556     }
5557 
5558     override string toString()
5559     {
5560         return "SetLocalPlayerAsInitialized(entityRuntimeId: " ~ std.conv.to!string(this.entityRuntimeId) ~ ")";
5561     }
5562 
5563 }
5564 
5565 class UpdateSoftEnum : Bedrock282Packet
5566 {
5567 
5568     enum uint ID = 114;
5569 
5570     enum bool CLIENTBOUND = true;
5571     enum bool SERVERBOUND = false;
5572 
5573     // type
5574     enum ubyte ADD = 0;
5575     enum ubyte REMOVE = 1;
5576     enum ubyte SET = 2;
5577 
5578     enum string[] __fields = ["name", "values", "type"];
5579 
5580     string name;
5581     string[] values;
5582     ubyte type;
5583 
5584     this() pure nothrow @safe @nogc {}
5585 
5586     this(string name, string[] values=(string[]).init, ubyte type=ubyte.init) pure nothrow @safe @nogc
5587     {
5588         this.name = name;
5589         this.values = values;
5590         this.type = type;
5591     }
5592 
5593     mixin Make;
5594 
5595     public static typeof(this) fromBuffer(ubyte[] buffer)
5596     {
5597         UpdateSoftEnum ret = new UpdateSoftEnum();
5598         ret.decode(buffer);
5599         return ret;
5600     }
5601 
5602     override string toString()
5603     {
5604         return "UpdateSoftEnum(name: " ~ std.conv.to!string(this.name) ~ ", values: " ~ std.conv.to!string(this.values) ~ ", type: " ~ std.conv.to!string(this.type) ~ ")";
5605     }
5606 
5607 }
5608 
5609 class NetworkStackLatency : Bedrock282Packet
5610 {
5611 
5612     enum uint ID = 115;
5613 
5614     enum bool CLIENTBOUND = true;
5615     enum bool SERVERBOUND = true;
5616 
5617     enum string[] __fields = ["timestamp"];
5618 
5619     long timestamp;
5620 
5621     this() pure nothrow @safe @nogc {}
5622 
5623     this(long timestamp) pure nothrow @safe @nogc
5624     {
5625         this.timestamp = timestamp;
5626     }
5627 
5628     mixin Make;
5629 
5630     public static typeof(this) fromBuffer(ubyte[] buffer)
5631     {
5632         NetworkStackLatency ret = new NetworkStackLatency();
5633         ret.decode(buffer);
5634         return ret;
5635     }
5636 
5637     override string toString()
5638     {
5639         return "NetworkStackLatency(timestamp: " ~ std.conv.to!string(this.timestamp) ~ ")";
5640     }
5641 
5642 }