1 /*
2  * This file has been automatically generated by Soupply and released under the MIT license.
3  * Generated from bedrock160
4  */
5 module soupply.bedrock160.metadata;
6 
7 import packetmaker;
8 import packetmaker.maker : EndianType, writeLength, writeImpl, readLength, readImpl;
9 
10 import soupply.util;
11 
12 static import soupply.bedrock160.types;
13 
14 class MetadataValue : PacketImpl!(Endian.littleEndian, varuint, varuint)
15 {
16 
17     @Var @EncodeOnly uint type;
18 
19     this(uint type) pure nothrow @safe @nogc
20     {
21         this.type = type;
22     }
23 
24     mixin Make;
25 
26 }
27 
28 class MetadataByte : MetadataValue
29 {
30 
31     byte value;
32 
33     this() pure nothrow @safe @nogc
34     {
35         super(0);
36     }
37 
38     this(byte value) pure nothrow @safe @nogc
39     {
40         this();
41         this.value = value;
42     }
43 
44     mixin Make;
45 
46 }
47 
48 class MetadataShort : MetadataValue
49 {
50 
51     short value;
52 
53     this() pure nothrow @safe @nogc
54     {
55         super(1);
56     }
57 
58     this(short value) pure nothrow @safe @nogc
59     {
60         this();
61         this.value = value;
62     }
63 
64     mixin Make;
65 
66 }
67 
68 class MetadataInt : MetadataValue
69 {
70 
71     @Var int value;
72 
73     this() pure nothrow @safe @nogc
74     {
75         super(2);
76     }
77 
78     this(int value) pure nothrow @safe @nogc
79     {
80         this();
81         this.value = value;
82     }
83 
84     mixin Make;
85 
86 }
87 
88 class MetadataFloat : MetadataValue
89 {
90 
91     float value;
92 
93     this() pure nothrow @safe @nogc
94     {
95         super(3);
96     }
97 
98     this(float value) pure nothrow @safe @nogc
99     {
100         this();
101         this.value = value;
102     }
103 
104     mixin Make;
105 
106 }
107 
108 class MetadataString : MetadataValue
109 {
110 
111     string value;
112 
113     this() pure nothrow @safe @nogc
114     {
115         super(4);
116     }
117 
118     this(string value) pure nothrow @safe @nogc
119     {
120         this();
121         this.value = value;
122     }
123 
124     mixin Make;
125 
126 }
127 
128 class MetadataSlot : MetadataValue
129 {
130 
131     soupply.bedrock160.types.Slot value;
132 
133     this() pure nothrow @safe @nogc
134     {
135         super(5);
136     }
137 
138     this(soupply.bedrock160.types.Slot value) pure nothrow @safe @nogc
139     {
140         this();
141         this.value = value;
142     }
143 
144     mixin Make;
145 
146 }
147 
148 class MetadataBlockPosition : MetadataValue
149 {
150 
151     @Var Vector!(int, "xyz") value;
152 
153     this() pure nothrow @safe @nogc
154     {
155         super(6);
156     }
157 
158     this(Vector!(int, "xyz") value) pure nothrow @safe @nogc
159     {
160         this();
161         this.value = value;
162     }
163 
164     mixin Make;
165 
166 }
167 
168 class MetadataLong : MetadataValue
169 {
170 
171     @Var long value;
172 
173     this() pure nothrow @safe @nogc
174     {
175         super(7);
176     }
177 
178     this(long value) pure nothrow @safe @nogc
179     {
180         this();
181         this.value = value;
182     }
183 
184     mixin Make;
185 
186 }
187 
188 class MetadataEntityPosition : MetadataValue
189 {
190 
191     Vector!(float, "xyz") value;
192 
193     this() pure nothrow @safe @nogc
194     {
195         super(8);
196     }
197 
198     this(Vector!(float, "xyz") value) pure nothrow @safe @nogc
199     {
200         this();
201         this.value = value;
202     }
203 
204     mixin Make;
205 
206 }
207 
208 struct Metadata
209 {
210 
211     MetadataValue[uint] values;
212 
213     void encodeBody(Buffer buffer)
214     {
215         writeLength!(EndianType.var, uint)(buffer, values.length);
216         foreach(id, value; values)
217         {
218             writeImpl!(EndianType.var, uint)(buffer, id);
219             value.encodeBody(buffer);
220         }
221     }
222 
223     void decodeBody(Buffer buffer)
224     {
225         foreach(i ; 0..readLength!(EndianType.var, uint)(buffer))
226         {
227             uint id = readImpl!(EndianType.var, uint)(buffer);
228             switch(readImpl!(EndianType.var, uint)(buffer))
229             {
230                 case 0:
231                     auto value = new MetadataByte();
232                     value.decodeBody(buffer);
233                     this.values[id] = value;
234                     break;
235                 case 1:
236                     auto value = new MetadataShort();
237                     value.decodeBody(buffer);
238                     this.values[id] = value;
239                     break;
240                 case 2:
241                     auto value = new MetadataInt();
242                     value.decodeBody(buffer);
243                     this.values[id] = value;
244                     break;
245                 case 3:
246                     auto value = new MetadataFloat();
247                     value.decodeBody(buffer);
248                     this.values[id] = value;
249                     break;
250                 case 4:
251                     auto value = new MetadataString();
252                     value.decodeBody(buffer);
253                     this.values[id] = value;
254                     break;
255                 case 5:
256                     auto value = new MetadataSlot();
257                     value.decodeBody(buffer);
258                     this.values[id] = value;
259                     break;
260                 case 6:
261                     auto value = new MetadataBlockPosition();
262                     value.decodeBody(buffer);
263                     this.values[id] = value;
264                     break;
265                 case 7:
266                     auto value = new MetadataLong();
267                     value.decodeBody(buffer);
268                     this.values[id] = value;
269                     break;
270                 case 8:
271                     auto value = new MetadataEntityPosition();
272                     value.decodeBody(buffer);
273                     this.values[id] = value;
274                     break;
275                 default: throw new Exception("Unknown metadata type");
276             }
277         }
278     }
279 
280     @property long entityFlags()
281     {
282         auto ptr = 0 in this.values;
283         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
284         return long(0);
285     }
286 
287     @property long entityFlags(long value)
288     {
289         auto ptr = 0 in this.values;
290         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
291         else this.values[0] = new MetadataLong(value);
292         return value;
293     }
294 
295     @property int health()
296     {
297         auto ptr = 1 in this.values;
298         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
299         return (int).init;
300     }
301 
302     @property int health(int value)
303     {
304         auto ptr = 1 in this.values;
305         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
306         else this.values[1] = new MetadataInt(value);
307         return value;
308     }
309 
310     @property int variant()
311     {
312         auto ptr = 2 in this.values;
313         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
314         return (int).init;
315     }
316 
317     @property int variant(int value)
318     {
319         auto ptr = 2 in this.values;
320         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
321         else this.values[2] = new MetadataInt(value);
322         return value;
323     }
324 
325     @property byte color()
326     {
327         auto ptr = 3 in this.values;
328         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
329         return (byte).init;
330     }
331 
332     @property byte color(byte value)
333     {
334         auto ptr = 3 in this.values;
335         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
336         else this.values[3] = new MetadataByte(value);
337         return value;
338     }
339 
340     @property string nametag()
341     {
342         auto ptr = 4 in this.values;
343         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
344         return (string).init;
345     }
346 
347     @property string nametag(string value)
348     {
349         auto ptr = 4 in this.values;
350         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
351         else this.values[4] = new MetadataString(value);
352         return value;
353     }
354 
355     @property long owner()
356     {
357         auto ptr = 5 in this.values;
358         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
359         return long(-1);
360     }
361 
362     @property long owner(long value)
363     {
364         auto ptr = 5 in this.values;
365         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
366         else this.values[5] = new MetadataLong(value);
367         return value;
368     }
369 
370     @property long target()
371     {
372         auto ptr = 6 in this.values;
373         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
374         return (long).init;
375     }
376 
377     @property long target(long value)
378     {
379         auto ptr = 6 in this.values;
380         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
381         else this.values[6] = new MetadataLong(value);
382         return value;
383     }
384 
385     @property short air()
386     {
387         auto ptr = 7 in this.values;
388         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
389         return short(0);
390     }
391 
392     @property short air(short value)
393     {
394         auto ptr = 7 in this.values;
395         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
396         else this.values[7] = new MetadataShort(value);
397         return value;
398     }
399 
400     @property int potionColor()
401     {
402         auto ptr = 8 in this.values;
403         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
404         return (int).init;
405     }
406 
407     @property int potionColor(int value)
408     {
409         auto ptr = 8 in this.values;
410         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
411         else this.values[8] = new MetadataInt(value);
412         return value;
413     }
414 
415     @property byte potionAmbient()
416     {
417         auto ptr = 9 in this.values;
418         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
419         return (byte).init;
420     }
421 
422     @property byte potionAmbient(byte value)
423     {
424         auto ptr = 9 in this.values;
425         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
426         else this.values[9] = new MetadataByte(value);
427         return value;
428     }
429 
430     @property int hurtTime()
431     {
432         auto ptr = 11 in this.values;
433         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
434         return (int).init;
435     }
436 
437     @property int hurtTime(int value)
438     {
439         auto ptr = 11 in this.values;
440         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
441         else this.values[11] = new MetadataInt(value);
442         return value;
443     }
444 
445     @property int hurtDirection()
446     {
447         auto ptr = 12 in this.values;
448         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
449         return (int).init;
450     }
451 
452     @property int hurtDirection(int value)
453     {
454         auto ptr = 12 in this.values;
455         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
456         else this.values[12] = new MetadataInt(value);
457         return value;
458     }
459 
460     @property float paddleTimeLeft()
461     {
462         auto ptr = 13 in this.values;
463         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
464         return (float).init;
465     }
466 
467     @property float paddleTimeLeft(float value)
468     {
469         auto ptr = 13 in this.values;
470         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
471         else this.values[13] = new MetadataFloat(value);
472         return value;
473     }
474 
475     @property float paddleTimeRight()
476     {
477         auto ptr = 14 in this.values;
478         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
479         return (float).init;
480     }
481 
482     @property float paddleTimeRight(float value)
483     {
484         auto ptr = 14 in this.values;
485         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
486         else this.values[14] = new MetadataFloat(value);
487         return value;
488     }
489 
490     @property int experienceCount()
491     {
492         auto ptr = 15 in this.values;
493         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
494         return (int).init;
495     }
496 
497     @property int experienceCount(int value)
498     {
499         auto ptr = 15 in this.values;
500         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
501         else this.values[15] = new MetadataInt(value);
502         return value;
503     }
504 
505     @property int minecartBlock()
506     {
507         auto ptr = 16 in this.values;
508         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
509         return (int).init;
510     }
511 
512     @property int minecartBlock(int value)
513     {
514         auto ptr = 16 in this.values;
515         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
516         else this.values[16] = new MetadataInt(value);
517         return value;
518     }
519 
520     @property int minecartOffset()
521     {
522         auto ptr = 17 in this.values;
523         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
524         return (int).init;
525     }
526 
527     @property int minecartOffset(int value)
528     {
529         auto ptr = 17 in this.values;
530         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
531         else this.values[17] = new MetadataInt(value);
532         return value;
533     }
534 
535     @property byte minecartHasBlock()
536     {
537         auto ptr = 18 in this.values;
538         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
539         return (byte).init;
540     }
541 
542     @property byte minecartHasBlock(byte value)
543     {
544         auto ptr = 18 in this.values;
545         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
546         else this.values[18] = new MetadataByte(value);
547         return value;
548     }
549 
550     @property short endermanItemId()
551     {
552         auto ptr = 23 in this.values;
553         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
554         return (short).init;
555     }
556 
557     @property short endermanItemId(short value)
558     {
559         auto ptr = 23 in this.values;
560         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
561         else this.values[23] = new MetadataShort(value);
562         return value;
563     }
564 
565     @property short endermanItemDamage()
566     {
567         auto ptr = 24 in this.values;
568         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
569         return (short).init;
570     }
571 
572     @property short endermanItemDamage(short value)
573     {
574         auto ptr = 24 in this.values;
575         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
576         else this.values[24] = new MetadataShort(value);
577         return value;
578     }
579 
580     @property short age()
581     {
582         auto ptr = 25 in this.values;
583         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
584         return (short).init;
585     }
586 
587     @property short age(short value)
588     {
589         auto ptr = 25 in this.values;
590         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
591         else this.values[25] = new MetadataShort(value);
592         return value;
593     }
594 
595     @property byte playerFlags()
596     {
597         auto ptr = 27 in this.values;
598         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
599         return (byte).init;
600     }
601 
602     @property byte playerFlags(byte value)
603     {
604         auto ptr = 27 in this.values;
605         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
606         else this.values[27] = new MetadataByte(value);
607         return value;
608     }
609 
610     @property int playerIndex()
611     {
612         auto ptr = 28 in this.values;
613         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
614         return (int).init;
615     }
616 
617     @property int playerIndex(int value)
618     {
619         auto ptr = 28 in this.values;
620         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
621         else this.values[28] = new MetadataInt(value);
622         return value;
623     }
624 
625     @property Vector!(int, "xyz") bedPosition()
626     {
627         auto ptr = 29 in this.values;
628         if(ptr && cast(MetadataBlockPosition)*ptr) return (cast(MetadataBlockPosition)*ptr).value;
629         return (Vector!(int, "xyz")).init;
630     }
631 
632     @property Vector!(int, "xyz") bedPosition(Vector!(int, "xyz") value)
633     {
634         auto ptr = 29 in this.values;
635         if(ptr && cast(MetadataBlockPosition)*ptr) (cast(MetadataBlockPosition)*ptr).value = value;
636         else this.values[29] = new MetadataBlockPosition(value);
637         return value;
638     }
639 
640     @property float fireballPowerX()
641     {
642         auto ptr = 30 in this.values;
643         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
644         return (float).init;
645     }
646 
647     @property float fireballPowerX(float value)
648     {
649         auto ptr = 30 in this.values;
650         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
651         else this.values[30] = new MetadataFloat(value);
652         return value;
653     }
654 
655     @property float fireballPowerY()
656     {
657         auto ptr = 31 in this.values;
658         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
659         return (float).init;
660     }
661 
662     @property float fireballPowerY(float value)
663     {
664         auto ptr = 31 in this.values;
665         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
666         else this.values[31] = new MetadataFloat(value);
667         return value;
668     }
669 
670     @property float fireballPowerZ()
671     {
672         auto ptr = 32 in this.values;
673         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
674         return (float).init;
675     }
676 
677     @property float fireballPowerZ(float value)
678     {
679         auto ptr = 32 in this.values;
680         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
681         else this.values[32] = new MetadataFloat(value);
682         return value;
683     }
684 
685     @property short potionAuxValue()
686     {
687         auto ptr = 37 in this.values;
688         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
689         return (short).init;
690     }
691 
692     @property short potionAuxValue(short value)
693     {
694         auto ptr = 37 in this.values;
695         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
696         else this.values[37] = new MetadataShort(value);
697         return value;
698     }
699 
700     @property long leadHolder()
701     {
702         auto ptr = 38 in this.values;
703         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
704         return long(-1);
705     }
706 
707     @property long leadHolder(long value)
708     {
709         auto ptr = 38 in this.values;
710         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
711         else this.values[38] = new MetadataLong(value);
712         return value;
713     }
714 
715     @property float scale()
716     {
717         auto ptr = 39 in this.values;
718         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
719         return float(1);
720     }
721 
722     @property float scale(float value)
723     {
724         auto ptr = 39 in this.values;
725         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
726         else this.values[39] = new MetadataFloat(value);
727         return value;
728     }
729 
730     @property string interactiveTag()
731     {
732         auto ptr = 40 in this.values;
733         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
734         return (string).init;
735     }
736 
737     @property string interactiveTag(string value)
738     {
739         auto ptr = 40 in this.values;
740         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
741         else this.values[40] = new MetadataString(value);
742         return value;
743     }
744 
745     @property string npcId()
746     {
747         auto ptr = 41 in this.values;
748         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
749         return (string).init;
750     }
751 
752     @property string npcId(string value)
753     {
754         auto ptr = 41 in this.values;
755         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
756         else this.values[41] = new MetadataString(value);
757         return value;
758     }
759 
760     @property string interactiveTagUrl()
761     {
762         auto ptr = 42 in this.values;
763         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
764         return (string).init;
765     }
766 
767     @property string interactiveTagUrl(string value)
768     {
769         auto ptr = 42 in this.values;
770         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
771         else this.values[42] = new MetadataString(value);
772         return value;
773     }
774 
775     @property short maxAir()
776     {
777         auto ptr = 43 in this.values;
778         if(ptr && cast(MetadataShort)*ptr) return (cast(MetadataShort)*ptr).value;
779         return (short).init;
780     }
781 
782     @property short maxAir(short value)
783     {
784         auto ptr = 43 in this.values;
785         if(ptr && cast(MetadataShort)*ptr) (cast(MetadataShort)*ptr).value = value;
786         else this.values[43] = new MetadataShort(value);
787         return value;
788     }
789 
790     @property int markVariant()
791     {
792         auto ptr = 44 in this.values;
793         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
794         return (int).init;
795     }
796 
797     @property int markVariant(int value)
798     {
799         auto ptr = 44 in this.values;
800         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
801         else this.values[44] = new MetadataInt(value);
802         return value;
803     }
804 
805     @property Vector!(int, "xyz") blockTarget()
806     {
807         auto ptr = 48 in this.values;
808         if(ptr && cast(MetadataBlockPosition)*ptr) return (cast(MetadataBlockPosition)*ptr).value;
809         return (Vector!(int, "xyz")).init;
810     }
811 
812     @property Vector!(int, "xyz") blockTarget(Vector!(int, "xyz") value)
813     {
814         auto ptr = 48 in this.values;
815         if(ptr && cast(MetadataBlockPosition)*ptr) (cast(MetadataBlockPosition)*ptr).value = value;
816         else this.values[48] = new MetadataBlockPosition(value);
817         return value;
818     }
819 
820     @property int invulnerableTime()
821     {
822         auto ptr = 49 in this.values;
823         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
824         return (int).init;
825     }
826 
827     @property int invulnerableTime(int value)
828     {
829         auto ptr = 49 in this.values;
830         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
831         else this.values[49] = new MetadataInt(value);
832         return value;
833     }
834 
835     @property long centerHeadTarget()
836     {
837         auto ptr = 50 in this.values;
838         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
839         return (long).init;
840     }
841 
842     @property long centerHeadTarget(long value)
843     {
844         auto ptr = 50 in this.values;
845         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
846         else this.values[50] = new MetadataLong(value);
847         return value;
848     }
849 
850     @property long leftHeadTarget()
851     {
852         auto ptr = 51 in this.values;
853         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
854         return (long).init;
855     }
856 
857     @property long leftHeadTarget(long value)
858     {
859         auto ptr = 51 in this.values;
860         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
861         else this.values[51] = new MetadataLong(value);
862         return value;
863     }
864 
865     @property long rightHeadTarget()
866     {
867         auto ptr = 52 in this.values;
868         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
869         return (long).init;
870     }
871 
872     @property long rightHeadTarget(long value)
873     {
874         auto ptr = 52 in this.values;
875         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
876         else this.values[52] = new MetadataLong(value);
877         return value;
878     }
879 
880     @property float boundingBoxWidth()
881     {
882         auto ptr = 54 in this.values;
883         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
884         return (float).init;
885     }
886 
887     @property float boundingBoxWidth(float value)
888     {
889         auto ptr = 54 in this.values;
890         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
891         else this.values[54] = new MetadataFloat(value);
892         return value;
893     }
894 
895     @property float boundingBoxHeight()
896     {
897         auto ptr = 55 in this.values;
898         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
899         return (float).init;
900     }
901 
902     @property float boundingBoxHeight(float value)
903     {
904         auto ptr = 55 in this.values;
905         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
906         else this.values[55] = new MetadataFloat(value);
907         return value;
908     }
909 
910     @property int fuseLength()
911     {
912         auto ptr = 56 in this.values;
913         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
914         return (int).init;
915     }
916 
917     @property int fuseLength(int value)
918     {
919         auto ptr = 56 in this.values;
920         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
921         else this.values[56] = new MetadataInt(value);
922         return value;
923     }
924 
925     @property Vector!(float, "xyz") riderSeatPosition()
926     {
927         auto ptr = 57 in this.values;
928         if(ptr && cast(MetadataEntityPosition)*ptr) return (cast(MetadataEntityPosition)*ptr).value;
929         return (Vector!(float, "xyz")).init;
930     }
931 
932     @property Vector!(float, "xyz") riderSeatPosition(Vector!(float, "xyz") value)
933     {
934         auto ptr = 57 in this.values;
935         if(ptr && cast(MetadataEntityPosition)*ptr) (cast(MetadataEntityPosition)*ptr).value = value;
936         else this.values[57] = new MetadataEntityPosition(value);
937         return value;
938     }
939 
940     @property byte riderRotationLocked()
941     {
942         auto ptr = 58 in this.values;
943         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
944         return (byte).init;
945     }
946 
947     @property byte riderRotationLocked(byte value)
948     {
949         auto ptr = 58 in this.values;
950         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
951         else this.values[58] = new MetadataByte(value);
952         return value;
953     }
954 
955     @property float riderMaxRotation()
956     {
957         auto ptr = 59 in this.values;
958         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
959         return (float).init;
960     }
961 
962     @property float riderMaxRotation(float value)
963     {
964         auto ptr = 59 in this.values;
965         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
966         else this.values[59] = new MetadataFloat(value);
967         return value;
968     }
969 
970     @property float riderMinRotation()
971     {
972         auto ptr = 60 in this.values;
973         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
974         return (float).init;
975     }
976 
977     @property float riderMinRotation(float value)
978     {
979         auto ptr = 60 in this.values;
980         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
981         else this.values[60] = new MetadataFloat(value);
982         return value;
983     }
984 
985     @property float areaEffectCloudRadius()
986     {
987         auto ptr = 61 in this.values;
988         if(ptr && cast(MetadataFloat)*ptr) return (cast(MetadataFloat)*ptr).value;
989         return float(0.5);
990     }
991 
992     @property float areaEffectCloudRadius(float value)
993     {
994         auto ptr = 61 in this.values;
995         if(ptr && cast(MetadataFloat)*ptr) (cast(MetadataFloat)*ptr).value = value;
996         else this.values[61] = new MetadataFloat(value);
997         return value;
998     }
999 
1000     @property int areaEffectCloudWaiting()
1001     {
1002         auto ptr = 62 in this.values;
1003         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
1004         return (int).init;
1005     }
1006 
1007     @property int areaEffectCloudWaiting(int value)
1008     {
1009         auto ptr = 62 in this.values;
1010         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
1011         else this.values[62] = new MetadataInt(value);
1012         return value;
1013     }
1014 
1015     @property int areaEffectCloudParticle()
1016     {
1017         auto ptr = 63 in this.values;
1018         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
1019         return (int).init;
1020     }
1021 
1022     @property int areaEffectCloudParticle(int value)
1023     {
1024         auto ptr = 63 in this.values;
1025         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
1026         else this.values[63] = new MetadataInt(value);
1027         return value;
1028     }
1029 
1030     @property int shulkerPeakHeight()
1031     {
1032         auto ptr = 64 in this.values;
1033         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
1034         return (int).init;
1035     }
1036 
1037     @property int shulkerPeakHeight(int value)
1038     {
1039         auto ptr = 64 in this.values;
1040         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
1041         else this.values[64] = new MetadataInt(value);
1042         return value;
1043     }
1044 
1045     @property byte shulkerDirection()
1046     {
1047         auto ptr = 65 in this.values;
1048         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
1049         return (byte).init;
1050     }
1051 
1052     @property byte shulkerDirection(byte value)
1053     {
1054         auto ptr = 65 in this.values;
1055         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
1056         else this.values[65] = new MetadataByte(value);
1057         return value;
1058     }
1059 
1060     @property Vector!(int, "xyz") shulkerAttachment()
1061     {
1062         auto ptr = 67 in this.values;
1063         if(ptr && cast(MetadataBlockPosition)*ptr) return (cast(MetadataBlockPosition)*ptr).value;
1064         return (Vector!(int, "xyz")).init;
1065     }
1066 
1067     @property Vector!(int, "xyz") shulkerAttachment(Vector!(int, "xyz") value)
1068     {
1069         auto ptr = 67 in this.values;
1070         if(ptr && cast(MetadataBlockPosition)*ptr) (cast(MetadataBlockPosition)*ptr).value = value;
1071         else this.values[67] = new MetadataBlockPosition(value);
1072         return value;
1073     }
1074 
1075     @property long tradingPlayer()
1076     {
1077         auto ptr = 68 in this.values;
1078         if(ptr && cast(MetadataLong)*ptr) return (cast(MetadataLong)*ptr).value;
1079         return (long).init;
1080     }
1081 
1082     @property long tradingPlayer(long value)
1083     {
1084         auto ptr = 68 in this.values;
1085         if(ptr && cast(MetadataLong)*ptr) (cast(MetadataLong)*ptr).value = value;
1086         else this.values[68] = new MetadataLong(value);
1087         return value;
1088     }
1089 
1090     @property string commandBlockCommand()
1091     {
1092         auto ptr = 71 in this.values;
1093         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
1094         return (string).init;
1095     }
1096 
1097     @property string commandBlockCommand(string value)
1098     {
1099         auto ptr = 71 in this.values;
1100         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
1101         else this.values[71] = new MetadataString(value);
1102         return value;
1103     }
1104 
1105     @property string commandBlockLastOutput()
1106     {
1107         auto ptr = 72 in this.values;
1108         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
1109         return (string).init;
1110     }
1111 
1112     @property string commandBlockLastOutput(string value)
1113     {
1114         auto ptr = 72 in this.values;
1115         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
1116         else this.values[72] = new MetadataString(value);
1117         return value;
1118     }
1119 
1120     @property string commandBlockTrackOutput()
1121     {
1122         auto ptr = 73 in this.values;
1123         if(ptr && cast(MetadataString)*ptr) return (cast(MetadataString)*ptr).value;
1124         return (string).init;
1125     }
1126 
1127     @property string commandBlockTrackOutput(string value)
1128     {
1129         auto ptr = 73 in this.values;
1130         if(ptr && cast(MetadataString)*ptr) (cast(MetadataString)*ptr).value = value;
1131         else this.values[73] = new MetadataString(value);
1132         return value;
1133     }
1134 
1135     @property byte controllingRiderSeatNumber()
1136     {
1137         auto ptr = 74 in this.values;
1138         if(ptr && cast(MetadataByte)*ptr) return (cast(MetadataByte)*ptr).value;
1139         return (byte).init;
1140     }
1141 
1142     @property byte controllingRiderSeatNumber(byte value)
1143     {
1144         auto ptr = 74 in this.values;
1145         if(ptr && cast(MetadataByte)*ptr) (cast(MetadataByte)*ptr).value = value;
1146         else this.values[74] = new MetadataByte(value);
1147         return value;
1148     }
1149 
1150     @property int strength()
1151     {
1152         auto ptr = 75 in this.values;
1153         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
1154         return (int).init;
1155     }
1156 
1157     @property int strength(int value)
1158     {
1159         auto ptr = 75 in this.values;
1160         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
1161         else this.values[75] = new MetadataInt(value);
1162         return value;
1163     }
1164 
1165     @property int maxStrength()
1166     {
1167         auto ptr = 76 in this.values;
1168         if(ptr && cast(MetadataInt)*ptr) return (cast(MetadataInt)*ptr).value;
1169         return (int).init;
1170     }
1171 
1172     @property int maxStrength(int value)
1173     {
1174         auto ptr = 76 in this.values;
1175         if(ptr && cast(MetadataInt)*ptr) (cast(MetadataInt)*ptr).value = value;
1176         else this.values[76] = new MetadataInt(value);
1177         return value;
1178     }
1179 
1180 }