1 /*
2  * This file has been automatically generated by Soupply and released under the MIT license.
3  * Generated from data/java393.xml
4  */
5 module soupply.java393.protocol.play_clientbound;
6 
7 static import std.conv;
8 import std.typetuple : TypeTuple;
9 import packetmaker;
10 
11 import soupply.util;
12 import soupply.java393.metadata : Metadata;
13 import soupply.java393.packet : Java393Packet;
14 
15 static import soupply.java393.types;
16 
17 alias Packets = TypeTuple!(SpawnObject, SpawnExperienceOrb, SpawnGlobalEntity, SpawnMob, SpawnPainting, SpawnPlayer, Animation, Statistics, BlockBreakAnimation, UpdateBlockEntity, BlockAction, BlockChange, BossBar, ServerDifficulty, ChatMessage, MultiBlockChange, TabComplete, DeclareCommands, ConfirmTransaction, CloseWindow, OpenWindow, WindowItems, WindowProperty, SetSlot, SetCooldown, PluginMessage, NamedSoundEffect, Disconnect, EntityStatus, NbtQueryResponse, Explosion, UnloadChunk, ChangeGameState, KeepAlive, ChunkData, Effect, SpawnParticle, JoinGame, Map, Entity, EntityRelativeMove, EntityLookAndRelativeMove, EntityLook, VehicleMove, OpenSignEditor, CraftRecipeResponse, PlayerAbilities, CombatEvent, PlayerListItem, FacePlayer, PlayerPositionAndLook, UseBed, UnlockRecipes, DestroyEntities, RemoveEntityEffect, ResourcePackSend, Respawn, EntityHeadLook, AdvancementProgress, WorldBorder, Camera, HeldItemChange, DisplayScoreboard, EntityMetadata, AttachEntity, EntityVelocity, EntityEquipment, SetExperience, UpdateHealth, ScoreboardObjective, SetPassengers, Teams, UpdateScore, SpawnPosition, TimeUpdate, Title, StopSound, SoundEffect, PlayerListHeaderAndFooter, CollectItem, EntityTeleport, Advencements, EntityProperties, EntityEffect, DeclareRecipes, Tags);
18 
19 class SpawnObject : Java393Packet
20 {
21 
22     enum uint ID = 0;
23 
24     enum bool CLIENTBOUND = true;
25     enum bool SERVERBOUND = false;
26 
27     enum string[] __fields = ["entityId", "uuid", "type", "position", "pitch", "yaw", "data", "velocity"];
28 
29     @Var uint entityId;
30     UUID uuid;
31     ubyte type;
32     Vector!(double, "xyz") position;
33     ubyte pitch;
34     ubyte yaw;
35     int data;
36     Vector!(short, "xyz") velocity;
37 
38     this() pure nothrow @safe @nogc {}
39 
40     this(uint entityId, UUID uuid=UUID.init, ubyte type=ubyte.init, Vector!(double, "xyz") position=Vector!(double, "xyz").init, ubyte pitch=ubyte.init, ubyte yaw=ubyte.init, int data=int.init, Vector!(short, "xyz") velocity=Vector!(short, "xyz").init) pure nothrow @safe @nogc
41     {
42         this.entityId = entityId;
43         this.uuid = uuid;
44         this.type = type;
45         this.position = position;
46         this.pitch = pitch;
47         this.yaw = yaw;
48         this.data = data;
49         this.velocity = velocity;
50     }
51 
52     mixin Make;
53 
54     public static typeof(this) fromBuffer(ubyte[] buffer)
55     {
56         SpawnObject ret = new SpawnObject();
57         ret.autoDecode(buffer);
58         return ret;
59     }
60 
61     override string toString()
62     {
63         return "SpawnObject(entityId: " ~ std.conv.to!string(this.entityId) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", velocity: " ~ std.conv.to!string(this.velocity) ~ ")";
64     }
65 
66 }
67 
68 class SpawnExperienceOrb : Java393Packet
69 {
70 
71     enum uint ID = 1;
72 
73     enum bool CLIENTBOUND = true;
74     enum bool SERVERBOUND = false;
75 
76     enum string[] __fields = ["entityId", "position", "count"];
77 
78     @Var uint entityId;
79     Vector!(double, "xyz") position;
80     ushort count;
81 
82     this() pure nothrow @safe @nogc {}
83 
84     this(uint entityId, Vector!(double, "xyz") position=Vector!(double, "xyz").init, ushort count=ushort.init) pure nothrow @safe @nogc
85     {
86         this.entityId = entityId;
87         this.position = position;
88         this.count = count;
89     }
90 
91     mixin Make;
92 
93     public static typeof(this) fromBuffer(ubyte[] buffer)
94     {
95         SpawnExperienceOrb ret = new SpawnExperienceOrb();
96         ret.autoDecode(buffer);
97         return ret;
98     }
99 
100     override string toString()
101     {
102         return "SpawnExperienceOrb(entityId: " ~ std.conv.to!string(this.entityId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", count: " ~ std.conv.to!string(this.count) ~ ")";
103     }
104 
105 }
106 
107 class SpawnGlobalEntity : Java393Packet
108 {
109 
110     enum uint ID = 2;
111 
112     enum bool CLIENTBOUND = true;
113     enum bool SERVERBOUND = false;
114 
115     // type
116     enum ubyte THUNDERBOLT = 1;
117 
118     enum string[] __fields = ["entityId", "type", "position"];
119 
120     @Var uint entityId;
121     ubyte type;
122     Vector!(double, "xyz") position;
123 
124     this() pure nothrow @safe @nogc {}
125 
126     this(uint entityId, ubyte type=ubyte.init, Vector!(double, "xyz") position=Vector!(double, "xyz").init) pure nothrow @safe @nogc
127     {
128         this.entityId = entityId;
129         this.type = type;
130         this.position = position;
131     }
132 
133     mixin Make;
134 
135     public static typeof(this) fromBuffer(ubyte[] buffer)
136     {
137         SpawnGlobalEntity ret = new SpawnGlobalEntity();
138         ret.autoDecode(buffer);
139         return ret;
140     }
141 
142     override string toString()
143     {
144         return "SpawnGlobalEntity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ")";
145     }
146 
147 }
148 
149 class SpawnMob : Java393Packet
150 {
151 
152     enum uint ID = 3;
153 
154     enum bool CLIENTBOUND = true;
155     enum bool SERVERBOUND = false;
156 
157     enum string[] __fields = ["entityId", "uuid", "type", "position", "yaw", "pitch", "headPitch", "velocity", "metadata"];
158 
159     @Var uint entityId;
160     UUID uuid;
161     @Var uint type;
162     Vector!(double, "xyz") position;
163     ubyte yaw;
164     ubyte pitch;
165     ubyte headPitch;
166     Vector!(short, "xyz") velocity;
167     Metadata metadata;
168 
169     this() pure nothrow @safe @nogc {}
170 
171     this(uint entityId, UUID uuid=UUID.init, uint type=uint.init, Vector!(double, "xyz") position=Vector!(double, "xyz").init, ubyte yaw=ubyte.init, ubyte pitch=ubyte.init, ubyte headPitch=ubyte.init, Vector!(short, "xyz") velocity=Vector!(short, "xyz").init, Metadata metadata=Metadata.init) pure nothrow @safe @nogc
172     {
173         this.entityId = entityId;
174         this.uuid = uuid;
175         this.type = type;
176         this.position = position;
177         this.yaw = yaw;
178         this.pitch = pitch;
179         this.headPitch = headPitch;
180         this.velocity = velocity;
181         this.metadata = metadata;
182     }
183 
184     mixin Make;
185 
186     public static typeof(this) fromBuffer(ubyte[] buffer)
187     {
188         SpawnMob ret = new SpawnMob();
189         ret.autoDecode(buffer);
190         return ret;
191     }
192 
193     override string toString()
194     {
195         return "SpawnMob(entityId: " ~ std.conv.to!string(this.entityId) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", headPitch: " ~ std.conv.to!string(this.headPitch) ~ ", velocity: " ~ std.conv.to!string(this.velocity) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ")";
196     }
197 
198 }
199 
200 class SpawnPainting : Java393Packet
201 {
202 
203     enum uint ID = 4;
204 
205     enum bool CLIENTBOUND = true;
206     enum bool SERVERBOUND = false;
207 
208     // motive
209     enum uint KEBAB = 0;
210     enum uint AZTEC = 1;
211     enum uint ALBAN = 2;
212     enum uint AZTEC2 = 3;
213     enum uint BOMB = 4;
214     enum uint PLANT = 5;
215     enum uint WASTELAND = 6;
216     enum uint POOL = 7;
217     enum uint COURBET = 8;
218     enum uint SEA = 9;
219     enum uint SUNSET = 10;
220     enum uint CREEBET = 11;
221     enum uint WANDERER = 12;
222     enum uint GRAHAM = 13;
223     enum uint MATCH = 14;
224     enum uint BUST = 15;
225     enum uint STAGE = 16;
226     enum uint VOID = 17;
227     enum uint SULL_AND_ROSES = 18;
228     enum uint WITHER = 19;
229     enum uint FIGHTERS = 20;
230     enum uint POINTER = 21;
231     enum uint PIGSCENE = 22;
232     enum uint BURNING_SKULL = 23;
233     enum uint SKELETON = 24;
234     enum uint DONKEY_KONG = 25;
235 
236     // direction
237     enum ubyte SOUTH = 0;
238     enum ubyte WEST = 1;
239     enum ubyte NORTH = 2;
240     enum ubyte EAST = 3;
241 
242     enum string[] __fields = ["entityId", "uuid", "motive", "position", "direction"];
243 
244     @Var uint entityId;
245     UUID uuid;
246     @Var uint motive;
247     ulong position;
248     ubyte direction;
249 
250     this() pure nothrow @safe @nogc {}
251 
252     this(uint entityId, UUID uuid=UUID.init, uint motive=uint.init, ulong position=ulong.init, ubyte direction=ubyte.init) pure nothrow @safe @nogc
253     {
254         this.entityId = entityId;
255         this.uuid = uuid;
256         this.motive = motive;
257         this.position = position;
258         this.direction = direction;
259     }
260 
261     mixin Make;
262 
263     public static typeof(this) fromBuffer(ubyte[] buffer)
264     {
265         SpawnPainting ret = new SpawnPainting();
266         ret.autoDecode(buffer);
267         return ret;
268     }
269 
270     override string toString()
271     {
272         return "SpawnPainting(entityId: " ~ std.conv.to!string(this.entityId) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", motive: " ~ std.conv.to!string(this.motive) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", direction: " ~ std.conv.to!string(this.direction) ~ ")";
273     }
274 
275 }
276 
277 class SpawnPlayer : Java393Packet
278 {
279 
280     enum uint ID = 5;
281 
282     enum bool CLIENTBOUND = true;
283     enum bool SERVERBOUND = false;
284 
285     enum string[] __fields = ["entityId", "uuid", "position", "yaw", "pitch", "metadata"];
286 
287     @Var uint entityId;
288     UUID uuid;
289     Vector!(double, "xyz") position;
290     ubyte yaw;
291     ubyte pitch;
292     Metadata metadata;
293 
294     this() pure nothrow @safe @nogc {}
295 
296     this(uint entityId, UUID uuid=UUID.init, Vector!(double, "xyz") position=Vector!(double, "xyz").init, ubyte yaw=ubyte.init, ubyte pitch=ubyte.init, Metadata metadata=Metadata.init) pure nothrow @safe @nogc
297     {
298         this.entityId = entityId;
299         this.uuid = uuid;
300         this.position = position;
301         this.yaw = yaw;
302         this.pitch = pitch;
303         this.metadata = metadata;
304     }
305 
306     mixin Make;
307 
308     public static typeof(this) fromBuffer(ubyte[] buffer)
309     {
310         SpawnPlayer ret = new SpawnPlayer();
311         ret.autoDecode(buffer);
312         return ret;
313     }
314 
315     override string toString()
316     {
317         return "SpawnPlayer(entityId: " ~ std.conv.to!string(this.entityId) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ")";
318     }
319 
320 }
321 
322 class Animation : Java393Packet
323 {
324 
325     enum uint ID = 6;
326 
327     enum bool CLIENTBOUND = true;
328     enum bool SERVERBOUND = false;
329 
330     // animation
331     enum ubyte SWING_MAIN_ARM = 0;
332     enum ubyte TAKE_DAMAGE = 1;
333     enum ubyte LEAVE_BED = 2;
334     enum ubyte SWING_OFFHAND = 3;
335     enum ubyte CRITICAL_EFFECT = 4;
336     enum ubyte MAGICAL_CRITICAL_EFFECT = 5;
337 
338     enum string[] __fields = ["entityId", "animation"];
339 
340     @Var uint entityId;
341     ubyte animation;
342 
343     this() pure nothrow @safe @nogc {}
344 
345     this(uint entityId, ubyte animation=ubyte.init) pure nothrow @safe @nogc
346     {
347         this.entityId = entityId;
348         this.animation = animation;
349     }
350 
351     mixin Make;
352 
353     public static typeof(this) fromBuffer(ubyte[] buffer)
354     {
355         Animation ret = new Animation();
356         ret.autoDecode(buffer);
357         return ret;
358     }
359 
360     override string toString()
361     {
362         return "Animation(entityId: " ~ std.conv.to!string(this.entityId) ~ ", animation: " ~ std.conv.to!string(this.animation) ~ ")";
363     }
364 
365 }
366 
367 class Statistics : Java393Packet
368 {
369 
370     enum uint ID = 7;
371 
372     enum bool CLIENTBOUND = true;
373     enum bool SERVERBOUND = false;
374 
375     enum string[] __fields = ["statistics"];
376 
377     soupply.java393.types.Statistic[] statistics;
378 
379     this() pure nothrow @safe @nogc {}
380 
381     this(soupply.java393.types.Statistic[] statistics) pure nothrow @safe @nogc
382     {
383         this.statistics = statistics;
384     }
385 
386     mixin Make;
387 
388     public static typeof(this) fromBuffer(ubyte[] buffer)
389     {
390         Statistics ret = new Statistics();
391         ret.autoDecode(buffer);
392         return ret;
393     }
394 
395     override string toString()
396     {
397         return "Statistics(statistics: " ~ std.conv.to!string(this.statistics) ~ ")";
398     }
399 
400 }
401 
402 class BlockBreakAnimation : Java393Packet
403 {
404 
405     enum uint ID = 8;
406 
407     enum bool CLIENTBOUND = true;
408     enum bool SERVERBOUND = false;
409 
410     enum string[] __fields = ["entityId", "position", "stage"];
411 
412     @Var uint entityId;
413     ulong position;
414     ubyte stage;
415 
416     this() pure nothrow @safe @nogc {}
417 
418     this(uint entityId, ulong position=ulong.init, ubyte stage=ubyte.init) pure nothrow @safe @nogc
419     {
420         this.entityId = entityId;
421         this.position = position;
422         this.stage = stage;
423     }
424 
425     mixin Make;
426 
427     public static typeof(this) fromBuffer(ubyte[] buffer)
428     {
429         BlockBreakAnimation ret = new BlockBreakAnimation();
430         ret.autoDecode(buffer);
431         return ret;
432     }
433 
434     override string toString()
435     {
436         return "BlockBreakAnimation(entityId: " ~ std.conv.to!string(this.entityId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", stage: " ~ std.conv.to!string(this.stage) ~ ")";
437     }
438 
439 }
440 
441 class UpdateBlockEntity : Java393Packet
442 {
443 
444     enum uint ID = 9;
445 
446     enum bool CLIENTBOUND = true;
447     enum bool SERVERBOUND = false;
448 
449     // action
450     enum ubyte MOB_SPAWNER_DATA = 1;
451     enum ubyte COMMAND_BLOCK_TEXT = 2;
452     enum ubyte BEACON_POWERS = 3;
453     enum ubyte MOB_HEAD_DATA = 4;
454     enum ubyte DECLARE_CONDUIT = 5;
455     enum ubyte BANNER_DATA = 6;
456     enum ubyte STRUCTURE_DATA = 7;
457     enum ubyte END_GATEWAY_DESTINATION = 8;
458     enum ubyte SIGN_TEXT = 9;
459     enum ubyte SHULKER_BOX_DECLARATION = 10;
460     enum ubyte DECLARE_BED = 11;
461 
462     enum string[] __fields = ["position", "action", "nbt"];
463 
464     ulong position;
465     ubyte action;
466     @Bytes ubyte[] nbt;
467 
468     this() pure nothrow @safe @nogc {}
469 
470     this(ulong position, ubyte action=ubyte.init, ubyte[] nbt=(ubyte[]).init) pure nothrow @safe @nogc
471     {
472         this.position = position;
473         this.action = action;
474         this.nbt = nbt;
475     }
476 
477     mixin Make;
478 
479     public static typeof(this) fromBuffer(ubyte[] buffer)
480     {
481         UpdateBlockEntity ret = new UpdateBlockEntity();
482         ret.autoDecode(buffer);
483         return ret;
484     }
485 
486     override string toString()
487     {
488         return "UpdateBlockEntity(position: " ~ std.conv.to!string(this.position) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", nbt: " ~ std.conv.to!string(this.nbt) ~ ")";
489     }
490 
491 }
492 
493 class BlockAction : Java393Packet
494 {
495 
496     enum uint ID = 10;
497 
498     enum bool CLIENTBOUND = true;
499     enum bool SERVERBOUND = false;
500 
501     // action
502     enum ubyte NOTE_BLOCK_HARP = 0;
503     enum ubyte NOTE_BLOCK_BASS_DRUM = 1;
504     enum ubyte NOTE_BLOCK_SNARE_DRUM = 2;
505     enum ubyte NOTE_BLOCK_CLICKS = 3;
506     enum ubyte NOTE_BLOCK_STICKS = 3;
507     enum ubyte NOTE_BLOCK_BASS_GUITAR = 4;
508     enum ubyte PISTON_EXTEND = 0;
509     enum ubyte PISTON_RETRACT = 1;
510     enum ubyte CHEST_WATCHERS = 1;
511     enum ubyte BEACON_RECALCULATE = 1;
512     enum ubyte MOB_SPAWNER_RESET_DELAY = 1;
513     enum ubyte END_GATEWAY_YELLOW_BEAM = 1;
514 
515     // parameter
516     enum ubyte PISTON_DOWN = 0;
517     enum ubyte PISTON_UP = 1;
518     enum ubyte PISTON_SOUTH = 2;
519     enum ubyte PISTON_WEST = 3;
520     enum ubyte PISTON_NORTH = 4;
521     enum ubyte PISTON_EAST = 5;
522 
523     enum string[] __fields = ["position", "action", "parameter", "blockType"];
524 
525     ulong position;
526     ubyte action;
527     ubyte parameter;
528     @Var uint blockType;
529 
530     this() pure nothrow @safe @nogc {}
531 
532     this(ulong position, ubyte action=ubyte.init, ubyte parameter=ubyte.init, uint blockType=uint.init) pure nothrow @safe @nogc
533     {
534         this.position = position;
535         this.action = action;
536         this.parameter = parameter;
537         this.blockType = blockType;
538     }
539 
540     mixin Make;
541 
542     public static typeof(this) fromBuffer(ubyte[] buffer)
543     {
544         BlockAction ret = new BlockAction();
545         ret.autoDecode(buffer);
546         return ret;
547     }
548 
549     override string toString()
550     {
551         return "BlockAction(position: " ~ std.conv.to!string(this.position) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", parameter: " ~ std.conv.to!string(this.parameter) ~ ", blockType: " ~ std.conv.to!string(this.blockType) ~ ")";
552     }
553 
554 }
555 
556 class BlockChange : Java393Packet
557 {
558 
559     enum uint ID = 11;
560 
561     enum bool CLIENTBOUND = true;
562     enum bool SERVERBOUND = false;
563 
564     enum string[] __fields = ["position", "block"];
565 
566     ulong position;
567     @Var uint block;
568 
569     this() pure nothrow @safe @nogc {}
570 
571     this(ulong position, uint block=uint.init) pure nothrow @safe @nogc
572     {
573         this.position = position;
574         this.block = block;
575     }
576 
577     mixin Make;
578 
579     public static typeof(this) fromBuffer(ubyte[] buffer)
580     {
581         BlockChange ret = new BlockChange();
582         ret.autoDecode(buffer);
583         return ret;
584     }
585 
586     override string toString()
587     {
588         return "BlockChange(position: " ~ std.conv.to!string(this.position) ~ ", block: " ~ std.conv.to!string(this.block) ~ ")";
589     }
590 
591 }
592 
593 class BossBar : Java393Packet
594 {
595 
596     enum uint ID = 12;
597 
598     enum bool CLIENTBOUND = true;
599     enum bool SERVERBOUND = false;
600 
601     enum string[] __fields = ["uuid", "action"];
602 
603     UUID uuid;
604     @Var uint action;
605 
606     this() pure nothrow @safe @nogc {}
607 
608     this(UUID uuid, uint action=uint.init) pure nothrow @safe @nogc
609     {
610         this.uuid = uuid;
611         this.action = action;
612     }
613 
614     mixin Make;
615 
616     public static typeof(this) fromBuffer(ubyte[] buffer)
617     {
618         BossBar ret = new BossBar();
619         ret.autoDecode(buffer);
620         return ret;
621     }
622 
623     override string toString()
624     {
625         return "BossBar(uuid: " ~ std.conv.to!string(this.uuid) ~ ", action: " ~ std.conv.to!string(this.action) ~ ")";
626     }
627 
628     enum string variantField = "action";
629 
630     alias Variants = TypeTuple!(Add, Remove, UpdateHealth, UpdateTitle, UpdateStyle, UpdateFlags);
631 
632     class Add : Java393Packet
633     {
634 
635         enum typeof(action) ACTION = 0;
636 
637         // color
638         enum uint PINK = 0;
639         enum uint BLUE = 1;
640         enum uint RED = 2;
641         enum uint GREEN = 3;
642         enum uint YELLOW = 4;
643         enum uint PURPLE = 5;
644         enum uint WHITE = 6;
645 
646         // division
647         enum uint NO_DIVISION = 0;
648         enum uint SIX_NOTCHES = 1;
649         enum uint TEN_NOTCHES = 2;
650         enum uint TWELVE_NOTCHES = 3;
651         enum uint TWENTY_NOTCHES = 4;
652 
653         // flags
654         enum ubyte DARK_SKY = 1;
655         enum ubyte IS_DRAGON_BAR = 2;
656 
657         enum string[] __fields = ["title", "health", "color", "division", "flags"];
658 
659         string title;
660         float health;
661         @Var uint color;
662         @Var uint division;
663         ubyte flags;
664 
665         this() pure nothrow @safe @nogc {}
666 
667         this(string title, float health=float.init, uint color=uint.init, uint division=uint.init, ubyte flags=ubyte.init) pure nothrow @safe @nogc
668         {
669             this.title = title;
670             this.health = health;
671             this.color = color;
672             this.division = division;
673             this.flags = flags;
674         }
675 
676         mixin Make;
677 
678         override string toString()
679         {
680             return "BossBar.Add(title: " ~ std.conv.to!string(this.title) ~ ", health: " ~ std.conv.to!string(this.health) ~ ", color: " ~ std.conv.to!string(this.color) ~ ", division: " ~ std.conv.to!string(this.division) ~ ", flags: " ~ std.conv.to!string(this.flags) ~ ")";
681         }
682 
683     }
684 
685     class Remove : Java393Packet
686     {
687 
688         enum typeof(action) ACTION = 1;
689 
690         enum string[] __fields = [];
691 
692         mixin Make;
693 
694         override string toString()
695         {
696             return "BossBar.Remove()";
697         }
698 
699     }
700 
701     class UpdateHealth : Java393Packet
702     {
703 
704         enum typeof(action) ACTION = 2;
705 
706         enum string[] __fields = ["health"];
707 
708         float health;
709 
710         this() pure nothrow @safe @nogc {}
711 
712         this(float health) pure nothrow @safe @nogc
713         {
714             this.health = health;
715         }
716 
717         mixin Make;
718 
719         override string toString()
720         {
721             return "BossBar.UpdateHealth(health: " ~ std.conv.to!string(this.health) ~ ")";
722         }
723 
724     }
725 
726     class UpdateTitle : Java393Packet
727     {
728 
729         enum typeof(action) ACTION = 3;
730 
731         enum string[] __fields = ["title"];
732 
733         string title;
734 
735         this() pure nothrow @safe @nogc {}
736 
737         this(string title) pure nothrow @safe @nogc
738         {
739             this.title = title;
740         }
741 
742         mixin Make;
743 
744         override string toString()
745         {
746             return "BossBar.UpdateTitle(title: " ~ std.conv.to!string(this.title) ~ ")";
747         }
748 
749     }
750 
751     class UpdateStyle : Java393Packet
752     {
753 
754         enum typeof(action) ACTION = 4;
755 
756         // color
757         enum uint PINK = 0;
758         enum uint BLUE = 1;
759         enum uint RED = 2;
760         enum uint GREEN = 3;
761         enum uint YELLOW = 4;
762         enum uint PURPLE = 5;
763         enum uint WHITE = 6;
764 
765         // division
766         enum uint NO_DIVISION = 0;
767         enum uint SIX_NOTCHES = 1;
768         enum uint TEN_NOTCHES = 2;
769         enum uint TWELVE_NOTCHES = 3;
770         enum uint TWENTY_NOTCHES = 4;
771 
772         enum string[] __fields = ["color", "division"];
773 
774         @Var uint color;
775         @Var uint division;
776 
777         this() pure nothrow @safe @nogc {}
778 
779         this(uint color, uint division=uint.init) pure nothrow @safe @nogc
780         {
781             this.color = color;
782             this.division = division;
783         }
784 
785         mixin Make;
786 
787         override string toString()
788         {
789             return "BossBar.UpdateStyle(color: " ~ std.conv.to!string(this.color) ~ ", division: " ~ std.conv.to!string(this.division) ~ ")";
790         }
791 
792     }
793 
794     class UpdateFlags : Java393Packet
795     {
796 
797         enum typeof(action) ACTION = 5;
798 
799         // flags
800         enum ubyte DARK_SKY = 1;
801         enum ubyte IS_DRAGON_BAR = 2;
802 
803         enum string[] __fields = ["flags"];
804 
805         ubyte flags;
806 
807         this() pure nothrow @safe @nogc {}
808 
809         this(ubyte flags) pure nothrow @safe @nogc
810         {
811             this.flags = flags;
812         }
813 
814         mixin Make;
815 
816         override string toString()
817         {
818             return "BossBar.UpdateFlags(flags: " ~ std.conv.to!string(this.flags) ~ ")";
819         }
820 
821     }
822 
823 }
824 
825 class ServerDifficulty : Java393Packet
826 {
827 
828     enum uint ID = 13;
829 
830     enum bool CLIENTBOUND = true;
831     enum bool SERVERBOUND = false;
832 
833     // difficulty
834     enum ubyte PEACEFUL = 0;
835     enum ubyte EASY = 1;
836     enum ubyte NORMAL = 2;
837     enum ubyte HARD = 3;
838 
839     enum string[] __fields = ["difficulty"];
840 
841     ubyte difficulty;
842 
843     this() pure nothrow @safe @nogc {}
844 
845     this(ubyte difficulty) pure nothrow @safe @nogc
846     {
847         this.difficulty = difficulty;
848     }
849 
850     mixin Make;
851 
852     public static typeof(this) fromBuffer(ubyte[] buffer)
853     {
854         ServerDifficulty ret = new ServerDifficulty();
855         ret.autoDecode(buffer);
856         return ret;
857     }
858 
859     override string toString()
860     {
861         return "ServerDifficulty(difficulty: " ~ std.conv.to!string(this.difficulty) ~ ")";
862     }
863 
864 }
865 
866 class ChatMessage : Java393Packet
867 {
868 
869     enum uint ID = 14;
870 
871     enum bool CLIENTBOUND = true;
872     enum bool SERVERBOUND = false;
873 
874     // position
875     enum ubyte CHAT = 0;
876     enum ubyte SYSTEM_MESSAGE = 1;
877     enum ubyte ABOVE_HOTBAR = 2;
878 
879     enum string[] __fields = ["message", "position"];
880 
881     string message;
882     ubyte position;
883 
884     this() pure nothrow @safe @nogc {}
885 
886     this(string message, ubyte position=ubyte.init) pure nothrow @safe @nogc
887     {
888         this.message = message;
889         this.position = position;
890     }
891 
892     mixin Make;
893 
894     public static typeof(this) fromBuffer(ubyte[] buffer)
895     {
896         ChatMessage ret = new ChatMessage();
897         ret.autoDecode(buffer);
898         return ret;
899     }
900 
901     override string toString()
902     {
903         return "ChatMessage(message: " ~ std.conv.to!string(this.message) ~ ", position: " ~ std.conv.to!string(this.position) ~ ")";
904     }
905 
906 }
907 
908 class MultiBlockChange : Java393Packet
909 {
910 
911     enum uint ID = 15;
912 
913     enum bool CLIENTBOUND = true;
914     enum bool SERVERBOUND = false;
915 
916     enum string[] __fields = ["chunk", "changes"];
917 
918     Vector!(int, "xz") chunk;
919     soupply.java393.types.BlockChange[] changes;
920 
921     this() pure nothrow @safe @nogc {}
922 
923     this(Vector!(int, "xz") chunk, soupply.java393.types.BlockChange[] changes=(soupply.java393.types.BlockChange[]).init) pure nothrow @safe @nogc
924     {
925         this.chunk = chunk;
926         this.changes = changes;
927     }
928 
929     mixin Make;
930 
931     public static typeof(this) fromBuffer(ubyte[] buffer)
932     {
933         MultiBlockChange ret = new MultiBlockChange();
934         ret.autoDecode(buffer);
935         return ret;
936     }
937 
938     override string toString()
939     {
940         return "MultiBlockChange(chunk: " ~ std.conv.to!string(this.chunk) ~ ", changes: " ~ std.conv.to!string(this.changes) ~ ")";
941     }
942 
943 }
944 
945 class TabComplete : Java393Packet
946 {
947 
948     enum uint ID = 16;
949 
950     enum bool CLIENTBOUND = true;
951     enum bool SERVERBOUND = false;
952 
953     enum string[] __fields = ["transactionId", "start", "end", "matches"];
954 
955     @Var uint transactionId;
956     @Var uint start;
957     @Var uint end;
958     soupply.java393.types.Match[] matches;
959 
960     this() pure nothrow @safe @nogc {}
961 
962     this(uint transactionId, uint start=uint.init, uint end=uint.init, soupply.java393.types.Match[] matches=(soupply.java393.types.Match[]).init) pure nothrow @safe @nogc
963     {
964         this.transactionId = transactionId;
965         this.start = start;
966         this.end = end;
967         this.matches = matches;
968     }
969 
970     mixin Make;
971 
972     public static typeof(this) fromBuffer(ubyte[] buffer)
973     {
974         TabComplete ret = new TabComplete();
975         ret.autoDecode(buffer);
976         return ret;
977     }
978 
979     override string toString()
980     {
981         return "TabComplete(transactionId: " ~ std.conv.to!string(this.transactionId) ~ ", start: " ~ std.conv.to!string(this.start) ~ ", end: " ~ std.conv.to!string(this.end) ~ ", matches: " ~ std.conv.to!string(this.matches) ~ ")";
982     }
983 
984 }
985 
986 class DeclareCommands : Java393Packet
987 {
988 
989     enum uint ID = 17;
990 
991     enum bool CLIENTBOUND = true;
992     enum bool SERVERBOUND = false;
993 
994     enum string[] __fields = ["nodes", "rootIndex"];
995 
996     soupply.java393.types.Node[] nodes;
997     @Var uint rootIndex;
998 
999     this() pure nothrow @safe @nogc {}
1000 
1001     this(soupply.java393.types.Node[] nodes, uint rootIndex=uint.init) pure nothrow @safe @nogc
1002     {
1003         this.nodes = nodes;
1004         this.rootIndex = rootIndex;
1005     }
1006 
1007     mixin Make;
1008 
1009     public static typeof(this) fromBuffer(ubyte[] buffer)
1010     {
1011         DeclareCommands ret = new DeclareCommands();
1012         ret.autoDecode(buffer);
1013         return ret;
1014     }
1015 
1016     override string toString()
1017     {
1018         return "DeclareCommands(nodes: " ~ std.conv.to!string(this.nodes) ~ ", rootIndex: " ~ std.conv.to!string(this.rootIndex) ~ ")";
1019     }
1020 
1021 }
1022 
1023 class ConfirmTransaction : Java393Packet
1024 {
1025 
1026     enum uint ID = 18;
1027 
1028     enum bool CLIENTBOUND = true;
1029     enum bool SERVERBOUND = false;
1030 
1031     enum string[] __fields = ["window", "action", "accepted"];
1032 
1033     ubyte window;
1034     ushort action;
1035     bool accepted;
1036 
1037     this() pure nothrow @safe @nogc {}
1038 
1039     this(ubyte window, ushort action=ushort.init, bool accepted=bool.init) pure nothrow @safe @nogc
1040     {
1041         this.window = window;
1042         this.action = action;
1043         this.accepted = accepted;
1044     }
1045 
1046     mixin Make;
1047 
1048     public static typeof(this) fromBuffer(ubyte[] buffer)
1049     {
1050         ConfirmTransaction ret = new ConfirmTransaction();
1051         ret.autoDecode(buffer);
1052         return ret;
1053     }
1054 
1055     override string toString()
1056     {
1057         return "ConfirmTransaction(window: " ~ std.conv.to!string(this.window) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", accepted: " ~ std.conv.to!string(this.accepted) ~ ")";
1058     }
1059 
1060 }
1061 
1062 class CloseWindow : Java393Packet
1063 {
1064 
1065     enum uint ID = 19;
1066 
1067     enum bool CLIENTBOUND = true;
1068     enum bool SERVERBOUND = false;
1069 
1070     enum string[] __fields = ["window"];
1071 
1072     ubyte window;
1073 
1074     this() pure nothrow @safe @nogc {}
1075 
1076     this(ubyte window) pure nothrow @safe @nogc
1077     {
1078         this.window = window;
1079     }
1080 
1081     mixin Make;
1082 
1083     public static typeof(this) fromBuffer(ubyte[] buffer)
1084     {
1085         CloseWindow ret = new CloseWindow();
1086         ret.autoDecode(buffer);
1087         return ret;
1088     }
1089 
1090     override string toString()
1091     {
1092         return "CloseWindow(window: " ~ std.conv.to!string(this.window) ~ ")";
1093     }
1094 
1095 }
1096 
1097 class OpenWindow : Java393Packet
1098 {
1099 
1100     enum uint ID = 20;
1101 
1102     enum bool CLIENTBOUND = true;
1103     enum bool SERVERBOUND = false;
1104 
1105     enum string[] __fields = ["window", "type", "title", "slots"];
1106 
1107     ubyte window;
1108     string type;
1109     string title;
1110     ubyte slots;
1111 
1112     this() pure nothrow @safe @nogc {}
1113 
1114     this(ubyte window, string type=string.init, string title=string.init, ubyte slots=ubyte.init) pure nothrow @safe @nogc
1115     {
1116         this.window = window;
1117         this.type = type;
1118         this.title = title;
1119         this.slots = slots;
1120     }
1121 
1122     mixin Make;
1123 
1124     public static typeof(this) fromBuffer(ubyte[] buffer)
1125     {
1126         OpenWindow ret = new OpenWindow();
1127         ret.autoDecode(buffer);
1128         return ret;
1129     }
1130 
1131     override string toString()
1132     {
1133         return "OpenWindow(window: " ~ std.conv.to!string(this.window) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", title: " ~ std.conv.to!string(this.title) ~ ", slots: " ~ std.conv.to!string(this.slots) ~ ")";
1134     }
1135 
1136 }
1137 
1138 class WindowItems : Java393Packet
1139 {
1140 
1141     enum uint ID = 21;
1142 
1143     enum bool CLIENTBOUND = true;
1144     enum bool SERVERBOUND = false;
1145 
1146     enum string[] __fields = ["window", "slots"];
1147 
1148     ubyte window;
1149     @Length!ushort soupply.java393.types.Slot[] slots;
1150 
1151     this() pure nothrow @safe @nogc {}
1152 
1153     this(ubyte window, soupply.java393.types.Slot[] slots=(soupply.java393.types.Slot[]).init) pure nothrow @safe @nogc
1154     {
1155         this.window = window;
1156         this.slots = slots;
1157     }
1158 
1159     mixin Make;
1160 
1161     public static typeof(this) fromBuffer(ubyte[] buffer)
1162     {
1163         WindowItems ret = new WindowItems();
1164         ret.autoDecode(buffer);
1165         return ret;
1166     }
1167 
1168     override string toString()
1169     {
1170         return "WindowItems(window: " ~ std.conv.to!string(this.window) ~ ", slots: " ~ std.conv.to!string(this.slots) ~ ")";
1171     }
1172 
1173 }
1174 
1175 class WindowProperty : Java393Packet
1176 {
1177 
1178     enum uint ID = 22;
1179 
1180     enum bool CLIENTBOUND = true;
1181     enum bool SERVERBOUND = false;
1182 
1183     // property
1184     enum ushort FURNANCE_FIRE_ICON = 0;
1185     enum ushort FURNACE_MAX_FUEL_BURN_TIME = 1;
1186     enum ushort FURNACE_PROGRESS_ARROW = 2;
1187     enum ushort FURNCE_MAX_PROGRESS = 3;
1188     enum ushort ENCHANTMENT_LEVEL_REQUIREMENT_TOP = 0;
1189     enum ushort ENCHANTMENT_LEVEL_REQUIREMENT_MIDDLE = 1;
1190     enum ushort ENCHANTMENT_LEVEL_REQUIREMENT_BOTTOM = 2;
1191     enum ushort ENCHANTMENT_SEED = 3;
1192     enum ushort ENCHANTMENT_ID_TOP = 4;
1193     enum ushort ENCHANTMENT_ID_MIDDLE = 5;
1194     enum ushort ENCHANTMENT_ID_BOTTOM = 6;
1195     enum ushort ENCHANTMENT_LEVEL_TOP = 7;
1196     enum ushort ENCHANTMENT_LEVEL_MIDDLE = 8;
1197     enum ushort ENCHANTMENT_LEVEL_BOTTOM = 9;
1198     enum ushort BEACON_POWER_LEVEL = 0;
1199     enum ushort BEACON_FIRST_EFFECT = 1;
1200     enum ushort BEACON_SECOND_EFFECT = 2;
1201     enum ushort ANVIL_REPAIR_COST = 0;
1202     enum ushort BREWING_STAND_BREW_TIME = 0;
1203 
1204     enum string[] __fields = ["window", "property", "value"];
1205 
1206     ubyte window;
1207     ushort property;
1208     short value;
1209 
1210     this() pure nothrow @safe @nogc {}
1211 
1212     this(ubyte window, ushort property=ushort.init, short value=short.init) pure nothrow @safe @nogc
1213     {
1214         this.window = window;
1215         this.property = property;
1216         this.value = value;
1217     }
1218 
1219     mixin Make;
1220 
1221     public static typeof(this) fromBuffer(ubyte[] buffer)
1222     {
1223         WindowProperty ret = new WindowProperty();
1224         ret.autoDecode(buffer);
1225         return ret;
1226     }
1227 
1228     override string toString()
1229     {
1230         return "WindowProperty(window: " ~ std.conv.to!string(this.window) ~ ", property: " ~ std.conv.to!string(this.property) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
1231     }
1232 
1233 }
1234 
1235 class SetSlot : Java393Packet
1236 {
1237 
1238     enum uint ID = 23;
1239 
1240     enum bool CLIENTBOUND = true;
1241     enum bool SERVERBOUND = false;
1242 
1243     enum string[] __fields = ["window", "slot", "item"];
1244 
1245     ubyte window;
1246     ushort slot;
1247     soupply.java393.types.Slot item;
1248 
1249     this() pure nothrow @safe @nogc {}
1250 
1251     this(ubyte window, ushort slot=ushort.init, soupply.java393.types.Slot item=soupply.java393.types.Slot.init) pure nothrow @safe @nogc
1252     {
1253         this.window = window;
1254         this.slot = slot;
1255         this.item = item;
1256     }
1257 
1258     mixin Make;
1259 
1260     public static typeof(this) fromBuffer(ubyte[] buffer)
1261     {
1262         SetSlot ret = new SetSlot();
1263         ret.autoDecode(buffer);
1264         return ret;
1265     }
1266 
1267     override string toString()
1268     {
1269         return "SetSlot(window: " ~ std.conv.to!string(this.window) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ", item: " ~ std.conv.to!string(this.item) ~ ")";
1270     }
1271 
1272 }
1273 
1274 class SetCooldown : Java393Packet
1275 {
1276 
1277     enum uint ID = 24;
1278 
1279     enum bool CLIENTBOUND = true;
1280     enum bool SERVERBOUND = false;
1281 
1282     enum string[] __fields = ["item", "cooldown"];
1283 
1284     @Var uint item;
1285     @Var uint cooldown;
1286 
1287     this() pure nothrow @safe @nogc {}
1288 
1289     this(uint item, uint cooldown=uint.init) pure nothrow @safe @nogc
1290     {
1291         this.item = item;
1292         this.cooldown = cooldown;
1293     }
1294 
1295     mixin Make;
1296 
1297     public static typeof(this) fromBuffer(ubyte[] buffer)
1298     {
1299         SetCooldown ret = new SetCooldown();
1300         ret.autoDecode(buffer);
1301         return ret;
1302     }
1303 
1304     override string toString()
1305     {
1306         return "SetCooldown(item: " ~ std.conv.to!string(this.item) ~ ", cooldown: " ~ std.conv.to!string(this.cooldown) ~ ")";
1307     }
1308 
1309 }
1310 
1311 class PluginMessage : Java393Packet
1312 {
1313 
1314     enum uint ID = 25;
1315 
1316     enum bool CLIENTBOUND = true;
1317     enum bool SERVERBOUND = false;
1318 
1319     enum string[] __fields = ["channel", "data"];
1320 
1321     string channel;
1322     @Bytes ubyte[] data;
1323 
1324     this() pure nothrow @safe @nogc {}
1325 
1326     this(string channel, ubyte[] data=(ubyte[]).init) pure nothrow @safe @nogc
1327     {
1328         this.channel = channel;
1329         this.data = data;
1330     }
1331 
1332     mixin Make;
1333 
1334     public static typeof(this) fromBuffer(ubyte[] buffer)
1335     {
1336         PluginMessage ret = new PluginMessage();
1337         ret.autoDecode(buffer);
1338         return ret;
1339     }
1340 
1341     override string toString()
1342     {
1343         return "PluginMessage(channel: " ~ std.conv.to!string(this.channel) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
1344     }
1345 
1346 }
1347 
1348 class NamedSoundEffect : Java393Packet
1349 {
1350 
1351     enum uint ID = 26;
1352 
1353     enum bool CLIENTBOUND = true;
1354     enum bool SERVERBOUND = false;
1355 
1356     enum string[] __fields = ["name", "category", "position", "volume", "pitch"];
1357 
1358     string name;
1359     @Var uint category;
1360     Vector!(int, "xyz") position;
1361     float volume;
1362     float pitch;
1363 
1364     this() pure nothrow @safe @nogc {}
1365 
1366     this(string name, uint category=uint.init, Vector!(int, "xyz") position=Vector!(int, "xyz").init, float volume=float.init, float pitch=float.init) pure nothrow @safe @nogc
1367     {
1368         this.name = name;
1369         this.category = category;
1370         this.position = position;
1371         this.volume = volume;
1372         this.pitch = pitch;
1373     }
1374 
1375     mixin Make;
1376 
1377     public static typeof(this) fromBuffer(ubyte[] buffer)
1378     {
1379         NamedSoundEffect ret = new NamedSoundEffect();
1380         ret.autoDecode(buffer);
1381         return ret;
1382     }
1383 
1384     override string toString()
1385     {
1386         return "NamedSoundEffect(name: " ~ std.conv.to!string(this.name) ~ ", category: " ~ std.conv.to!string(this.category) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", volume: " ~ std.conv.to!string(this.volume) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ")";
1387     }
1388 
1389 }
1390 
1391 class Disconnect : Java393Packet
1392 {
1393 
1394     enum uint ID = 27;
1395 
1396     enum bool CLIENTBOUND = true;
1397     enum bool SERVERBOUND = false;
1398 
1399     enum string[] __fields = ["reason"];
1400 
1401     string reason;
1402 
1403     this() pure nothrow @safe @nogc {}
1404 
1405     this(string reason) pure nothrow @safe @nogc
1406     {
1407         this.reason = reason;
1408     }
1409 
1410     mixin Make;
1411 
1412     public static typeof(this) fromBuffer(ubyte[] buffer)
1413     {
1414         Disconnect ret = new Disconnect();
1415         ret.autoDecode(buffer);
1416         return ret;
1417     }
1418 
1419     override string toString()
1420     {
1421         return "Disconnect(reason: " ~ std.conv.to!string(this.reason) ~ ")";
1422     }
1423 
1424 }
1425 
1426 class EntityStatus : Java393Packet
1427 {
1428 
1429     enum uint ID = 28;
1430 
1431     enum bool CLIENTBOUND = true;
1432     enum bool SERVERBOUND = false;
1433 
1434     // status
1435     enum ubyte SPAWN_TIPPED_ARROW_PARTICLE_EFFECTS = 0;
1436     enum ubyte PLAY_JUMPING_ANIMATION_AND_PARTICLES = 1;
1437     enum ubyte RESET_SPAWNER_DELAY = 1;
1438     enum ubyte PLAY_HURT_ANIMATION_AND_SOUND = 2;
1439     enum ubyte PLAY_DEATH_ANIMATION_AND_SOUND = 3;
1440     enum ubyte PLAY_ATTACK_ANIMATION_AND_SOUND = 4;
1441     enum ubyte SPAWN_SMOKE_PARTICLES = 6;
1442     enum ubyte SPAWN_HEART_PARTICLES = 7;
1443     enum ubyte PLAY_SHAKING_WATER_ANIMATION = 8;
1444     enum ubyte FINISHED_CONSUMING = 9;
1445     enum ubyte PLAY_EATING_GRASS_ANIMATION = 10;
1446     enum ubyte IGNITE_MINECART_TNT = 10;
1447     enum ubyte HOLD_POPPY = 11;
1448     enum ubyte SPAWN_VILLAGER_MATING_HEART_PARTICLES = 12;
1449     enum ubyte SPAWN_VILLAGER_ANGRY_PARTICLES = 13;
1450     enum ubyte SPAWN_VILLAGER_HAPPY_PARTICLES = 14;
1451     enum ubyte SPAWN_WITCH_MAGIC_PARTICLES = 15;
1452     enum ubyte PLAY_ZOMBIE_CURE_FINISHED_SOUND = 16;
1453     enum ubyte SPAWN_FIREWORK_EXPLOSION_EFFECT = 17;
1454     enum ubyte SPAWN_LOVE_PARTICLES = 18;
1455     enum ubyte RESET_SQUID_ROTATION = 19;
1456     enum ubyte SPAWN_EXPLOSION_PARTICLES = 20;
1457     enum ubyte PLAY_GUARDIAN_SOUND_EFFECT = 21;
1458     enum ubyte ENABLE_REDUCED_DEBUG_SCREEN = 22;
1459     enum ubyte DISABLE_REDUCED_DEBUG_SCREEN = 23;
1460     enum ubyte SET_OP_PERMISSION_LEVEL_0 = 24;
1461     enum ubyte SET_OP_PERMISSION_LEVEL_1 = 25;
1462     enum ubyte SET_OP_PERMISSION_LEVEL_2 = 26;
1463     enum ubyte SET_OP_PERMISSION_LEVEL_3 = 27;
1464     enum ubyte SET_OP_PERMISSION_LEVEL_4 = 28;
1465     enum ubyte PLAY_SHIELD_BLOCK_SOUND = 29;
1466     enum ubyte PLAY_SHIELD_BREAK_SOUND = 30;
1467     enum ubyte HOOK_KNOCKBACK = 31;
1468     enum ubyte PLAY_HIT_SOUND = 32;
1469     enum ubyte PLAY_THORNS_HURT_ANIMATION_AND_SOUND = 33;
1470     enum ubyte REMOVE_POPPY = 34;
1471     enum ubyte PLAY_TOTEM_UNDYING_ANIMATION = 35;
1472 
1473     enum string[] __fields = ["entityId", "status"];
1474 
1475     uint entityId;
1476     ubyte status;
1477 
1478     this() pure nothrow @safe @nogc {}
1479 
1480     this(uint entityId, ubyte status=ubyte.init) pure nothrow @safe @nogc
1481     {
1482         this.entityId = entityId;
1483         this.status = status;
1484     }
1485 
1486     mixin Make;
1487 
1488     public static typeof(this) fromBuffer(ubyte[] buffer)
1489     {
1490         EntityStatus ret = new EntityStatus();
1491         ret.autoDecode(buffer);
1492         return ret;
1493     }
1494 
1495     override string toString()
1496     {
1497         return "EntityStatus(entityId: " ~ std.conv.to!string(this.entityId) ~ ", status: " ~ std.conv.to!string(this.status) ~ ")";
1498     }
1499 
1500 }
1501 
1502 class NbtQueryResponse : Java393Packet
1503 {
1504 
1505     enum uint ID = 29;
1506 
1507     enum bool CLIENTBOUND = true;
1508     enum bool SERVERBOUND = false;
1509 
1510     enum string[] __fields = ["transactionId", "nbt"];
1511 
1512     @Var uint transactionId;
1513     @Bytes ubyte[] nbt;
1514 
1515     this() pure nothrow @safe @nogc {}
1516 
1517     this(uint transactionId, ubyte[] nbt=(ubyte[]).init) pure nothrow @safe @nogc
1518     {
1519         this.transactionId = transactionId;
1520         this.nbt = nbt;
1521     }
1522 
1523     mixin Make;
1524 
1525     public static typeof(this) fromBuffer(ubyte[] buffer)
1526     {
1527         NbtQueryResponse ret = new NbtQueryResponse();
1528         ret.autoDecode(buffer);
1529         return ret;
1530     }
1531 
1532     override string toString()
1533     {
1534         return "NbtQueryResponse(transactionId: " ~ std.conv.to!string(this.transactionId) ~ ", nbt: " ~ std.conv.to!string(this.nbt) ~ ")";
1535     }
1536 
1537 }
1538 
1539 class Explosion : Java393Packet
1540 {
1541 
1542     enum uint ID = 30;
1543 
1544     enum bool CLIENTBOUND = true;
1545     enum bool SERVERBOUND = false;
1546 
1547     enum string[] __fields = ["position", "radius", "records", "motion"];
1548 
1549     Vector!(float, "xyz") position;
1550     float radius;
1551     @Length!uint Vector!(byte, "xyz")[] records;
1552     Vector!(float, "xyz") motion;
1553 
1554     this() pure nothrow @safe @nogc {}
1555 
1556     this(Vector!(float, "xyz") position, float radius=float.init, Vector!(byte, "xyz")[] records=(Vector!(byte, "xyz")[]).init, Vector!(float, "xyz") motion=Vector!(float, "xyz").init) pure nothrow @safe @nogc
1557     {
1558         this.position = position;
1559         this.radius = radius;
1560         this.records = records;
1561         this.motion = motion;
1562     }
1563 
1564     mixin Make;
1565 
1566     public static typeof(this) fromBuffer(ubyte[] buffer)
1567     {
1568         Explosion ret = new Explosion();
1569         ret.autoDecode(buffer);
1570         return ret;
1571     }
1572 
1573     override string toString()
1574     {
1575         return "Explosion(position: " ~ std.conv.to!string(this.position) ~ ", radius: " ~ std.conv.to!string(this.radius) ~ ", records: " ~ std.conv.to!string(this.records) ~ ", motion: " ~ std.conv.to!string(this.motion) ~ ")";
1576     }
1577 
1578 }
1579 
1580 class UnloadChunk : Java393Packet
1581 {
1582 
1583     enum uint ID = 31;
1584 
1585     enum bool CLIENTBOUND = true;
1586     enum bool SERVERBOUND = false;
1587 
1588     enum string[] __fields = ["position"];
1589 
1590     Vector!(int, "xz") position;
1591 
1592     this() pure nothrow @safe @nogc {}
1593 
1594     this(Vector!(int, "xz") position) pure nothrow @safe @nogc
1595     {
1596         this.position = position;
1597     }
1598 
1599     mixin Make;
1600 
1601     public static typeof(this) fromBuffer(ubyte[] buffer)
1602     {
1603         UnloadChunk ret = new UnloadChunk();
1604         ret.autoDecode(buffer);
1605         return ret;
1606     }
1607 
1608     override string toString()
1609     {
1610         return "UnloadChunk(position: " ~ std.conv.to!string(this.position) ~ ")";
1611     }
1612 
1613 }
1614 
1615 class ChangeGameState : Java393Packet
1616 {
1617 
1618     enum uint ID = 32;
1619 
1620     enum bool CLIENTBOUND = true;
1621     enum bool SERVERBOUND = false;
1622 
1623     // reason
1624     enum ubyte INVALID_BED = 0;
1625     enum ubyte END_RAINING = 1;
1626     enum ubyte BEGIN_RAINING = 2;
1627     enum ubyte CHANGE_GAMEMODE = 3;
1628     enum ubyte EXIT_END = 4;
1629     enum ubyte DEMO_MESSAGE = 5;
1630     enum ubyte ARROW_HITTING_PLAYER = 6;
1631     enum ubyte FADE_VALUE = 7;
1632     enum ubyte FADE_TIME = 8;
1633     enum ubyte PLAY_ELDER_GUARDIAN_MOB_APPEARANCE = 10;
1634 
1635     // value
1636     enum float SURVIVAL = 0;
1637     enum float CREATIVE = 1;
1638     enum float ADVENTURE = 2;
1639     enum float SPECTATOR = 3;
1640     enum float RESPAWN_IMMEDIATELY = 0;
1641     enum float RESPAWN_AFTER_CREDITS = 1;
1642     enum float SHOW_DEMO_SCREEN = 0;
1643     enum float TELL_MOVEMENT_CONTROLS = 101;
1644     enum float TELL_JUMP_CONTROLS = 102;
1645     enum float TELL_INVENTORY_CONTROLS = 103;
1646     enum float BRIGHT = 0;
1647     enum float DARK = 1;
1648 
1649     enum string[] __fields = ["reason", "value"];
1650 
1651     ubyte reason;
1652     float value;
1653 
1654     this() pure nothrow @safe @nogc {}
1655 
1656     this(ubyte reason, float value=float.init) pure nothrow @safe @nogc
1657     {
1658         this.reason = reason;
1659         this.value = value;
1660     }
1661 
1662     mixin Make;
1663 
1664     public static typeof(this) fromBuffer(ubyte[] buffer)
1665     {
1666         ChangeGameState ret = new ChangeGameState();
1667         ret.autoDecode(buffer);
1668         return ret;
1669     }
1670 
1671     override string toString()
1672     {
1673         return "ChangeGameState(reason: " ~ std.conv.to!string(this.reason) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
1674     }
1675 
1676 }
1677 
1678 class KeepAlive : Java393Packet
1679 {
1680 
1681     enum uint ID = 33;
1682 
1683     enum bool CLIENTBOUND = true;
1684     enum bool SERVERBOUND = false;
1685 
1686     enum string[] __fields = ["id"];
1687 
1688     long id;
1689 
1690     this() pure nothrow @safe @nogc {}
1691 
1692     this(long id) pure nothrow @safe @nogc
1693     {
1694         this.id = id;
1695     }
1696 
1697     mixin Make;
1698 
1699     public static typeof(this) fromBuffer(ubyte[] buffer)
1700     {
1701         KeepAlive ret = new KeepAlive();
1702         ret.autoDecode(buffer);
1703         return ret;
1704     }
1705 
1706     override string toString()
1707     {
1708         return "KeepAlive(id: " ~ std.conv.to!string(this.id) ~ ")";
1709     }
1710 
1711 }
1712 
1713 class ChunkData : Java393Packet
1714 {
1715 
1716     enum uint ID = 34;
1717 
1718     enum bool CLIENTBOUND = true;
1719     enum bool SERVERBOUND = false;
1720 
1721     enum string[] __fields = ["position", "full", "sections", "data", "tilesCount", "tiles"];
1722 
1723     Vector!(int, "xz") position;
1724     bool full;
1725     @Var uint sections;
1726     ubyte[] data;
1727     @Var uint tilesCount;
1728     @Bytes ubyte[] tiles;
1729 
1730     this() pure nothrow @safe @nogc {}
1731 
1732     this(Vector!(int, "xz") position, bool full=bool.init, uint sections=uint.init, ubyte[] data=(ubyte[]).init, uint tilesCount=uint.init, ubyte[] tiles=(ubyte[]).init) pure nothrow @safe @nogc
1733     {
1734         this.position = position;
1735         this.full = full;
1736         this.sections = sections;
1737         this.data = data;
1738         this.tilesCount = tilesCount;
1739         this.tiles = tiles;
1740     }
1741 
1742     mixin Make;
1743 
1744     public static typeof(this) fromBuffer(ubyte[] buffer)
1745     {
1746         ChunkData ret = new ChunkData();
1747         ret.autoDecode(buffer);
1748         return ret;
1749     }
1750 
1751     override string toString()
1752     {
1753         return "ChunkData(position: " ~ std.conv.to!string(this.position) ~ ", full: " ~ std.conv.to!string(this.full) ~ ", sections: " ~ std.conv.to!string(this.sections) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", tilesCount: " ~ std.conv.to!string(this.tilesCount) ~ ", tiles: " ~ std.conv.to!string(this.tiles) ~ ")";
1754     }
1755 
1756 }
1757 
1758 class Effect : Java393Packet
1759 {
1760 
1761     enum uint ID = 35;
1762 
1763     enum bool CLIENTBOUND = true;
1764     enum bool SERVERBOUND = false;
1765 
1766     // effect id
1767     enum uint DISPENSER_DISPENSE = 1000;
1768     enum uint DISPENSER_FAIL_DISPENSE = 1001;
1769     enum uint DISPENSER_SHOOT = 1002;
1770     enum uint ENDER_EYE_LAUNCH = 1003;
1771     enum uint FIREWORK_SHOT = 1004;
1772     enum uint IRON_DOOR_OPEN = 1005;
1773     enum uint WOODEN_DOOR_OPEN = 1006;
1774     enum uint WOODEN_TRAPDOOR_OPEN = 1007;
1775     enum uint FENCE_GATE_OPEN = 1008;
1776     enum uint FIRE_EXTINGUISH = 1009;
1777     enum uint PLAY_RECORD = 1010;
1778     enum uint IRON_DOOR_CLOSE = 1011;
1779     enum uint WOODEN_DOOR_CLOSE = 1012;
1780     enum uint WOODEN_TRAPDOOR_CLOSE = 1013;
1781     enum uint FENCE_GATE_CLOSE = 1014;
1782     enum uint GHAST_WARN = 1015;
1783     enum uint GHAST_SHOOT = 1016;
1784     enum uint ENDERDRAGON_SHOOT = 1017;
1785     enum uint BLAZE_SHOOT = 1018;
1786     enum uint ZOMBIE_ATTACK_WOOD_DOOR = 1019;
1787     enum uint ZOMBIE_ATTACK_IRON_DOOR = 1020;
1788     enum uint ZOMBIE_BREAK_WOOD_DOOR = 1021;
1789     enum uint WITHER_BREAK_BLOCK = 1022;
1790     enum uint WITHER_SPAWN = 1023;
1791     enum uint WITHER_SHOOT = 1024;
1792     enum uint BAT_TAKE_OFF = 1025;
1793     enum uint ZOMBIE_INFECT_VILLAGER = 1026;
1794     enum uint ZOMBIE_VILLAGER_CONVERT = 1027;
1795     enum uint ENDER_DRAGON_BREATH = 1028;
1796     enum uint ANVIL_BREAK = 1029;
1797     enum uint ANVIL_USE = 1030;
1798     enum uint ANVIL_LAND = 1031;
1799     enum uint PORTAL_TRAVEL = 1032;
1800     enum uint CHORUS_FLOWER_GROW = 1033;
1801     enum uint CHORUS_FLOWER_DIE = 1034;
1802     enum uint BREWING_STAND_BREW = 1035;
1803     enum uint IRON_TRAPDOOR_OPEN = 1036;
1804     enum uint IRON_TRAPDOOR_CLOSE = 1037;
1805     enum uint SPAWN_10_SMOKE_PARTICLES = 2000;
1806     enum uint BREAK_BREAK_PARTICLES_AND_SOUND = 2001;
1807     enum uint SPLASH_POTION_PARTICLES_AND_SOUND = 2002;
1808     enum uint ENDER_EYE_BREAK_PARTICLES_AND_SOUND = 2003;
1809     enum uint MOB_SPAWN_PARTICLES = 2004;
1810     enum uint BONEMEAL_PARTICLES = 2005;
1811     enum uint DRAGON_BREATH = 2006;
1812     enum uint END_GATEWAY_SPAWN = 3000;
1813     enum uint ENDERDRAGON_GROWL = 3001;
1814 
1815     enum string[] __fields = ["effectId", "position", "data", "disableVolume"];
1816 
1817     uint effectId;
1818     ulong position;
1819     uint data;
1820     bool disableVolume;
1821 
1822     this() pure nothrow @safe @nogc {}
1823 
1824     this(uint effectId, ulong position=ulong.init, uint data=uint.init, bool disableVolume=bool.init) pure nothrow @safe @nogc
1825     {
1826         this.effectId = effectId;
1827         this.position = position;
1828         this.data = data;
1829         this.disableVolume = disableVolume;
1830     }
1831 
1832     mixin Make;
1833 
1834     public static typeof(this) fromBuffer(ubyte[] buffer)
1835     {
1836         Effect ret = new Effect();
1837         ret.autoDecode(buffer);
1838         return ret;
1839     }
1840 
1841     override string toString()
1842     {
1843         return "Effect(effectId: " ~ std.conv.to!string(this.effectId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", disableVolume: " ~ std.conv.to!string(this.disableVolume) ~ ")";
1844     }
1845 
1846 }
1847 
1848 class SpawnParticle : Java393Packet
1849 {
1850 
1851     enum uint ID = 36;
1852 
1853     enum bool CLIENTBOUND = true;
1854     enum bool SERVERBOUND = false;
1855 
1856     // particle id
1857     enum uint EXPLODE = 0;
1858     enum uint LARGE_EXPLOSION = 1;
1859     enum uint HUGE_EXPLOSION = 2;
1860     enum uint FIREWORK_SPARK = 3;
1861     enum uint BUBBLE = 4;
1862     enum uint SPLASH = 5;
1863     enum uint WAKE = 6;
1864     enum uint SUSPENDED = 7;
1865     enum uint DEPTH_SUSPEND = 8;
1866     enum uint CRIT = 9;
1867     enum uint MAGIC_CRIT = 10;
1868     enum uint SMOKE = 11;
1869     enum uint LARGE_SMOKE = 12;
1870     enum uint SPELL = 13;
1871     enum uint INSTANT_SPELL = 14;
1872     enum uint MOB_SPELL = 15;
1873     enum uint MOB_SPELL_AMBIENT = 16;
1874     enum uint WITCH_MAGIC = 17;
1875     enum uint DRIP_WATER = 18;
1876     enum uint DRIP_LAVA = 19;
1877     enum uint ANGRY_VILLAGER = 20;
1878     enum uint HAPPY_VILLAGER = 21;
1879     enum uint TOWN_AURA = 22;
1880     enum uint NOTE = 23;
1881     enum uint PORTAL = 24;
1882     enum uint ENCHANTMENT_TABLE = 25;
1883     enum uint FLAME = 26;
1884     enum uint LAVA = 27;
1885     enum uint FOOTSTEP = 28;
1886     enum uint CLOUD = 29;
1887     enum uint RED_DUST = 30;
1888     enum uint SNOWBALL_POOF = 31;
1889     enum uint SNOW_SHOVEL = 32;
1890     enum uint SLIME = 33;
1891     enum uint HEART = 34;
1892     enum uint BARRIER = 35;
1893     enum uint ITEM_CRACK = 36;
1894     enum uint BLOCK_CRACK = 37;
1895     enum uint BLOCK_DUST = 38;
1896     enum uint DROPLET = 39;
1897     enum uint TAKE = 40;
1898     enum uint MOB_APPEARANCE = 41;
1899     enum uint DRAGON_BREATH = 42;
1900     enum uint ENDROD = 43;
1901     enum uint DAMAGE_INDICATOR = 44;
1902     enum uint SWEEP_ATTACK = 45;
1903     enum uint FALLING_DUST = 46;
1904 
1905     enum string[] __fields = ["particleId", "longDistance", "position", "offset", "data", "count", "additionalData"];
1906 
1907     uint particleId;
1908     bool longDistance;
1909     Vector!(float, "xyz") position;
1910     Vector!(float, "xyz") offset;
1911     float data;
1912     uint count;
1913     @Bytes ubyte[] additionalData;
1914 
1915     this() pure nothrow @safe @nogc {}
1916 
1917     this(uint particleId, bool longDistance=bool.init, Vector!(float, "xyz") position=Vector!(float, "xyz").init, Vector!(float, "xyz") offset=Vector!(float, "xyz").init, float data=float.init, uint count=uint.init, ubyte[] additionalData=(ubyte[]).init) pure nothrow @safe @nogc
1918     {
1919         this.particleId = particleId;
1920         this.longDistance = longDistance;
1921         this.position = position;
1922         this.offset = offset;
1923         this.data = data;
1924         this.count = count;
1925         this.additionalData = additionalData;
1926     }
1927 
1928     mixin Make;
1929 
1930     public static typeof(this) fromBuffer(ubyte[] buffer)
1931     {
1932         SpawnParticle ret = new SpawnParticle();
1933         ret.autoDecode(buffer);
1934         return ret;
1935     }
1936 
1937     override string toString()
1938     {
1939         return "SpawnParticle(particleId: " ~ std.conv.to!string(this.particleId) ~ ", longDistance: " ~ std.conv.to!string(this.longDistance) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", offset: " ~ std.conv.to!string(this.offset) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", count: " ~ std.conv.to!string(this.count) ~ ", additionalData: " ~ std.conv.to!string(this.additionalData) ~ ")";
1940     }
1941 
1942 }
1943 
1944 class JoinGame : Java393Packet
1945 {
1946 
1947     enum uint ID = 37;
1948 
1949     enum bool CLIENTBOUND = true;
1950     enum bool SERVERBOUND = false;
1951 
1952     // gamemode
1953     enum ubyte SURVIVAL = 0;
1954     enum ubyte CREATIVE = 1;
1955     enum ubyte ADVENTURE = 2;
1956     enum ubyte SPECTATOR = 3;
1957 
1958     // dimension
1959     enum int NETHER = -1;
1960     enum int OVERWORLD = 0;
1961     enum int END = 1;
1962 
1963     // difficulty
1964     enum ubyte PEACEFUL = 0;
1965     enum ubyte EASY = 1;
1966     enum ubyte NORMAL = 2;
1967     enum ubyte HARD = 3;
1968 
1969     // level type
1970     enum string INFINITY = "default";
1971     enum string FLAT = "flat";
1972     enum string AMPLIFIED = "amplified";
1973     enum string LARGE_BIOMES = "largeBiomes";
1974 
1975     enum string[] __fields = ["entityId", "gamemode", "dimension", "difficulty", "maxPlayers", "levelType", "reducedDebug"];
1976 
1977     uint entityId;
1978     ubyte gamemode;
1979     int dimension;
1980     ubyte difficulty;
1981     ubyte maxPlayers;
1982     string levelType;
1983     bool reducedDebug;
1984 
1985     this() pure nothrow @safe @nogc {}
1986 
1987     this(uint entityId, ubyte gamemode=ubyte.init, int dimension=int.init, ubyte difficulty=ubyte.init, ubyte maxPlayers=ubyte.init, string levelType=string.init, bool reducedDebug=bool.init) pure nothrow @safe @nogc
1988     {
1989         this.entityId = entityId;
1990         this.gamemode = gamemode;
1991         this.dimension = dimension;
1992         this.difficulty = difficulty;
1993         this.maxPlayers = maxPlayers;
1994         this.levelType = levelType;
1995         this.reducedDebug = reducedDebug;
1996     }
1997 
1998     mixin Make;
1999 
2000     public static typeof(this) fromBuffer(ubyte[] buffer)
2001     {
2002         JoinGame ret = new JoinGame();
2003         ret.autoDecode(buffer);
2004         return ret;
2005     }
2006 
2007     override string toString()
2008     {
2009         return "JoinGame(entityId: " ~ std.conv.to!string(this.entityId) ~ ", gamemode: " ~ std.conv.to!string(this.gamemode) ~ ", dimension: " ~ std.conv.to!string(this.dimension) ~ ", difficulty: " ~ std.conv.to!string(this.difficulty) ~ ", maxPlayers: " ~ std.conv.to!string(this.maxPlayers) ~ ", levelType: " ~ std.conv.to!string(this.levelType) ~ ", reducedDebug: " ~ std.conv.to!string(this.reducedDebug) ~ ")";
2010     }
2011 
2012 }
2013 
2014 class Map : Java393Packet
2015 {
2016 
2017     enum uint ID = 38;
2018 
2019     enum bool CLIENTBOUND = true;
2020     enum bool SERVERBOUND = false;
2021 
2022     enum string[] __fields = ["mapId", "scale", "showIcons", "icons", "colums", "rows", "offset", "data"];
2023 
2024     @Var uint mapId;
2025     ubyte scale;
2026     bool showIcons;
2027     soupply.java393.types.Icon[] icons;
2028     ubyte colums;
2029     ubyte rows;
2030     Vector!(ubyte, "xz") offset;
2031     ubyte[] data;
2032 
2033     this() pure nothrow @safe @nogc {}
2034 
2035     this(uint mapId, ubyte scale=ubyte.init, bool showIcons=bool.init, soupply.java393.types.Icon[] icons=(soupply.java393.types.Icon[]).init, ubyte colums=ubyte.init, ubyte rows=ubyte.init, Vector!(ubyte, "xz") offset=Vector!(ubyte, "xz").init, ubyte[] data=(ubyte[]).init) pure nothrow @safe @nogc
2036     {
2037         this.mapId = mapId;
2038         this.scale = scale;
2039         this.showIcons = showIcons;
2040         this.icons = icons;
2041         this.colums = colums;
2042         this.rows = rows;
2043         this.offset = offset;
2044         this.data = data;
2045     }
2046 
2047     mixin Make;
2048 
2049     public static typeof(this) fromBuffer(ubyte[] buffer)
2050     {
2051         Map ret = new Map();
2052         ret.autoDecode(buffer);
2053         return ret;
2054     }
2055 
2056     override string toString()
2057     {
2058         return "Map(mapId: " ~ std.conv.to!string(this.mapId) ~ ", scale: " ~ std.conv.to!string(this.scale) ~ ", showIcons: " ~ std.conv.to!string(this.showIcons) ~ ", icons: " ~ std.conv.to!string(this.icons) ~ ", colums: " ~ std.conv.to!string(this.colums) ~ ", rows: " ~ std.conv.to!string(this.rows) ~ ", offset: " ~ std.conv.to!string(this.offset) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
2059     }
2060 
2061 }
2062 
2063 class Entity : Java393Packet
2064 {
2065 
2066     enum uint ID = 39;
2067 
2068     enum bool CLIENTBOUND = true;
2069     enum bool SERVERBOUND = false;
2070 
2071     enum string[] __fields = ["entityId"];
2072 
2073     @Var uint entityId;
2074 
2075     this() pure nothrow @safe @nogc {}
2076 
2077     this(uint entityId) pure nothrow @safe @nogc
2078     {
2079         this.entityId = entityId;
2080     }
2081 
2082     mixin Make;
2083 
2084     public static typeof(this) fromBuffer(ubyte[] buffer)
2085     {
2086         Entity ret = new Entity();
2087         ret.autoDecode(buffer);
2088         return ret;
2089     }
2090 
2091     override string toString()
2092     {
2093         return "Entity(entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
2094     }
2095 
2096 }
2097 
2098 class EntityRelativeMove : Java393Packet
2099 {
2100 
2101     enum uint ID = 40;
2102 
2103     enum bool CLIENTBOUND = true;
2104     enum bool SERVERBOUND = false;
2105 
2106     enum string[] __fields = ["entityId", "delta", "onGround"];
2107 
2108     @Var uint entityId;
2109     Vector!(short, "xyz") delta;
2110     bool onGround;
2111 
2112     this() pure nothrow @safe @nogc {}
2113 
2114     this(uint entityId, Vector!(short, "xyz") delta=Vector!(short, "xyz").init, bool onGround=bool.init) pure nothrow @safe @nogc
2115     {
2116         this.entityId = entityId;
2117         this.delta = delta;
2118         this.onGround = onGround;
2119     }
2120 
2121     mixin Make;
2122 
2123     public static typeof(this) fromBuffer(ubyte[] buffer)
2124     {
2125         EntityRelativeMove ret = new EntityRelativeMove();
2126         ret.autoDecode(buffer);
2127         return ret;
2128     }
2129 
2130     override string toString()
2131     {
2132         return "EntityRelativeMove(entityId: " ~ std.conv.to!string(this.entityId) ~ ", delta: " ~ std.conv.to!string(this.delta) ~ ", onGround: " ~ std.conv.to!string(this.onGround) ~ ")";
2133     }
2134 
2135 }
2136 
2137 class EntityLookAndRelativeMove : Java393Packet
2138 {
2139 
2140     enum uint ID = 41;
2141 
2142     enum bool CLIENTBOUND = true;
2143     enum bool SERVERBOUND = false;
2144 
2145     enum string[] __fields = ["entityId", "delta", "yaw", "pitch", "onGround"];
2146 
2147     @Var uint entityId;
2148     Vector!(short, "xyz") delta;
2149     ubyte yaw;
2150     ubyte pitch;
2151     bool onGround;
2152 
2153     this() pure nothrow @safe @nogc {}
2154 
2155     this(uint entityId, Vector!(short, "xyz") delta=Vector!(short, "xyz").init, ubyte yaw=ubyte.init, ubyte pitch=ubyte.init, bool onGround=bool.init) pure nothrow @safe @nogc
2156     {
2157         this.entityId = entityId;
2158         this.delta = delta;
2159         this.yaw = yaw;
2160         this.pitch = pitch;
2161         this.onGround = onGround;
2162     }
2163 
2164     mixin Make;
2165 
2166     public static typeof(this) fromBuffer(ubyte[] buffer)
2167     {
2168         EntityLookAndRelativeMove ret = new EntityLookAndRelativeMove();
2169         ret.autoDecode(buffer);
2170         return ret;
2171     }
2172 
2173     override string toString()
2174     {
2175         return "EntityLookAndRelativeMove(entityId: " ~ std.conv.to!string(this.entityId) ~ ", delta: " ~ std.conv.to!string(this.delta) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", onGround: " ~ std.conv.to!string(this.onGround) ~ ")";
2176     }
2177 
2178 }
2179 
2180 class EntityLook : Java393Packet
2181 {
2182 
2183     enum uint ID = 42;
2184 
2185     enum bool CLIENTBOUND = true;
2186     enum bool SERVERBOUND = false;
2187 
2188     enum string[] __fields = ["entityId", "yaw", "pitch", "onGround"];
2189 
2190     @Var uint entityId;
2191     ubyte yaw;
2192     ubyte pitch;
2193     bool onGround;
2194 
2195     this() pure nothrow @safe @nogc {}
2196 
2197     this(uint entityId, ubyte yaw=ubyte.init, ubyte pitch=ubyte.init, bool onGround=bool.init) pure nothrow @safe @nogc
2198     {
2199         this.entityId = entityId;
2200         this.yaw = yaw;
2201         this.pitch = pitch;
2202         this.onGround = onGround;
2203     }
2204 
2205     mixin Make;
2206 
2207     public static typeof(this) fromBuffer(ubyte[] buffer)
2208     {
2209         EntityLook ret = new EntityLook();
2210         ret.autoDecode(buffer);
2211         return ret;
2212     }
2213 
2214     override string toString()
2215     {
2216         return "EntityLook(entityId: " ~ std.conv.to!string(this.entityId) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", onGround: " ~ std.conv.to!string(this.onGround) ~ ")";
2217     }
2218 
2219 }
2220 
2221 class VehicleMove : Java393Packet
2222 {
2223 
2224     enum uint ID = 43;
2225 
2226     enum bool CLIENTBOUND = true;
2227     enum bool SERVERBOUND = false;
2228 
2229     enum string[] __fields = ["position", "yaw", "pitch"];
2230 
2231     Vector!(double, "xyz") position;
2232     float yaw;
2233     float pitch;
2234 
2235     this() pure nothrow @safe @nogc {}
2236 
2237     this(Vector!(double, "xyz") position, float yaw=float.init, float pitch=float.init) pure nothrow @safe @nogc
2238     {
2239         this.position = position;
2240         this.yaw = yaw;
2241         this.pitch = pitch;
2242     }
2243 
2244     mixin Make;
2245 
2246     public static typeof(this) fromBuffer(ubyte[] buffer)
2247     {
2248         VehicleMove ret = new VehicleMove();
2249         ret.autoDecode(buffer);
2250         return ret;
2251     }
2252 
2253     override string toString()
2254     {
2255         return "VehicleMove(position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ")";
2256     }
2257 
2258 }
2259 
2260 class OpenSignEditor : Java393Packet
2261 {
2262 
2263     enum uint ID = 44;
2264 
2265     enum bool CLIENTBOUND = true;
2266     enum bool SERVERBOUND = false;
2267 
2268     enum string[] __fields = ["position"];
2269 
2270     ulong position;
2271 
2272     this() pure nothrow @safe @nogc {}
2273 
2274     this(ulong position) pure nothrow @safe @nogc
2275     {
2276         this.position = position;
2277     }
2278 
2279     mixin Make;
2280 
2281     public static typeof(this) fromBuffer(ubyte[] buffer)
2282     {
2283         OpenSignEditor ret = new OpenSignEditor();
2284         ret.autoDecode(buffer);
2285         return ret;
2286     }
2287 
2288     override string toString()
2289     {
2290         return "OpenSignEditor(position: " ~ std.conv.to!string(this.position) ~ ")";
2291     }
2292 
2293 }
2294 
2295 class CraftRecipeResponse : Java393Packet
2296 {
2297 
2298     enum uint ID = 45;
2299 
2300     enum bool CLIENTBOUND = true;
2301     enum bool SERVERBOUND = false;
2302 
2303     enum string[] __fields = ["window", "recipe"];
2304 
2305     ubyte window;
2306     @Var uint recipe;
2307 
2308     this() pure nothrow @safe @nogc {}
2309 
2310     this(ubyte window, uint recipe=uint.init) pure nothrow @safe @nogc
2311     {
2312         this.window = window;
2313         this.recipe = recipe;
2314     }
2315 
2316     mixin Make;
2317 
2318     public static typeof(this) fromBuffer(ubyte[] buffer)
2319     {
2320         CraftRecipeResponse ret = new CraftRecipeResponse();
2321         ret.autoDecode(buffer);
2322         return ret;
2323     }
2324 
2325     override string toString()
2326     {
2327         return "CraftRecipeResponse(window: " ~ std.conv.to!string(this.window) ~ ", recipe: " ~ std.conv.to!string(this.recipe) ~ ")";
2328     }
2329 
2330 }
2331 
2332 class PlayerAbilities : Java393Packet
2333 {
2334 
2335     enum uint ID = 46;
2336 
2337     enum bool CLIENTBOUND = true;
2338     enum bool SERVERBOUND = false;
2339 
2340     // flags
2341     enum ubyte INVULNERABLE = 1;
2342     enum ubyte FLYING = 2;
2343     enum ubyte ALLOW_FLYING = 4;
2344     enum ubyte CREATIVE_MODE = 8;
2345 
2346     enum string[] __fields = ["flags", "flyingSpeed", "fovModifier"];
2347 
2348     ubyte flags;
2349     float flyingSpeed;
2350     float fovModifier;
2351 
2352     this() pure nothrow @safe @nogc {}
2353 
2354     this(ubyte flags, float flyingSpeed=float.init, float fovModifier=float.init) pure nothrow @safe @nogc
2355     {
2356         this.flags = flags;
2357         this.flyingSpeed = flyingSpeed;
2358         this.fovModifier = fovModifier;
2359     }
2360 
2361     mixin Make;
2362 
2363     public static typeof(this) fromBuffer(ubyte[] buffer)
2364     {
2365         PlayerAbilities ret = new PlayerAbilities();
2366         ret.autoDecode(buffer);
2367         return ret;
2368     }
2369 
2370     override string toString()
2371     {
2372         return "PlayerAbilities(flags: " ~ std.conv.to!string(this.flags) ~ ", flyingSpeed: " ~ std.conv.to!string(this.flyingSpeed) ~ ", fovModifier: " ~ std.conv.to!string(this.fovModifier) ~ ")";
2373     }
2374 
2375 }
2376 
2377 class CombatEvent : Java393Packet
2378 {
2379 
2380     enum uint ID = 47;
2381 
2382     enum bool CLIENTBOUND = true;
2383     enum bool SERVERBOUND = false;
2384 
2385     enum string[] __fields = ["eventId"];
2386 
2387     ubyte eventId;
2388 
2389     this() pure nothrow @safe @nogc {}
2390 
2391     this(ubyte eventId) pure nothrow @safe @nogc
2392     {
2393         this.eventId = eventId;
2394     }
2395 
2396     mixin Make;
2397 
2398     public static typeof(this) fromBuffer(ubyte[] buffer)
2399     {
2400         CombatEvent ret = new CombatEvent();
2401         ret.autoDecode(buffer);
2402         return ret;
2403     }
2404 
2405     override string toString()
2406     {
2407         return "CombatEvent(eventId: " ~ std.conv.to!string(this.eventId) ~ ")";
2408     }
2409 
2410     enum string variantField = "eventId";
2411 
2412     alias Variants = TypeTuple!(EnterCombat, EndCombat, EntityDead);
2413 
2414     class EnterCombat : Java393Packet
2415     {
2416 
2417         enum typeof(eventId) EVENT_ID = 0;
2418 
2419         enum string[] __fields = [];
2420 
2421         mixin Make;
2422 
2423         override string toString()
2424         {
2425             return "CombatEvent.EnterCombat()";
2426         }
2427 
2428     }
2429 
2430     class EndCombat : Java393Packet
2431     {
2432 
2433         enum typeof(eventId) EVENT_ID = 1;
2434 
2435         enum string[] __fields = ["duration", "entityId"];
2436 
2437         @Var uint duration;
2438         uint entityId;
2439 
2440         this() pure nothrow @safe @nogc {}
2441 
2442         this(uint duration, uint entityId=uint.init) pure nothrow @safe @nogc
2443         {
2444             this.duration = duration;
2445             this.entityId = entityId;
2446         }
2447 
2448         mixin Make;
2449 
2450         override string toString()
2451         {
2452             return "CombatEvent.EndCombat(duration: " ~ std.conv.to!string(this.duration) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
2453         }
2454 
2455     }
2456 
2457     class EntityDead : Java393Packet
2458     {
2459 
2460         enum typeof(eventId) EVENT_ID = 2;
2461 
2462         enum string[] __fields = ["playerId", "entityId", "message"];
2463 
2464         @Var uint playerId;
2465         uint entityId;
2466         string message;
2467 
2468         this() pure nothrow @safe @nogc {}
2469 
2470         this(uint playerId, uint entityId=uint.init, string message=string.init) pure nothrow @safe @nogc
2471         {
2472             this.playerId = playerId;
2473             this.entityId = entityId;
2474             this.message = message;
2475         }
2476 
2477         mixin Make;
2478 
2479         override string toString()
2480         {
2481             return "CombatEvent.EntityDead(playerId: " ~ std.conv.to!string(this.playerId) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", message: " ~ std.conv.to!string(this.message) ~ ")";
2482         }
2483 
2484     }
2485 
2486 }
2487 
2488 class PlayerListItem : Java393Packet
2489 {
2490 
2491     enum uint ID = 48;
2492 
2493     enum bool CLIENTBOUND = true;
2494     enum bool SERVERBOUND = false;
2495 
2496     enum string[] __fields = ["action"];
2497 
2498     @Var uint action;
2499 
2500     this() pure nothrow @safe @nogc {}
2501 
2502     this(uint action) pure nothrow @safe @nogc
2503     {
2504         this.action = action;
2505     }
2506 
2507     mixin Make;
2508 
2509     public static typeof(this) fromBuffer(ubyte[] buffer)
2510     {
2511         PlayerListItem ret = new PlayerListItem();
2512         ret.autoDecode(buffer);
2513         return ret;
2514     }
2515 
2516     override string toString()
2517     {
2518         return "PlayerListItem(action: " ~ std.conv.to!string(this.action) ~ ")";
2519     }
2520 
2521     enum string variantField = "action";
2522 
2523     alias Variants = TypeTuple!(AddPlayer, UpdateGamemode, UpdateLatency, UpdateDisplayName, RemovePlayer);
2524 
2525     class AddPlayer : Java393Packet
2526     {
2527 
2528         enum typeof(action) ACTION = 0;
2529 
2530         enum string[] __fields = ["players"];
2531 
2532         soupply.java393.types.ListAddPlayer[] players;
2533 
2534         this() pure nothrow @safe @nogc {}
2535 
2536         this(soupply.java393.types.ListAddPlayer[] players) pure nothrow @safe @nogc
2537         {
2538             this.players = players;
2539         }
2540 
2541         mixin Make;
2542 
2543         override string toString()
2544         {
2545             return "PlayerListItem.AddPlayer(players: " ~ std.conv.to!string(this.players) ~ ")";
2546         }
2547 
2548     }
2549 
2550     class UpdateGamemode : Java393Packet
2551     {
2552 
2553         enum typeof(action) ACTION = 1;
2554 
2555         enum string[] __fields = ["players"];
2556 
2557         soupply.java393.types.ListUpdateGamemode[] players;
2558 
2559         this() pure nothrow @safe @nogc {}
2560 
2561         this(soupply.java393.types.ListUpdateGamemode[] players) pure nothrow @safe @nogc
2562         {
2563             this.players = players;
2564         }
2565 
2566         mixin Make;
2567 
2568         override string toString()
2569         {
2570             return "PlayerListItem.UpdateGamemode(players: " ~ std.conv.to!string(this.players) ~ ")";
2571         }
2572 
2573     }
2574 
2575     class UpdateLatency : Java393Packet
2576     {
2577 
2578         enum typeof(action) ACTION = 2;
2579 
2580         enum string[] __fields = ["players"];
2581 
2582         soupply.java393.types.ListUpdateLatency[] players;
2583 
2584         this() pure nothrow @safe @nogc {}
2585 
2586         this(soupply.java393.types.ListUpdateLatency[] players) pure nothrow @safe @nogc
2587         {
2588             this.players = players;
2589         }
2590 
2591         mixin Make;
2592 
2593         override string toString()
2594         {
2595             return "PlayerListItem.UpdateLatency(players: " ~ std.conv.to!string(this.players) ~ ")";
2596         }
2597 
2598     }
2599 
2600     class UpdateDisplayName : Java393Packet
2601     {
2602 
2603         enum typeof(action) ACTION = 3;
2604 
2605         enum string[] __fields = ["players"];
2606 
2607         soupply.java393.types.ListUpdateDisplayName[] players;
2608 
2609         this() pure nothrow @safe @nogc {}
2610 
2611         this(soupply.java393.types.ListUpdateDisplayName[] players) pure nothrow @safe @nogc
2612         {
2613             this.players = players;
2614         }
2615 
2616         mixin Make;
2617 
2618         override string toString()
2619         {
2620             return "PlayerListItem.UpdateDisplayName(players: " ~ std.conv.to!string(this.players) ~ ")";
2621         }
2622 
2623     }
2624 
2625     class RemovePlayer : Java393Packet
2626     {
2627 
2628         enum typeof(action) ACTION = 4;
2629 
2630         enum string[] __fields = ["players"];
2631 
2632         UUID[] players;
2633 
2634         this() pure nothrow @safe @nogc {}
2635 
2636         this(UUID[] players) pure nothrow @safe @nogc
2637         {
2638             this.players = players;
2639         }
2640 
2641         mixin Make;
2642 
2643         override string toString()
2644         {
2645             return "PlayerListItem.RemovePlayer(players: " ~ std.conv.to!string(this.players) ~ ")";
2646         }
2647 
2648     }
2649 
2650 }
2651 
2652 class FacePlayer : Java393Packet
2653 {
2654 
2655     enum uint ID = 49;
2656 
2657     enum bool CLIENTBOUND = true;
2658     enum bool SERVERBOUND = false;
2659 
2660     // type
2661     enum uint FEET = 0;
2662     enum uint EYES = 1;
2663 
2664     enum string[] __fields = ["type", "target", "isEntity", "entityId", "entityType"];
2665 
2666     @Var uint type;
2667     Vector!(double, "xyz") target;
2668     bool isEntity;
2669     @Condition("isEntity==true") @Var uint entityId;
2670     @Condition("isEntity==true") @Var uint entityType;
2671 
2672     this() pure nothrow @safe @nogc {}
2673 
2674     this(uint type, Vector!(double, "xyz") target=Vector!(double, "xyz").init, bool isEntity=bool.init, uint entityId=uint.init, uint entityType=uint.init) pure nothrow @safe @nogc
2675     {
2676         this.type = type;
2677         this.target = target;
2678         this.isEntity = isEntity;
2679         this.entityId = entityId;
2680         this.entityType = entityType;
2681     }
2682 
2683     mixin Make;
2684 
2685     public static typeof(this) fromBuffer(ubyte[] buffer)
2686     {
2687         FacePlayer ret = new FacePlayer();
2688         ret.autoDecode(buffer);
2689         return ret;
2690     }
2691 
2692     override string toString()
2693     {
2694         return "FacePlayer(type: " ~ std.conv.to!string(this.type) ~ ", target: " ~ std.conv.to!string(this.target) ~ ", isEntity: " ~ std.conv.to!string(this.isEntity) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", entityType: " ~ std.conv.to!string(this.entityType) ~ ")";
2695     }
2696 
2697 }
2698 
2699 class PlayerPositionAndLook : Java393Packet
2700 {
2701 
2702     enum uint ID = 50;
2703 
2704     enum bool CLIENTBOUND = true;
2705     enum bool SERVERBOUND = false;
2706 
2707     // flags
2708     enum ubyte X = 1;
2709     enum ubyte Y = 2;
2710     enum ubyte Z = 4;
2711     enum ubyte Y_ROTATION = 8;
2712     enum ubyte X_ROTATION = 16;
2713 
2714     enum string[] __fields = ["position", "yaw", "pitch", "flags", "teleportId"];
2715 
2716     Vector!(double, "xyz") position;
2717     float yaw;
2718     float pitch;
2719     ubyte flags;
2720     @Var uint teleportId;
2721 
2722     this() pure nothrow @safe @nogc {}
2723 
2724     this(Vector!(double, "xyz") position, float yaw=float.init, float pitch=float.init, ubyte flags=ubyte.init, uint teleportId=uint.init) pure nothrow @safe @nogc
2725     {
2726         this.position = position;
2727         this.yaw = yaw;
2728         this.pitch = pitch;
2729         this.flags = flags;
2730         this.teleportId = teleportId;
2731     }
2732 
2733     mixin Make;
2734 
2735     public static typeof(this) fromBuffer(ubyte[] buffer)
2736     {
2737         PlayerPositionAndLook ret = new PlayerPositionAndLook();
2738         ret.autoDecode(buffer);
2739         return ret;
2740     }
2741 
2742     override string toString()
2743     {
2744         return "PlayerPositionAndLook(position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", flags: " ~ std.conv.to!string(this.flags) ~ ", teleportId: " ~ std.conv.to!string(this.teleportId) ~ ")";
2745     }
2746 
2747 }
2748 
2749 class UseBed : Java393Packet
2750 {
2751 
2752     enum uint ID = 51;
2753 
2754     enum bool CLIENTBOUND = true;
2755     enum bool SERVERBOUND = false;
2756 
2757     enum string[] __fields = ["entityId", "position"];
2758 
2759     @Var uint entityId;
2760     ulong position;
2761 
2762     this() pure nothrow @safe @nogc {}
2763 
2764     this(uint entityId, ulong position=ulong.init) pure nothrow @safe @nogc
2765     {
2766         this.entityId = entityId;
2767         this.position = position;
2768     }
2769 
2770     mixin Make;
2771 
2772     public static typeof(this) fromBuffer(ubyte[] buffer)
2773     {
2774         UseBed ret = new UseBed();
2775         ret.autoDecode(buffer);
2776         return ret;
2777     }
2778 
2779     override string toString()
2780     {
2781         return "UseBed(entityId: " ~ std.conv.to!string(this.entityId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ")";
2782     }
2783 
2784 }
2785 
2786 class UnlockRecipes : Java393Packet
2787 {
2788 
2789     enum uint ID = 52;
2790 
2791     enum bool CLIENTBOUND = true;
2792     enum bool SERVERBOUND = false;
2793 
2794     // action
2795     enum uint ADD = 1;
2796     enum uint REMOVE = 2;
2797     enum uint ADD_WITHOUT_NOTIFICATION = 3;
2798 
2799     enum string[] __fields = ["action", "craftingRecipeBookOpen", "craftingRecipeBookFilterActive", "smeltingRecipeBookOpen", "smeltingRecipeBookFilterActive", "recipes", "bookRecipes"];
2800 
2801     @Var uint action;
2802     bool craftingRecipeBookOpen;
2803     bool craftingRecipeBookFilterActive;
2804     bool smeltingRecipeBookOpen;
2805     bool smeltingRecipeBookFilterActive;
2806     @Var uint[] recipes;
2807     @Condition("action==1||action==3") @Var uint[] bookRecipes;
2808 
2809     this() pure nothrow @safe @nogc {}
2810 
2811     this(uint action, bool craftingRecipeBookOpen=bool.init, bool craftingRecipeBookFilterActive=bool.init, bool smeltingRecipeBookOpen=bool.init, bool smeltingRecipeBookFilterActive=bool.init, uint[] recipes=(uint[]).init, uint[] bookRecipes=(uint[]).init) pure nothrow @safe @nogc
2812     {
2813         this.action = action;
2814         this.craftingRecipeBookOpen = craftingRecipeBookOpen;
2815         this.craftingRecipeBookFilterActive = craftingRecipeBookFilterActive;
2816         this.smeltingRecipeBookOpen = smeltingRecipeBookOpen;
2817         this.smeltingRecipeBookFilterActive = smeltingRecipeBookFilterActive;
2818         this.recipes = recipes;
2819         this.bookRecipes = bookRecipes;
2820     }
2821 
2822     mixin Make;
2823 
2824     public static typeof(this) fromBuffer(ubyte[] buffer)
2825     {
2826         UnlockRecipes ret = new UnlockRecipes();
2827         ret.autoDecode(buffer);
2828         return ret;
2829     }
2830 
2831     override string toString()
2832     {
2833         return "UnlockRecipes(action: " ~ std.conv.to!string(this.action) ~ ", craftingRecipeBookOpen: " ~ std.conv.to!string(this.craftingRecipeBookOpen) ~ ", craftingRecipeBookFilterActive: " ~ std.conv.to!string(this.craftingRecipeBookFilterActive) ~ ", smeltingRecipeBookOpen: " ~ std.conv.to!string(this.smeltingRecipeBookOpen) ~ ", smeltingRecipeBookFilterActive: " ~ std.conv.to!string(this.smeltingRecipeBookFilterActive) ~ ", recipes: " ~ std.conv.to!string(this.recipes) ~ ", bookRecipes: " ~ std.conv.to!string(this.bookRecipes) ~ ")";
2834     }
2835 
2836 }
2837 
2838 class DestroyEntities : Java393Packet
2839 {
2840 
2841     enum uint ID = 53;
2842 
2843     enum bool CLIENTBOUND = true;
2844     enum bool SERVERBOUND = false;
2845 
2846     enum string[] __fields = ["entityIds"];
2847 
2848     @Var uint[] entityIds;
2849 
2850     this() pure nothrow @safe @nogc {}
2851 
2852     this(uint[] entityIds) pure nothrow @safe @nogc
2853     {
2854         this.entityIds = entityIds;
2855     }
2856 
2857     mixin Make;
2858 
2859     public static typeof(this) fromBuffer(ubyte[] buffer)
2860     {
2861         DestroyEntities ret = new DestroyEntities();
2862         ret.autoDecode(buffer);
2863         return ret;
2864     }
2865 
2866     override string toString()
2867     {
2868         return "DestroyEntities(entityIds: " ~ std.conv.to!string(this.entityIds) ~ ")";
2869     }
2870 
2871 }
2872 
2873 class RemoveEntityEffect : Java393Packet
2874 {
2875 
2876     enum uint ID = 54;
2877 
2878     enum bool CLIENTBOUND = true;
2879     enum bool SERVERBOUND = false;
2880 
2881     enum string[] __fields = ["entityId", "effectId"];
2882 
2883     @Var uint entityId;
2884     ubyte effectId;
2885 
2886     this() pure nothrow @safe @nogc {}
2887 
2888     this(uint entityId, ubyte effectId=ubyte.init) pure nothrow @safe @nogc
2889     {
2890         this.entityId = entityId;
2891         this.effectId = effectId;
2892     }
2893 
2894     mixin Make;
2895 
2896     public static typeof(this) fromBuffer(ubyte[] buffer)
2897     {
2898         RemoveEntityEffect ret = new RemoveEntityEffect();
2899         ret.autoDecode(buffer);
2900         return ret;
2901     }
2902 
2903     override string toString()
2904     {
2905         return "RemoveEntityEffect(entityId: " ~ std.conv.to!string(this.entityId) ~ ", effectId: " ~ std.conv.to!string(this.effectId) ~ ")";
2906     }
2907 
2908 }
2909 
2910 class ResourcePackSend : Java393Packet
2911 {
2912 
2913     enum uint ID = 55;
2914 
2915     enum bool CLIENTBOUND = true;
2916     enum bool SERVERBOUND = false;
2917 
2918     enum string[] __fields = ["url", "hash"];
2919 
2920     string url;
2921     string hash;
2922 
2923     this() pure nothrow @safe @nogc {}
2924 
2925     this(string url, string hash=string.init) pure nothrow @safe @nogc
2926     {
2927         this.url = url;
2928         this.hash = hash;
2929     }
2930 
2931     mixin Make;
2932 
2933     public static typeof(this) fromBuffer(ubyte[] buffer)
2934     {
2935         ResourcePackSend ret = new ResourcePackSend();
2936         ret.autoDecode(buffer);
2937         return ret;
2938     }
2939 
2940     override string toString()
2941     {
2942         return "ResourcePackSend(url: " ~ std.conv.to!string(this.url) ~ ", hash: " ~ std.conv.to!string(this.hash) ~ ")";
2943     }
2944 
2945 }
2946 
2947 class Respawn : Java393Packet
2948 {
2949 
2950     enum uint ID = 56;
2951 
2952     enum bool CLIENTBOUND = true;
2953     enum bool SERVERBOUND = false;
2954 
2955     // dimension
2956     enum int NETHER = -1;
2957     enum int OVERWORLD = 0;
2958     enum int END = 1;
2959 
2960     // difficulty
2961     enum ubyte PEACEFUL = 0;
2962     enum ubyte EASY = 1;
2963     enum ubyte NORMAL = 2;
2964     enum ubyte HARD = 3;
2965 
2966     // gamemode
2967     enum ubyte SURVIVAL = 0;
2968     enum ubyte CREATIVE = 1;
2969     enum ubyte ADVENTURE = 2;
2970     enum ubyte SPECTATOR = 3;
2971 
2972     // level type
2973     enum string INFINITY = "default";
2974     enum string FLAT = "flat";
2975     enum string AMPLIFIED = "amplified";
2976     enum string LARGE_BIOMES = "largeBiomes";
2977 
2978     enum string[] __fields = ["dimension", "difficulty", "gamemode", "levelType"];
2979 
2980     int dimension;
2981     ubyte difficulty;
2982     ubyte gamemode;
2983     string levelType;
2984 
2985     this() pure nothrow @safe @nogc {}
2986 
2987     this(int dimension, ubyte difficulty=ubyte.init, ubyte gamemode=ubyte.init, string levelType=string.init) pure nothrow @safe @nogc
2988     {
2989         this.dimension = dimension;
2990         this.difficulty = difficulty;
2991         this.gamemode = gamemode;
2992         this.levelType = levelType;
2993     }
2994 
2995     mixin Make;
2996 
2997     public static typeof(this) fromBuffer(ubyte[] buffer)
2998     {
2999         Respawn ret = new Respawn();
3000         ret.autoDecode(buffer);
3001         return ret;
3002     }
3003 
3004     override string toString()
3005     {
3006         return "Respawn(dimension: " ~ std.conv.to!string(this.dimension) ~ ", difficulty: " ~ std.conv.to!string(this.difficulty) ~ ", gamemode: " ~ std.conv.to!string(this.gamemode) ~ ", levelType: " ~ std.conv.to!string(this.levelType) ~ ")";
3007     }
3008 
3009 }
3010 
3011 class EntityHeadLook : Java393Packet
3012 {
3013 
3014     enum uint ID = 57;
3015 
3016     enum bool CLIENTBOUND = true;
3017     enum bool SERVERBOUND = false;
3018 
3019     enum string[] __fields = ["entityId", "headYaw"];
3020 
3021     @Var uint entityId;
3022     ubyte headYaw;
3023 
3024     this() pure nothrow @safe @nogc {}
3025 
3026     this(uint entityId, ubyte headYaw=ubyte.init) pure nothrow @safe @nogc
3027     {
3028         this.entityId = entityId;
3029         this.headYaw = headYaw;
3030     }
3031 
3032     mixin Make;
3033 
3034     public static typeof(this) fromBuffer(ubyte[] buffer)
3035     {
3036         EntityHeadLook ret = new EntityHeadLook();
3037         ret.autoDecode(buffer);
3038         return ret;
3039     }
3040 
3041     override string toString()
3042     {
3043         return "EntityHeadLook(entityId: " ~ std.conv.to!string(this.entityId) ~ ", headYaw: " ~ std.conv.to!string(this.headYaw) ~ ")";
3044     }
3045 
3046 }
3047 
3048 class AdvancementProgress : Java393Packet
3049 {
3050 
3051     enum uint ID = 58;
3052 
3053     enum bool CLIENTBOUND = true;
3054     enum bool SERVERBOUND = false;
3055 
3056     enum string[] __fields = ["notEmpty", "identifier"];
3057 
3058     bool notEmpty;
3059     @Condition("notEmpty==true") string identifier;
3060 
3061     this() pure nothrow @safe @nogc {}
3062 
3063     this(bool notEmpty, string identifier=string.init) pure nothrow @safe @nogc
3064     {
3065         this.notEmpty = notEmpty;
3066         this.identifier = identifier;
3067     }
3068 
3069     mixin Make;
3070 
3071     public static typeof(this) fromBuffer(ubyte[] buffer)
3072     {
3073         AdvancementProgress ret = new AdvancementProgress();
3074         ret.autoDecode(buffer);
3075         return ret;
3076     }
3077 
3078     override string toString()
3079     {
3080         return "AdvancementProgress(notEmpty: " ~ std.conv.to!string(this.notEmpty) ~ ", identifier: " ~ std.conv.to!string(this.identifier) ~ ")";
3081     }
3082 
3083 }
3084 
3085 class WorldBorder : Java393Packet
3086 {
3087 
3088     enum uint ID = 59;
3089 
3090     enum bool CLIENTBOUND = true;
3091     enum bool SERVERBOUND = false;
3092 
3093     enum string[] __fields = ["action"];
3094 
3095     @Var uint action;
3096 
3097     this() pure nothrow @safe @nogc {}
3098 
3099     this(uint action) pure nothrow @safe @nogc
3100     {
3101         this.action = action;
3102     }
3103 
3104     mixin Make;
3105 
3106     public static typeof(this) fromBuffer(ubyte[] buffer)
3107     {
3108         WorldBorder ret = new WorldBorder();
3109         ret.autoDecode(buffer);
3110         return ret;
3111     }
3112 
3113     override string toString()
3114     {
3115         return "WorldBorder(action: " ~ std.conv.to!string(this.action) ~ ")";
3116     }
3117 
3118     enum string variantField = "action";
3119 
3120     alias Variants = TypeTuple!(SetSize, LerpSize, SetCenter, Initialize, SetWarningTime, SetWarningBlocks);
3121 
3122     class SetSize : Java393Packet
3123     {
3124 
3125         enum typeof(action) ACTION = 0;
3126 
3127         enum string[] __fields = ["diameter"];
3128 
3129         double diameter;
3130 
3131         this() pure nothrow @safe @nogc {}
3132 
3133         this(double diameter) pure nothrow @safe @nogc
3134         {
3135             this.diameter = diameter;
3136         }
3137 
3138         mixin Make;
3139 
3140         override string toString()
3141         {
3142             return "WorldBorder.SetSize(diameter: " ~ std.conv.to!string(this.diameter) ~ ")";
3143         }
3144 
3145     }
3146 
3147     class LerpSize : Java393Packet
3148     {
3149 
3150         enum typeof(action) ACTION = 1;
3151 
3152         enum string[] __fields = ["oldDiameter", "newDiameter", "speed"];
3153 
3154         double oldDiameter;
3155         double newDiameter;
3156         @Var ulong speed;
3157 
3158         this() pure nothrow @safe @nogc {}
3159 
3160         this(double oldDiameter, double newDiameter=double.init, ulong speed=ulong.init) pure nothrow @safe @nogc
3161         {
3162             this.oldDiameter = oldDiameter;
3163             this.newDiameter = newDiameter;
3164             this.speed = speed;
3165         }
3166 
3167         mixin Make;
3168 
3169         override string toString()
3170         {
3171             return "WorldBorder.LerpSize(oldDiameter: " ~ std.conv.to!string(this.oldDiameter) ~ ", newDiameter: " ~ std.conv.to!string(this.newDiameter) ~ ", speed: " ~ std.conv.to!string(this.speed) ~ ")";
3172         }
3173 
3174     }
3175 
3176     class SetCenter : Java393Packet
3177     {
3178 
3179         enum typeof(action) ACTION = 2;
3180 
3181         enum string[] __fields = ["center"];
3182 
3183         Vector!(double, "xyz") center;
3184 
3185         this() pure nothrow @safe @nogc {}
3186 
3187         this(Vector!(double, "xyz") center) pure nothrow @safe @nogc
3188         {
3189             this.center = center;
3190         }
3191 
3192         mixin Make;
3193 
3194         override string toString()
3195         {
3196             return "WorldBorder.SetCenter(center: " ~ std.conv.to!string(this.center) ~ ")";
3197         }
3198 
3199     }
3200 
3201     class Initialize : Java393Packet
3202     {
3203 
3204         enum typeof(action) ACTION = 3;
3205 
3206         enum string[] __fields = ["center", "oldDiameter", "newDiameter", "speed", "portalTeleportBoundary", "warningTime", "warningBlocks"];
3207 
3208         Vector!(double, "xyz") center;
3209         double oldDiameter;
3210         double newDiameter;
3211         @Var ulong speed;
3212         @Var uint portalTeleportBoundary;
3213         @Var uint warningTime;
3214         @Var uint warningBlocks;
3215 
3216         this() pure nothrow @safe @nogc {}
3217 
3218         this(Vector!(double, "xyz") center, double oldDiameter=double.init, double newDiameter=double.init, ulong speed=ulong.init, uint portalTeleportBoundary=uint.init, uint warningTime=uint.init, uint warningBlocks=uint.init) pure nothrow @safe @nogc
3219         {
3220             this.center = center;
3221             this.oldDiameter = oldDiameter;
3222             this.newDiameter = newDiameter;
3223             this.speed = speed;
3224             this.portalTeleportBoundary = portalTeleportBoundary;
3225             this.warningTime = warningTime;
3226             this.warningBlocks = warningBlocks;
3227         }
3228 
3229         mixin Make;
3230 
3231         override string toString()
3232         {
3233             return "WorldBorder.Initialize(center: " ~ std.conv.to!string(this.center) ~ ", oldDiameter: " ~ std.conv.to!string(this.oldDiameter) ~ ", newDiameter: " ~ std.conv.to!string(this.newDiameter) ~ ", speed: " ~ std.conv.to!string(this.speed) ~ ", portalTeleportBoundary: " ~ std.conv.to!string(this.portalTeleportBoundary) ~ ", warningTime: " ~ std.conv.to!string(this.warningTime) ~ ", warningBlocks: " ~ std.conv.to!string(this.warningBlocks) ~ ")";
3234         }
3235 
3236     }
3237 
3238     class SetWarningTime : Java393Packet
3239     {
3240 
3241         enum typeof(action) ACTION = 4;
3242 
3243         enum string[] __fields = ["warningTime"];
3244 
3245         @Var uint warningTime;
3246 
3247         this() pure nothrow @safe @nogc {}
3248 
3249         this(uint warningTime) pure nothrow @safe @nogc
3250         {
3251             this.warningTime = warningTime;
3252         }
3253 
3254         mixin Make;
3255 
3256         override string toString()
3257         {
3258             return "WorldBorder.SetWarningTime(warningTime: " ~ std.conv.to!string(this.warningTime) ~ ")";
3259         }
3260 
3261     }
3262 
3263     class SetWarningBlocks : Java393Packet
3264     {
3265 
3266         enum typeof(action) ACTION = 5;
3267 
3268         enum string[] __fields = ["warningBlocks"];
3269 
3270         @Var uint warningBlocks;
3271 
3272         this() pure nothrow @safe @nogc {}
3273 
3274         this(uint warningBlocks) pure nothrow @safe @nogc
3275         {
3276             this.warningBlocks = warningBlocks;
3277         }
3278 
3279         mixin Make;
3280 
3281         override string toString()
3282         {
3283             return "WorldBorder.SetWarningBlocks(warningBlocks: " ~ std.conv.to!string(this.warningBlocks) ~ ")";
3284         }
3285 
3286     }
3287 
3288 }
3289 
3290 class Camera : Java393Packet
3291 {
3292 
3293     enum uint ID = 60;
3294 
3295     enum bool CLIENTBOUND = true;
3296     enum bool SERVERBOUND = false;
3297 
3298     enum string[] __fields = ["entityId"];
3299 
3300     @Var uint entityId;
3301 
3302     this() pure nothrow @safe @nogc {}
3303 
3304     this(uint entityId) pure nothrow @safe @nogc
3305     {
3306         this.entityId = entityId;
3307     }
3308 
3309     mixin Make;
3310 
3311     public static typeof(this) fromBuffer(ubyte[] buffer)
3312     {
3313         Camera ret = new Camera();
3314         ret.autoDecode(buffer);
3315         return ret;
3316     }
3317 
3318     override string toString()
3319     {
3320         return "Camera(entityId: " ~ std.conv.to!string(this.entityId) ~ ")";
3321     }
3322 
3323 }
3324 
3325 class HeldItemChange : Java393Packet
3326 {
3327 
3328     enum uint ID = 61;
3329 
3330     enum bool CLIENTBOUND = true;
3331     enum bool SERVERBOUND = false;
3332 
3333     enum string[] __fields = ["slot"];
3334 
3335     ubyte slot;
3336 
3337     this() pure nothrow @safe @nogc {}
3338 
3339     this(ubyte slot) pure nothrow @safe @nogc
3340     {
3341         this.slot = slot;
3342     }
3343 
3344     mixin Make;
3345 
3346     public static typeof(this) fromBuffer(ubyte[] buffer)
3347     {
3348         HeldItemChange ret = new HeldItemChange();
3349         ret.autoDecode(buffer);
3350         return ret;
3351     }
3352 
3353     override string toString()
3354     {
3355         return "HeldItemChange(slot: " ~ std.conv.to!string(this.slot) ~ ")";
3356     }
3357 
3358 }
3359 
3360 class DisplayScoreboard : Java393Packet
3361 {
3362 
3363     enum uint ID = 62;
3364 
3365     enum bool CLIENTBOUND = true;
3366     enum bool SERVERBOUND = false;
3367 
3368     // position
3369     enum ubyte LIST = 0;
3370     enum ubyte SIDEBAR = 1;
3371     enum ubyte BELOW_NAME = 2;
3372 
3373     enum string[] __fields = ["position", "scoreName"];
3374 
3375     ubyte position;
3376     string scoreName;
3377 
3378     this() pure nothrow @safe @nogc {}
3379 
3380     this(ubyte position, string scoreName=string.init) pure nothrow @safe @nogc
3381     {
3382         this.position = position;
3383         this.scoreName = scoreName;
3384     }
3385 
3386     mixin Make;
3387 
3388     public static typeof(this) fromBuffer(ubyte[] buffer)
3389     {
3390         DisplayScoreboard ret = new DisplayScoreboard();
3391         ret.autoDecode(buffer);
3392         return ret;
3393     }
3394 
3395     override string toString()
3396     {
3397         return "DisplayScoreboard(position: " ~ std.conv.to!string(this.position) ~ ", scoreName: " ~ std.conv.to!string(this.scoreName) ~ ")";
3398     }
3399 
3400 }
3401 
3402 class EntityMetadata : Java393Packet
3403 {
3404 
3405     enum uint ID = 63;
3406 
3407     enum bool CLIENTBOUND = true;
3408     enum bool SERVERBOUND = false;
3409 
3410     enum string[] __fields = ["entityId", "metadata"];
3411 
3412     @Var uint entityId;
3413     Metadata metadata;
3414 
3415     this() pure nothrow @safe @nogc {}
3416 
3417     this(uint entityId, Metadata metadata=Metadata.init) pure nothrow @safe @nogc
3418     {
3419         this.entityId = entityId;
3420         this.metadata = metadata;
3421     }
3422 
3423     mixin Make;
3424 
3425     public static typeof(this) fromBuffer(ubyte[] buffer)
3426     {
3427         EntityMetadata ret = new EntityMetadata();
3428         ret.autoDecode(buffer);
3429         return ret;
3430     }
3431 
3432     override string toString()
3433     {
3434         return "EntityMetadata(entityId: " ~ std.conv.to!string(this.entityId) ~ ", metadata: " ~ std.conv.to!string(this.metadata) ~ ")";
3435     }
3436 
3437 }
3438 
3439 class AttachEntity : Java393Packet
3440 {
3441 
3442     enum uint ID = 64;
3443 
3444     enum bool CLIENTBOUND = true;
3445     enum bool SERVERBOUND = false;
3446 
3447     enum string[] __fields = ["target", "holder"];
3448 
3449     uint target;
3450     uint holder;
3451 
3452     this() pure nothrow @safe @nogc {}
3453 
3454     this(uint target, uint holder=uint.init) pure nothrow @safe @nogc
3455     {
3456         this.target = target;
3457         this.holder = holder;
3458     }
3459 
3460     mixin Make;
3461 
3462     public static typeof(this) fromBuffer(ubyte[] buffer)
3463     {
3464         AttachEntity ret = new AttachEntity();
3465         ret.autoDecode(buffer);
3466         return ret;
3467     }
3468 
3469     override string toString()
3470     {
3471         return "AttachEntity(target: " ~ std.conv.to!string(this.target) ~ ", holder: " ~ std.conv.to!string(this.holder) ~ ")";
3472     }
3473 
3474 }
3475 
3476 class EntityVelocity : Java393Packet
3477 {
3478 
3479     enum uint ID = 65;
3480 
3481     enum bool CLIENTBOUND = true;
3482     enum bool SERVERBOUND = false;
3483 
3484     enum string[] __fields = ["entityId", "velocity"];
3485 
3486     @Var uint entityId;
3487     Vector!(short, "xyz") velocity;
3488 
3489     this() pure nothrow @safe @nogc {}
3490 
3491     this(uint entityId, Vector!(short, "xyz") velocity=Vector!(short, "xyz").init) pure nothrow @safe @nogc
3492     {
3493         this.entityId = entityId;
3494         this.velocity = velocity;
3495     }
3496 
3497     mixin Make;
3498 
3499     public static typeof(this) fromBuffer(ubyte[] buffer)
3500     {
3501         EntityVelocity ret = new EntityVelocity();
3502         ret.autoDecode(buffer);
3503         return ret;
3504     }
3505 
3506     override string toString()
3507     {
3508         return "EntityVelocity(entityId: " ~ std.conv.to!string(this.entityId) ~ ", velocity: " ~ std.conv.to!string(this.velocity) ~ ")";
3509     }
3510 
3511 }
3512 
3513 class EntityEquipment : Java393Packet
3514 {
3515 
3516     enum uint ID = 66;
3517 
3518     enum bool CLIENTBOUND = true;
3519     enum bool SERVERBOUND = false;
3520 
3521     enum string[] __fields = ["entityId", "slot", "item"];
3522 
3523     @Var uint entityId;
3524     @Var uint slot;
3525     soupply.java393.types.Slot item;
3526 
3527     this() pure nothrow @safe @nogc {}
3528 
3529     this(uint entityId, uint slot=uint.init, soupply.java393.types.Slot item=soupply.java393.types.Slot.init) pure nothrow @safe @nogc
3530     {
3531         this.entityId = entityId;
3532         this.slot = slot;
3533         this.item = item;
3534     }
3535 
3536     mixin Make;
3537 
3538     public static typeof(this) fromBuffer(ubyte[] buffer)
3539     {
3540         EntityEquipment ret = new EntityEquipment();
3541         ret.autoDecode(buffer);
3542         return ret;
3543     }
3544 
3545     override string toString()
3546     {
3547         return "EntityEquipment(entityId: " ~ std.conv.to!string(this.entityId) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ", item: " ~ std.conv.to!string(this.item) ~ ")";
3548     }
3549 
3550 }
3551 
3552 class SetExperience : Java393Packet
3553 {
3554 
3555     enum uint ID = 67;
3556 
3557     enum bool CLIENTBOUND = true;
3558     enum bool SERVERBOUND = false;
3559 
3560     enum string[] __fields = ["experience", "level", "totalExperience"];
3561 
3562     float experience;
3563     @Var uint level;
3564     @Var uint totalExperience;
3565 
3566     this() pure nothrow @safe @nogc {}
3567 
3568     this(float experience, uint level=uint.init, uint totalExperience=uint.init) pure nothrow @safe @nogc
3569     {
3570         this.experience = experience;
3571         this.level = level;
3572         this.totalExperience = totalExperience;
3573     }
3574 
3575     mixin Make;
3576 
3577     public static typeof(this) fromBuffer(ubyte[] buffer)
3578     {
3579         SetExperience ret = new SetExperience();
3580         ret.autoDecode(buffer);
3581         return ret;
3582     }
3583 
3584     override string toString()
3585     {
3586         return "SetExperience(experience: " ~ std.conv.to!string(this.experience) ~ ", level: " ~ std.conv.to!string(this.level) ~ ", totalExperience: " ~ std.conv.to!string(this.totalExperience) ~ ")";
3587     }
3588 
3589 }
3590 
3591 class UpdateHealth : Java393Packet
3592 {
3593 
3594     enum uint ID = 68;
3595 
3596     enum bool CLIENTBOUND = true;
3597     enum bool SERVERBOUND = false;
3598 
3599     enum string[] __fields = ["health", "hunger", "saturation"];
3600 
3601     float health;
3602     @Var uint hunger;
3603     float saturation;
3604 
3605     this() pure nothrow @safe @nogc {}
3606 
3607     this(float health, uint hunger=uint.init, float saturation=float.init) pure nothrow @safe @nogc
3608     {
3609         this.health = health;
3610         this.hunger = hunger;
3611         this.saturation = saturation;
3612     }
3613 
3614     mixin Make;
3615 
3616     public static typeof(this) fromBuffer(ubyte[] buffer)
3617     {
3618         UpdateHealth ret = new UpdateHealth();
3619         ret.autoDecode(buffer);
3620         return ret;
3621     }
3622 
3623     override string toString()
3624     {
3625         return "UpdateHealth(health: " ~ std.conv.to!string(this.health) ~ ", hunger: " ~ std.conv.to!string(this.hunger) ~ ", saturation: " ~ std.conv.to!string(this.saturation) ~ ")";
3626     }
3627 
3628 }
3629 
3630 class ScoreboardObjective : Java393Packet
3631 {
3632 
3633     enum uint ID = 69;
3634 
3635     enum bool CLIENTBOUND = true;
3636     enum bool SERVERBOUND = false;
3637 
3638     // mode
3639     enum ubyte CREATE = 0;
3640     enum ubyte REMOVE = 1;
3641     enum ubyte UPDATE = 2;
3642 
3643     enum string[] __fields = ["name", "mode", "value", "type"];
3644 
3645     string name;
3646     ubyte mode;
3647     @Condition("mode!=1") string value;
3648     @Condition("mode!=1") @Var uint type;
3649 
3650     this() pure nothrow @safe @nogc {}
3651 
3652     this(string name, ubyte mode=ubyte.init, string value=string.init, uint type=uint.init) pure nothrow @safe @nogc
3653     {
3654         this.name = name;
3655         this.mode = mode;
3656         this.value = value;
3657         this.type = type;
3658     }
3659 
3660     mixin Make;
3661 
3662     public static typeof(this) fromBuffer(ubyte[] buffer)
3663     {
3664         ScoreboardObjective ret = new ScoreboardObjective();
3665         ret.autoDecode(buffer);
3666         return ret;
3667     }
3668 
3669     override string toString()
3670     {
3671         return "ScoreboardObjective(name: " ~ std.conv.to!string(this.name) ~ ", mode: " ~ std.conv.to!string(this.mode) ~ ", value: " ~ std.conv.to!string(this.value) ~ ", type: " ~ std.conv.to!string(this.type) ~ ")";
3672     }
3673 
3674 }
3675 
3676 class SetPassengers : Java393Packet
3677 {
3678 
3679     enum uint ID = 70;
3680 
3681     enum bool CLIENTBOUND = true;
3682     enum bool SERVERBOUND = false;
3683 
3684     enum string[] __fields = ["entityId", "passengers"];
3685 
3686     @Var uint entityId;
3687     @Var uint[] passengers;
3688 
3689     this() pure nothrow @safe @nogc {}
3690 
3691     this(uint entityId, uint[] passengers=(uint[]).init) pure nothrow @safe @nogc
3692     {
3693         this.entityId = entityId;
3694         this.passengers = passengers;
3695     }
3696 
3697     mixin Make;
3698 
3699     public static typeof(this) fromBuffer(ubyte[] buffer)
3700     {
3701         SetPassengers ret = new SetPassengers();
3702         ret.autoDecode(buffer);
3703         return ret;
3704     }
3705 
3706     override string toString()
3707     {
3708         return "SetPassengers(entityId: " ~ std.conv.to!string(this.entityId) ~ ", passengers: " ~ std.conv.to!string(this.passengers) ~ ")";
3709     }
3710 
3711 }
3712 
3713 class Teams : Java393Packet
3714 {
3715 
3716     enum uint ID = 71;
3717 
3718     enum bool CLIENTBOUND = true;
3719     enum bool SERVERBOUND = false;
3720 
3721     enum string[] __fields = ["name", "mode"];
3722 
3723     string name;
3724     ubyte mode;
3725 
3726     this() pure nothrow @safe @nogc {}
3727 
3728     this(string name, ubyte mode=ubyte.init) pure nothrow @safe @nogc
3729     {
3730         this.name = name;
3731         this.mode = mode;
3732     }
3733 
3734     mixin Make;
3735 
3736     public static typeof(this) fromBuffer(ubyte[] buffer)
3737     {
3738         Teams ret = new Teams();
3739         ret.autoDecode(buffer);
3740         return ret;
3741     }
3742 
3743     override string toString()
3744     {
3745         return "Teams(name: " ~ std.conv.to!string(this.name) ~ ", mode: " ~ std.conv.to!string(this.mode) ~ ")";
3746     }
3747 
3748     enum string variantField = "mode";
3749 
3750     alias Variants = TypeTuple!(CreateTeam, RemoveTeam, UpdateTeamInfo, AddPlayers, RemovePlayers);
3751 
3752     class CreateTeam : Java393Packet
3753     {
3754 
3755         enum typeof(mode) MODE = 0;
3756 
3757         // friendly flags
3758         enum ubyte FRIENDLY_FIRE = 1;
3759         enum ubyte SEE_TEAM_INVISIBLE_PLAYERS = 2;
3760 
3761         // nametag visibility
3762         enum string ALWAYS_HIDE = "always";
3763         enum string HIDE_OTHER_TEAMS = "hideOtherTeams";
3764         enum string HIDE_OWN_TEAM = "hideOwnTeam";
3765         enum string NEVER_HIDE = "never";
3766 
3767         // collision rule
3768         enum string ALWAYS_PUSH = "always";
3769         enum string PUSH_OTHER_TEAMS = "pushOtherTeams";
3770         enum string PUSH_OWN_TEAM = "pushOwnTeam";
3771         enum string NEVER_PUSH = "never";
3772 
3773         enum string[] __fields = ["displayName", "friendlyFlags", "nametagVisibility", "collisionRule", "formatting", "prefix", "suffix", "players"];
3774 
3775         string displayName;
3776         ubyte friendlyFlags;
3777         string nametagVisibility;
3778         string collisionRule;
3779         @Var uint formatting;
3780         string prefix;
3781         string suffix;
3782         string[] players;
3783 
3784         this() pure nothrow @safe @nogc {}
3785 
3786         this(string displayName, ubyte friendlyFlags=ubyte.init, string nametagVisibility=string.init, string collisionRule=string.init, uint formatting=uint.init, string prefix=string.init, string suffix=string.init, string[] players=(string[]).init) pure nothrow @safe @nogc
3787         {
3788             this.displayName = displayName;
3789             this.friendlyFlags = friendlyFlags;
3790             this.nametagVisibility = nametagVisibility;
3791             this.collisionRule = collisionRule;
3792             this.formatting = formatting;
3793             this.prefix = prefix;
3794             this.suffix = suffix;
3795             this.players = players;
3796         }
3797 
3798         mixin Make;
3799 
3800         override string toString()
3801         {
3802             return "Teams.CreateTeam(displayName: " ~ std.conv.to!string(this.displayName) ~ ", friendlyFlags: " ~ std.conv.to!string(this.friendlyFlags) ~ ", nametagVisibility: " ~ std.conv.to!string(this.nametagVisibility) ~ ", collisionRule: " ~ std.conv.to!string(this.collisionRule) ~ ", formatting: " ~ std.conv.to!string(this.formatting) ~ ", prefix: " ~ std.conv.to!string(this.prefix) ~ ", suffix: " ~ std.conv.to!string(this.suffix) ~ ", players: " ~ std.conv.to!string(this.players) ~ ")";
3803         }
3804 
3805     }
3806 
3807     class RemoveTeam : Java393Packet
3808     {
3809 
3810         enum typeof(mode) MODE = 1;
3811 
3812         enum string[] __fields = [];
3813 
3814         mixin Make;
3815 
3816         override string toString()
3817         {
3818             return "Teams.RemoveTeam()";
3819         }
3820 
3821     }
3822 
3823     class UpdateTeamInfo : Java393Packet
3824     {
3825 
3826         enum typeof(mode) MODE = 2;
3827 
3828         // friendly flags
3829         enum ubyte FRIENDLY_FIRE = 1;
3830         enum ubyte SEE_TEAM_INVISIBLE_PLAYERS = 2;
3831 
3832         // nametag visibility
3833         enum string ALWAYS_HIDE = "always";
3834         enum string HIDE_OTHER_TEAMS = "hideOtherTeams";
3835         enum string HIDE_OWN_TEAM = "hideOwnTeam";
3836         enum string NEVER_HIDE = "never";
3837 
3838         // collision rule
3839         enum string ALWAYS_PUSH = "always";
3840         enum string PUSH_OTHER_TEAMS = "pushOtherTeams";
3841         enum string PUSH_OWN_TEAM = "pushOwnTeam";
3842         enum string NEVER_PUSH = "never";
3843 
3844         enum string[] __fields = ["displayName", "friendlyFlags", "nametagVisibility", "collisionRule", "formatting", "prefix", "suffix"];
3845 
3846         string displayName;
3847         ubyte friendlyFlags;
3848         string nametagVisibility;
3849         string collisionRule;
3850         @Var uint formatting;
3851         string prefix;
3852         string suffix;
3853 
3854         this() pure nothrow @safe @nogc {}
3855 
3856         this(string displayName, ubyte friendlyFlags=ubyte.init, string nametagVisibility=string.init, string collisionRule=string.init, uint formatting=uint.init, string prefix=string.init, string suffix=string.init) pure nothrow @safe @nogc
3857         {
3858             this.displayName = displayName;
3859             this.friendlyFlags = friendlyFlags;
3860             this.nametagVisibility = nametagVisibility;
3861             this.collisionRule = collisionRule;
3862             this.formatting = formatting;
3863             this.prefix = prefix;
3864             this.suffix = suffix;
3865         }
3866 
3867         mixin Make;
3868 
3869         override string toString()
3870         {
3871             return "Teams.UpdateTeamInfo(displayName: " ~ std.conv.to!string(this.displayName) ~ ", friendlyFlags: " ~ std.conv.to!string(this.friendlyFlags) ~ ", nametagVisibility: " ~ std.conv.to!string(this.nametagVisibility) ~ ", collisionRule: " ~ std.conv.to!string(this.collisionRule) ~ ", formatting: " ~ std.conv.to!string(this.formatting) ~ ", prefix: " ~ std.conv.to!string(this.prefix) ~ ", suffix: " ~ std.conv.to!string(this.suffix) ~ ")";
3872         }
3873 
3874     }
3875 
3876     class AddPlayers : Java393Packet
3877     {
3878 
3879         enum typeof(mode) MODE = 3;
3880 
3881         enum string[] __fields = ["players"];
3882 
3883         string[] players;
3884 
3885         this() pure nothrow @safe @nogc {}
3886 
3887         this(string[] players) pure nothrow @safe @nogc
3888         {
3889             this.players = players;
3890         }
3891 
3892         mixin Make;
3893 
3894         override string toString()
3895         {
3896             return "Teams.AddPlayers(players: " ~ std.conv.to!string(this.players) ~ ")";
3897         }
3898 
3899     }
3900 
3901     class RemovePlayers : Java393Packet
3902     {
3903 
3904         enum typeof(mode) MODE = 4;
3905 
3906         enum string[] __fields = ["players"];
3907 
3908         string[] players;
3909 
3910         this() pure nothrow @safe @nogc {}
3911 
3912         this(string[] players) pure nothrow @safe @nogc
3913         {
3914             this.players = players;
3915         }
3916 
3917         mixin Make;
3918 
3919         override string toString()
3920         {
3921             return "Teams.RemovePlayers(players: " ~ std.conv.to!string(this.players) ~ ")";
3922         }
3923 
3924     }
3925 
3926 }
3927 
3928 class UpdateScore : Java393Packet
3929 {
3930 
3931     enum uint ID = 72;
3932 
3933     enum bool CLIENTBOUND = true;
3934     enum bool SERVERBOUND = false;
3935 
3936     // action
3937     enum ubyte UPDATE = 0;
3938     enum ubyte REMOVE = 1;
3939 
3940     enum string[] __fields = ["scoreName", "action", "objectiveName", "value"];
3941 
3942     string scoreName;
3943     ubyte action;
3944     string objectiveName;
3945     @Condition("action==0") @Var uint value;
3946 
3947     this() pure nothrow @safe @nogc {}
3948 
3949     this(string scoreName, ubyte action=ubyte.init, string objectiveName=string.init, uint value=uint.init) pure nothrow @safe @nogc
3950     {
3951         this.scoreName = scoreName;
3952         this.action = action;
3953         this.objectiveName = objectiveName;
3954         this.value = value;
3955     }
3956 
3957     mixin Make;
3958 
3959     public static typeof(this) fromBuffer(ubyte[] buffer)
3960     {
3961         UpdateScore ret = new UpdateScore();
3962         ret.autoDecode(buffer);
3963         return ret;
3964     }
3965 
3966     override string toString()
3967     {
3968         return "UpdateScore(scoreName: " ~ std.conv.to!string(this.scoreName) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", objectiveName: " ~ std.conv.to!string(this.objectiveName) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
3969     }
3970 
3971 }
3972 
3973 class SpawnPosition : Java393Packet
3974 {
3975 
3976     enum uint ID = 73;
3977 
3978     enum bool CLIENTBOUND = true;
3979     enum bool SERVERBOUND = false;
3980 
3981     enum string[] __fields = ["position"];
3982 
3983     ulong position;
3984 
3985     this() pure nothrow @safe @nogc {}
3986 
3987     this(ulong position) pure nothrow @safe @nogc
3988     {
3989         this.position = position;
3990     }
3991 
3992     mixin Make;
3993 
3994     public static typeof(this) fromBuffer(ubyte[] buffer)
3995     {
3996         SpawnPosition ret = new SpawnPosition();
3997         ret.autoDecode(buffer);
3998         return ret;
3999     }
4000 
4001     override string toString()
4002     {
4003         return "SpawnPosition(position: " ~ std.conv.to!string(this.position) ~ ")";
4004     }
4005 
4006 }
4007 
4008 class TimeUpdate : Java393Packet
4009 {
4010 
4011     enum uint ID = 74;
4012 
4013     enum bool CLIENTBOUND = true;
4014     enum bool SERVERBOUND = false;
4015 
4016     enum string[] __fields = ["worldAge", "time"];
4017 
4018     ulong worldAge;
4019     long time;
4020 
4021     this() pure nothrow @safe @nogc {}
4022 
4023     this(ulong worldAge, long time=long.init) pure nothrow @safe @nogc
4024     {
4025         this.worldAge = worldAge;
4026         this.time = time;
4027     }
4028 
4029     mixin Make;
4030 
4031     public static typeof(this) fromBuffer(ubyte[] buffer)
4032     {
4033         TimeUpdate ret = new TimeUpdate();
4034         ret.autoDecode(buffer);
4035         return ret;
4036     }
4037 
4038     override string toString()
4039     {
4040         return "TimeUpdate(worldAge: " ~ std.conv.to!string(this.worldAge) ~ ", time: " ~ std.conv.to!string(this.time) ~ ")";
4041     }
4042 
4043 }
4044 
4045 class Title : Java393Packet
4046 {
4047 
4048     enum uint ID = 75;
4049 
4050     enum bool CLIENTBOUND = true;
4051     enum bool SERVERBOUND = false;
4052 
4053     enum string[] __fields = ["action"];
4054 
4055     @Var uint action;
4056 
4057     this() pure nothrow @safe @nogc {}
4058 
4059     this(uint action) pure nothrow @safe @nogc
4060     {
4061         this.action = action;
4062     }
4063 
4064     mixin Make;
4065 
4066     public static typeof(this) fromBuffer(ubyte[] buffer)
4067     {
4068         Title ret = new Title();
4069         ret.autoDecode(buffer);
4070         return ret;
4071     }
4072 
4073     override string toString()
4074     {
4075         return "Title(action: " ~ std.conv.to!string(this.action) ~ ")";
4076     }
4077 
4078     enum string variantField = "action";
4079 
4080     alias Variants = TypeTuple!(SetTitle, SetSubtitle, SetActionBar, SetTimings, Hide, Reset);
4081 
4082     class SetTitle : Java393Packet
4083     {
4084 
4085         enum typeof(action) ACTION = 0;
4086 
4087         enum string[] __fields = ["text"];
4088 
4089         string text;
4090 
4091         this() pure nothrow @safe @nogc {}
4092 
4093         this(string text) pure nothrow @safe @nogc
4094         {
4095             this.text = text;
4096         }
4097 
4098         mixin Make;
4099 
4100         override string toString()
4101         {
4102             return "Title.SetTitle(text: " ~ std.conv.to!string(this.text) ~ ")";
4103         }
4104 
4105     }
4106 
4107     class SetSubtitle : Java393Packet
4108     {
4109 
4110         enum typeof(action) ACTION = 1;
4111 
4112         enum string[] __fields = ["text"];
4113 
4114         string text;
4115 
4116         this() pure nothrow @safe @nogc {}
4117 
4118         this(string text) pure nothrow @safe @nogc
4119         {
4120             this.text = text;
4121         }
4122 
4123         mixin Make;
4124 
4125         override string toString()
4126         {
4127             return "Title.SetSubtitle(text: " ~ std.conv.to!string(this.text) ~ ")";
4128         }
4129 
4130     }
4131 
4132     class SetActionBar : Java393Packet
4133     {
4134 
4135         enum typeof(action) ACTION = 2;
4136 
4137         enum string[] __fields = ["text"];
4138 
4139         string text;
4140 
4141         this() pure nothrow @safe @nogc {}
4142 
4143         this(string text) pure nothrow @safe @nogc
4144         {
4145             this.text = text;
4146         }
4147 
4148         mixin Make;
4149 
4150         override string toString()
4151         {
4152             return "Title.SetActionBar(text: " ~ std.conv.to!string(this.text) ~ ")";
4153         }
4154 
4155     }
4156 
4157     class SetTimings : Java393Packet
4158     {
4159 
4160         enum typeof(action) ACTION = 3;
4161 
4162         enum string[] __fields = ["fadeIn", "stay", "fadeOut"];
4163 
4164         uint fadeIn;
4165         uint stay;
4166         uint fadeOut;
4167 
4168         this() pure nothrow @safe @nogc {}
4169 
4170         this(uint fadeIn, uint stay=uint.init, uint fadeOut=uint.init) pure nothrow @safe @nogc
4171         {
4172             this.fadeIn = fadeIn;
4173             this.stay = stay;
4174             this.fadeOut = fadeOut;
4175         }
4176 
4177         mixin Make;
4178 
4179         override string toString()
4180         {
4181             return "Title.SetTimings(fadeIn: " ~ std.conv.to!string(this.fadeIn) ~ ", stay: " ~ std.conv.to!string(this.stay) ~ ", fadeOut: " ~ std.conv.to!string(this.fadeOut) ~ ")";
4182         }
4183 
4184     }
4185 
4186     class Hide : Java393Packet
4187     {
4188 
4189         enum typeof(action) ACTION = 4;
4190 
4191         enum string[] __fields = [];
4192 
4193         mixin Make;
4194 
4195         override string toString()
4196         {
4197             return "Title.Hide()";
4198         }
4199 
4200     }
4201 
4202     class Reset : Java393Packet
4203     {
4204 
4205         enum typeof(action) ACTION = 5;
4206 
4207         enum string[] __fields = [];
4208 
4209         mixin Make;
4210 
4211         override string toString()
4212         {
4213             return "Title.Reset()";
4214         }
4215 
4216     }
4217 
4218 }
4219 
4220 class StopSound : Java393Packet
4221 {
4222 
4223     enum uint ID = 76;
4224 
4225     enum bool CLIENTBOUND = true;
4226     enum bool SERVERBOUND = false;
4227 
4228     // source
4229     enum uint MASTER = 0;
4230     enum uint MUSIC = 1;
4231     enum uint RECORD = 2;
4232     enum uint WEATHER = 3;
4233     enum uint BLOCK = 4;
4234     enum uint HOSTILE = 5;
4235     enum uint NEUTRAL = 6;
4236     enum uint PLAYER = 7;
4237     enum uint AMBIENT = 8;
4238     enum uint VOICE = 9;
4239 
4240     enum string[] __fields = ["flags", "source", "sound"];
4241 
4242     ubyte flags;
4243     @Condition("(flags&1)!=0") @Var uint source;
4244     @Condition("(flags&2)!=0") string sound;
4245 
4246     this() pure nothrow @safe @nogc {}
4247 
4248     this(ubyte flags, uint source=uint.init, string sound=string.init) pure nothrow @safe @nogc
4249     {
4250         this.flags = flags;
4251         this.source = source;
4252         this.sound = sound;
4253     }
4254 
4255     mixin Make;
4256 
4257     public static typeof(this) fromBuffer(ubyte[] buffer)
4258     {
4259         StopSound ret = new StopSound();
4260         ret.autoDecode(buffer);
4261         return ret;
4262     }
4263 
4264     override string toString()
4265     {
4266         return "StopSound(flags: " ~ std.conv.to!string(this.flags) ~ ", source: " ~ std.conv.to!string(this.source) ~ ", sound: " ~ std.conv.to!string(this.sound) ~ ")";
4267     }
4268 
4269 }
4270 
4271 class SoundEffect : Java393Packet
4272 {
4273 
4274     enum uint ID = 77;
4275 
4276     enum bool CLIENTBOUND = true;
4277     enum bool SERVERBOUND = false;
4278 
4279     enum string[] __fields = ["soundId", "category", "position", "volume", "pitch"];
4280 
4281     @Var uint soundId;
4282     @Var uint category;
4283     Vector!(int, "xyz") position;
4284     float volume;
4285     float pitch;
4286 
4287     this() pure nothrow @safe @nogc {}
4288 
4289     this(uint soundId, uint category=uint.init, Vector!(int, "xyz") position=Vector!(int, "xyz").init, float volume=float.init, float pitch=float.init) pure nothrow @safe @nogc
4290     {
4291         this.soundId = soundId;
4292         this.category = category;
4293         this.position = position;
4294         this.volume = volume;
4295         this.pitch = pitch;
4296     }
4297 
4298     mixin Make;
4299 
4300     public static typeof(this) fromBuffer(ubyte[] buffer)
4301     {
4302         SoundEffect ret = new SoundEffect();
4303         ret.autoDecode(buffer);
4304         return ret;
4305     }
4306 
4307     override string toString()
4308     {
4309         return "SoundEffect(soundId: " ~ std.conv.to!string(this.soundId) ~ ", category: " ~ std.conv.to!string(this.category) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", volume: " ~ std.conv.to!string(this.volume) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ")";
4310     }
4311 
4312 }
4313 
4314 class PlayerListHeaderAndFooter : Java393Packet
4315 {
4316 
4317     enum uint ID = 78;
4318 
4319     enum bool CLIENTBOUND = true;
4320     enum bool SERVERBOUND = false;
4321 
4322     enum string[] __fields = ["header", "footer"];
4323 
4324     string header;
4325     string footer;
4326 
4327     this() pure nothrow @safe @nogc {}
4328 
4329     this(string header, string footer=string.init) pure nothrow @safe @nogc
4330     {
4331         this.header = header;
4332         this.footer = footer;
4333     }
4334 
4335     mixin Make;
4336 
4337     public static typeof(this) fromBuffer(ubyte[] buffer)
4338     {
4339         PlayerListHeaderAndFooter ret = new PlayerListHeaderAndFooter();
4340         ret.autoDecode(buffer);
4341         return ret;
4342     }
4343 
4344     override string toString()
4345     {
4346         return "PlayerListHeaderAndFooter(header: " ~ std.conv.to!string(this.header) ~ ", footer: " ~ std.conv.to!string(this.footer) ~ ")";
4347     }
4348 
4349 }
4350 
4351 class CollectItem : Java393Packet
4352 {
4353 
4354     enum uint ID = 79;
4355 
4356     enum bool CLIENTBOUND = true;
4357     enum bool SERVERBOUND = false;
4358 
4359     enum string[] __fields = ["collected", "collector", "count"];
4360 
4361     @Var uint collected;
4362     @Var uint collector;
4363     @Var uint count;
4364 
4365     this() pure nothrow @safe @nogc {}
4366 
4367     this(uint collected, uint collector=uint.init, uint count=uint.init) pure nothrow @safe @nogc
4368     {
4369         this.collected = collected;
4370         this.collector = collector;
4371         this.count = count;
4372     }
4373 
4374     mixin Make;
4375 
4376     public static typeof(this) fromBuffer(ubyte[] buffer)
4377     {
4378         CollectItem ret = new CollectItem();
4379         ret.autoDecode(buffer);
4380         return ret;
4381     }
4382 
4383     override string toString()
4384     {
4385         return "CollectItem(collected: " ~ std.conv.to!string(this.collected) ~ ", collector: " ~ std.conv.to!string(this.collector) ~ ", count: " ~ std.conv.to!string(this.count) ~ ")";
4386     }
4387 
4388 }
4389 
4390 class EntityTeleport : Java393Packet
4391 {
4392 
4393     enum uint ID = 80;
4394 
4395     enum bool CLIENTBOUND = true;
4396     enum bool SERVERBOUND = false;
4397 
4398     enum string[] __fields = ["entityId", "position", "yaw", "pitch", "onGround"];
4399 
4400     @Var uint entityId;
4401     Vector!(double, "xyz") position;
4402     ubyte yaw;
4403     ubyte pitch;
4404     bool onGround;
4405 
4406     this() pure nothrow @safe @nogc {}
4407 
4408     this(uint entityId, Vector!(double, "xyz") position=Vector!(double, "xyz").init, ubyte yaw=ubyte.init, ubyte pitch=ubyte.init, bool onGround=bool.init) pure nothrow @safe @nogc
4409     {
4410         this.entityId = entityId;
4411         this.position = position;
4412         this.yaw = yaw;
4413         this.pitch = pitch;
4414         this.onGround = onGround;
4415     }
4416 
4417     mixin Make;
4418 
4419     public static typeof(this) fromBuffer(ubyte[] buffer)
4420     {
4421         EntityTeleport ret = new EntityTeleport();
4422         ret.autoDecode(buffer);
4423         return ret;
4424     }
4425 
4426     override string toString()
4427     {
4428         return "EntityTeleport(entityId: " ~ std.conv.to!string(this.entityId) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", yaw: " ~ std.conv.to!string(this.yaw) ~ ", pitch: " ~ std.conv.to!string(this.pitch) ~ ", onGround: " ~ std.conv.to!string(this.onGround) ~ ")";
4429     }
4430 
4431 }
4432 
4433 class Advencements : Java393Packet
4434 {
4435 
4436     enum uint ID = 81;
4437 
4438     enum bool CLIENTBOUND = true;
4439     enum bool SERVERBOUND = false;
4440 
4441     enum string[] __fields = [];
4442 
4443     mixin Make;
4444 
4445     public static typeof(this) fromBuffer(ubyte[] buffer)
4446     {
4447         Advencements ret = new Advencements();
4448         ret.autoDecode(buffer);
4449         return ret;
4450     }
4451 
4452     override string toString()
4453     {
4454         return "Advencements()";
4455     }
4456 
4457 }
4458 
4459 class EntityProperties : Java393Packet
4460 {
4461 
4462     enum uint ID = 82;
4463 
4464     enum bool CLIENTBOUND = true;
4465     enum bool SERVERBOUND = false;
4466 
4467     enum string[] __fields = ["entityId", "attributes"];
4468 
4469     @Var uint entityId;
4470     @Length!uint soupply.java393.types.Attribute[] attributes;
4471 
4472     this() pure nothrow @safe @nogc {}
4473 
4474     this(uint entityId, soupply.java393.types.Attribute[] attributes=(soupply.java393.types.Attribute[]).init) pure nothrow @safe @nogc
4475     {
4476         this.entityId = entityId;
4477         this.attributes = attributes;
4478     }
4479 
4480     mixin Make;
4481 
4482     public static typeof(this) fromBuffer(ubyte[] buffer)
4483     {
4484         EntityProperties ret = new EntityProperties();
4485         ret.autoDecode(buffer);
4486         return ret;
4487     }
4488 
4489     override string toString()
4490     {
4491         return "EntityProperties(entityId: " ~ std.conv.to!string(this.entityId) ~ ", attributes: " ~ std.conv.to!string(this.attributes) ~ ")";
4492     }
4493 
4494 }
4495 
4496 class EntityEffect : Java393Packet
4497 {
4498 
4499     enum uint ID = 83;
4500 
4501     enum bool CLIENTBOUND = true;
4502     enum bool SERVERBOUND = false;
4503 
4504     // effect id
4505     enum ubyte SPEED = 1;
4506     enum ubyte SLOWNESS = 2;
4507     enum ubyte HASTE = 3;
4508     enum ubyte MINING_FATIGUE = 4;
4509     enum ubyte STRENGTH = 5;
4510     enum ubyte INSTANT_HEALTH = 6;
4511     enum ubyte INSTANT_DAMAGE = 7;
4512     enum ubyte JUMP_BOOST = 8;
4513     enum ubyte NAUSEA = 9;
4514     enum ubyte REGENERATION = 10;
4515     enum ubyte RESISTANCE = 11;
4516     enum ubyte FIRE_RESISTANCE = 12;
4517     enum ubyte WATER_BREATHING = 13;
4518     enum ubyte INVISIBILITY = 14;
4519     enum ubyte BLINDNESS = 15;
4520     enum ubyte NIGHT_VISION = 16;
4521     enum ubyte HUNGER = 17;
4522     enum ubyte WEAKNESS = 18;
4523     enum ubyte POISON = 19;
4524     enum ubyte WITHER = 20;
4525     enum ubyte HEALTH_BOOST = 21;
4526     enum ubyte ABSORPTION = 22;
4527     enum ubyte SATURATION = 23;
4528     enum ubyte GLOWING = 24;
4529     enum ubyte LEVITATION = 25;
4530     enum ubyte LUCK = 26;
4531     enum ubyte BAD_LUCK = 27;
4532 
4533     // flags
4534     enum ubyte AMBIENT = 1;
4535     enum ubyte SHOW_PARTICLES = 2;
4536 
4537     enum string[] __fields = ["entityId", "effectId", "amplifier", "duration", "flags"];
4538 
4539     @Var uint entityId;
4540     ubyte effectId;
4541     ubyte amplifier;
4542     @Var uint duration;
4543     ubyte flags;
4544 
4545     this() pure nothrow @safe @nogc {}
4546 
4547     this(uint entityId, ubyte effectId=ubyte.init, ubyte amplifier=ubyte.init, uint duration=uint.init, ubyte flags=ubyte.init) pure nothrow @safe @nogc
4548     {
4549         this.entityId = entityId;
4550         this.effectId = effectId;
4551         this.amplifier = amplifier;
4552         this.duration = duration;
4553         this.flags = flags;
4554     }
4555 
4556     mixin Make;
4557 
4558     public static typeof(this) fromBuffer(ubyte[] buffer)
4559     {
4560         EntityEffect ret = new EntityEffect();
4561         ret.autoDecode(buffer);
4562         return ret;
4563     }
4564 
4565     override string toString()
4566     {
4567         return "EntityEffect(entityId: " ~ std.conv.to!string(this.entityId) ~ ", effectId: " ~ std.conv.to!string(this.effectId) ~ ", amplifier: " ~ std.conv.to!string(this.amplifier) ~ ", duration: " ~ std.conv.to!string(this.duration) ~ ", flags: " ~ std.conv.to!string(this.flags) ~ ")";
4568     }
4569 
4570 }
4571 
4572 class DeclareRecipes : Java393Packet
4573 {
4574 
4575     enum uint ID = 84;
4576 
4577     enum bool CLIENTBOUND = true;
4578     enum bool SERVERBOUND = false;
4579 
4580     enum string[] __fields = ["recipes"];
4581 
4582     soupply.java393.types.Recipe[] recipes;
4583 
4584     this() pure nothrow @safe @nogc {}
4585 
4586     this(soupply.java393.types.Recipe[] recipes) pure nothrow @safe @nogc
4587     {
4588         this.recipes = recipes;
4589     }
4590 
4591     mixin Make;
4592 
4593     public static typeof(this) fromBuffer(ubyte[] buffer)
4594     {
4595         DeclareRecipes ret = new DeclareRecipes();
4596         ret.autoDecode(buffer);
4597         return ret;
4598     }
4599 
4600     override string toString()
4601     {
4602         return "DeclareRecipes(recipes: " ~ std.conv.to!string(this.recipes) ~ ")";
4603     }
4604 
4605 }
4606 
4607 class Tags : Java393Packet
4608 {
4609 
4610     enum uint ID = 85;
4611 
4612     enum bool CLIENTBOUND = true;
4613     enum bool SERVERBOUND = false;
4614 
4615     enum string[] __fields = ["blockTags", "itemTags", "fluidTags"];
4616 
4617     soupply.java393.types.Tag[] blockTags;
4618     soupply.java393.types.Tag[] itemTags;
4619     soupply.java393.types.Tag[] fluidTags;
4620 
4621     this() pure nothrow @safe @nogc {}
4622 
4623     this(soupply.java393.types.Tag[] blockTags, soupply.java393.types.Tag[] itemTags=(soupply.java393.types.Tag[]).init, soupply.java393.types.Tag[] fluidTags=(soupply.java393.types.Tag[]).init) pure nothrow @safe @nogc
4624     {
4625         this.blockTags = blockTags;
4626         this.itemTags = itemTags;
4627         this.fluidTags = fluidTags;
4628     }
4629 
4630     mixin Make;
4631 
4632     public static typeof(this) fromBuffer(ubyte[] buffer)
4633     {
4634         Tags ret = new Tags();
4635         ret.autoDecode(buffer);
4636         return ret;
4637     }
4638 
4639     override string toString()
4640     {
4641         return "Tags(blockTags: " ~ std.conv.to!string(this.blockTags) ~ ", itemTags: " ~ std.conv.to!string(this.itemTags) ~ ", fluidTags: " ~ std.conv.to!string(this.fluidTags) ~ ")";
4642     }
4643 
4644 }