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