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