1 /*
2  * This file has been automatically generated by Soupply and released under the MIT license.
3  * Generated from data/bedrock261.xml
4  */
5 module soupply.bedrock261.types;
6 
7 static import std.conv;
8 import packetmaker;
9 import packetmaker.maker : EndianType, writeLength, readLength;
10 
11 import xbuffer.memory : xalloc, xfree;
12 
13 import soupply.util;
14 import soupply.bedrock261.metadata;
15 
16 struct PackWithSize
17 {
18 
19     enum string[] __fields = ["id", "version_", "size", "unknown3", "unknown4"];
20 
21     string id;
22     string version_;
23     ulong size;
24     string unknown3;
25     string unknown4;
26 
27     mixin Make!(Endian.littleEndian, varuint);
28 
29     string toString()
30     {
31         return "PackWithSize(id: " ~ std.conv.to!string(this.id) ~ ", version_: " ~ std.conv.to!string(this.version_) ~ ", size: " ~ std.conv.to!string(this.size) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ")";
32     }
33 
34 }
35 
36 struct Pack
37 {
38 
39     enum string[] __fields = ["id", "version_", "unknown2"];
40 
41     string id;
42     string version_;
43     string unknown2;
44 
45     mixin Make!(Endian.littleEndian, varuint);
46 
47     string toString()
48     {
49         return "Pack(id: " ~ std.conv.to!string(this.id) ~ ", version_: " ~ std.conv.to!string(this.version_) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
50     }
51 
52 }
53 
54 struct Slot
55 {
56 
57     enum string[] __fields = ["id", "metaAndCount", "nbt", "canPlaceOn", "canDestroy"];
58 
59     @Var int id;
60     @Condition("id>0") @Var int metaAndCount;
61     @Condition("id>0") @Length!ushort ubyte[] nbt;
62     string[] canPlaceOn;
63     string[] canDestroy;
64 
65     mixin Make!(Endian.littleEndian, varuint);
66 
67     string toString()
68     {
69         return "Slot(id: " ~ std.conv.to!string(this.id) ~ ", metaAndCount: " ~ std.conv.to!string(this.metaAndCount) ~ ", nbt: " ~ std.conv.to!string(this.nbt) ~ ", canPlaceOn: " ~ std.conv.to!string(this.canPlaceOn) ~ ", canDestroy: " ~ std.conv.to!string(this.canDestroy) ~ ")";
70     }
71 
72 }
73 
74 struct Attribute
75 {
76 
77     enum string[] __fields = ["min", "max", "value", "default_", "name"];
78 
79     float min;
80     float max;
81     float value;
82     float default_;
83     string name;
84 
85     mixin Make!(Endian.littleEndian, varuint);
86 
87     string toString()
88     {
89         return "Attribute(min: " ~ std.conv.to!string(this.min) ~ ", max: " ~ std.conv.to!string(this.max) ~ ", value: " ~ std.conv.to!string(this.value) ~ ", default_: " ~ std.conv.to!string(this.default_) ~ ", name: " ~ std.conv.to!string(this.name) ~ ")";
90     }
91 
92 }
93 
94 struct BlockPosition
95 {
96 
97     enum string[] __fields = ["x", "y", "z"];
98 
99     @Var int x;
100     @Var uint y;
101     @Var int z;
102 
103     mixin Make!(Endian.littleEndian, varuint);
104 
105     string toString()
106     {
107         return "BlockPosition(x: " ~ std.conv.to!string(this.x) ~ ", y: " ~ std.conv.to!string(this.y) ~ ", z: " ~ std.conv.to!string(this.z) ~ ")";
108     }
109 
110 }
111 
112 struct McpeUuid
113 {
114 
115     enum string[] __fields = ["mostSignificantBits", "leastSignificantBits"];
116 
117     long mostSignificantBits;
118     long leastSignificantBits;
119 
120     mixin Make!(Endian.littleEndian, varuint);
121 
122     string toString()
123     {
124         return "McpeUuid(mostSignificantBits: " ~ std.conv.to!string(this.mostSignificantBits) ~ ", leastSignificantBits: " ~ std.conv.to!string(this.leastSignificantBits) ~ ")";
125     }
126 
127 }
128 
129 struct Link
130 {
131 
132     // action
133     enum ubyte ADD = 0;
134     enum ubyte RIDE = 1;
135     enum ubyte REMOVE = 2;
136 
137     enum string[] __fields = ["from", "to", "action", "unknown3"];
138 
139     @Var long from;
140     @Var long to;
141     ubyte action;
142     ubyte unknown3;
143 
144     mixin Make!(Endian.littleEndian, varuint);
145 
146     string toString()
147     {
148         return "Link(from: " ~ std.conv.to!string(this.from) ~ ", to: " ~ std.conv.to!string(this.to) ~ ", action: " ~ std.conv.to!string(this.action) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ")";
149     }
150 
151 }
152 
153 struct Rule
154 {
155 
156     // name
157     enum string COMMAND_BLOCK_OUTPUT = "commandblockoutput";
158     enum string DO_DAYLIGHT_CYCLE = "dodaylightcycle";
159     enum string DO_ENTITY_DROPS = "doentitydrops";
160     enum string DO_FIRE_TICK = "dofiretick";
161     enum string DO_MOB_LOOT = "domobloot";
162     enum string DO_MOB_SPAWNING = "domobspawning";
163     enum string DO_TILE_DROPS = "dotiledrops";
164     enum string DO_WEATHER_CYCLE = "doweathercycle";
165     enum string DROWNING_DAMAGE = "drowningdamage";
166     enum string FALL_DAMAGE = "falldamage";
167     enum string FIRE_DAMAGE = "firedamage";
168     enum string KEEP_INVENTORY = "keepinventory";
169     enum string MOB_GRIEFING = "mobgriefing";
170     enum string PVP = "pvp";
171     enum string SEND_COMMAND_FEEDBACK = "sendcommandfeedback";
172 
173     // type
174     enum ubyte BOOLEAN = 1;
175     enum ubyte INTEGER = 2;
176     enum ubyte FLOATING = 3;
177 
178     enum string[] __fields = ["name", "type", "booleanValue", "integerValue", "floatingValue"];
179 
180     string name;
181     ubyte type;
182     @Condition("type==1") bool booleanValue;
183     @Condition("type==2") @Var uint integerValue;
184     @Condition("type==3") float floatingValue;
185 
186     mixin Make!(Endian.littleEndian, varuint);
187 
188     string toString()
189     {
190         return "Rule(name: " ~ std.conv.to!string(this.name) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", booleanValue: " ~ std.conv.to!string(this.booleanValue) ~ ", integerValue: " ~ std.conv.to!string(this.integerValue) ~ ", floatingValue: " ~ std.conv.to!string(this.floatingValue) ~ ")";
191     }
192 
193 }
194 
195 struct LoginBody
196 {
197 
198     private struct Container
199     {
200 
201         enum string[] __fields = ["chain", "clientData"];
202 
203         @Length!uint ubyte[] chain;
204         @Length!uint ubyte[] clientData;
205 
206         mixin Make!(Endian.littleEndian, varuint);
207 
208     }
209 
210     enum string[] __fields = Container.__fields;
211 
212     Container _container;
213 
214     alias _container this;
215 
216     void encodeBody(Buffer buffer)
217     {
218         Buffer _buffer = xalloc!Buffer(Container.sizeof + 4);
219         _container.encodeBody(_buffer);
220         writeLength!(EndianType.var, uint)(buffer, _buffer.data!ubyte.length);
221         buffer.writeData(_buffer.data!ubyte);
222         xfree(_buffer);
223     }
224 
225     void decodeBody(Buffer buffer)
226     {
227         Buffer _buffer = xalloc!Buffer(cast(ubyte[])buffer.readData(readLength!(EndianType.var, uint)(buffer)));
228         _container.decodeBody(_buffer);
229         xfree(_buffer);
230     }
231 
232     string toString()
233     {
234         return "LoginBody(chain: " ~ std.conv.to!string(this.chain) ~ ", clientData: " ~ std.conv.to!string(this.clientData) ~ ")";
235     }
236 
237 }
238 
239 struct InventoryAction
240 {
241 
242     // source
243     enum uint CONTAINER = 0;
244     enum uint WORLD = 2;
245     enum uint CREATIVE = 3;
246 
247     enum string[] __fields = ["source", "container", "unknown2", "slot", "oldItem", "newItem"];
248 
249     @Var uint source;
250     @Condition("source==0") @Var int container = -1;
251     @Condition("source==2") @Var uint unknown2;
252     @Var uint slot;
253     soupply.bedrock261.types.Slot oldItem;
254     soupply.bedrock261.types.Slot newItem;
255 
256     mixin Make!(Endian.littleEndian, varuint);
257 
258     string toString()
259     {
260         return "InventoryAction(source: " ~ std.conv.to!string(this.source) ~ ", container: " ~ std.conv.to!string(this.container) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ", slot: " ~ std.conv.to!string(this.slot) ~ ", oldItem: " ~ std.conv.to!string(this.oldItem) ~ ", newItem: " ~ std.conv.to!string(this.newItem) ~ ")";
261     }
262 
263 }
264 
265 struct Recipe
266 {
267 
268     // type
269     enum int SHAPELESS = 0;
270     enum int SHAPED = 1;
271     enum int FURNACE = 2;
272     enum int FURNACE_DATA = 3;
273     enum int MULTI = 4;
274 
275     enum string[] __fields = ["type", "data"];
276 
277     @Var int type;
278     @Bytes ubyte[] data;
279 
280     mixin Make!(Endian.littleEndian, varuint);
281 
282     string toString()
283     {
284         return "Recipe(type: " ~ std.conv.to!string(this.type) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
285     }
286 
287 }
288 
289 struct Section
290 {
291 
292     enum string[] __fields = ["storageVersion", "blockIds", "blockMetas"];
293 
294     ubyte storageVersion = 0;
295     ubyte[4096] blockIds;
296     ubyte[2048] blockMetas;
297 
298     mixin Make!(Endian.littleEndian, varuint);
299 
300     string toString()
301     {
302         return "Section(storageVersion: " ~ std.conv.to!string(this.storageVersion) ~ ", blockIds: " ~ std.conv.to!string(this.blockIds) ~ ", blockMetas: " ~ std.conv.to!string(this.blockMetas) ~ ")";
303     }
304 
305 }
306 
307 struct ExtraData
308 {
309 
310     enum string[] __fields = ["key", "value"];
311 
312     @Var uint key;
313     ushort value;
314 
315     mixin Make!(Endian.littleEndian, varuint);
316 
317     string toString()
318     {
319         return "ExtraData(key: " ~ std.conv.to!string(this.key) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
320     }
321 
322 }
323 
324 struct ChunkData
325 {
326 
327     private struct Container
328     {
329 
330         enum string[] __fields = ["sections", "heights", "biomes", "borders", "extraData", "blockEntities"];
331 
332         soupply.bedrock261.types.Section[] sections;
333         ushort[256] heights;
334         ubyte[256] biomes;
335         ubyte[] borders;
336         soupply.bedrock261.types.ExtraData[] extraData;
337         @Bytes ubyte[] blockEntities;
338 
339         mixin Make!(Endian.littleEndian, varuint);
340 
341     }
342 
343     enum string[] __fields = Container.__fields;
344 
345     Container _container;
346 
347     alias _container this;
348 
349     void encodeBody(Buffer buffer)
350     {
351         Buffer _buffer = xalloc!Buffer(Container.sizeof + 4);
352         _container.encodeBody(_buffer);
353         writeLength!(EndianType.var, uint)(buffer, _buffer.data!ubyte.length);
354         buffer.writeData(_buffer.data!ubyte);
355         xfree(_buffer);
356     }
357 
358     void decodeBody(Buffer buffer)
359     {
360         Buffer _buffer = xalloc!Buffer(cast(ubyte[])buffer.readData(readLength!(EndianType.var, uint)(buffer)));
361         _container.decodeBody(_buffer);
362         xfree(_buffer);
363     }
364 
365     string toString()
366     {
367         return "ChunkData(sections: " ~ std.conv.to!string(this.sections) ~ ", heights: " ~ std.conv.to!string(this.heights) ~ ", biomes: " ~ std.conv.to!string(this.biomes) ~ ", borders: " ~ std.conv.to!string(this.borders) ~ ", extraData: " ~ std.conv.to!string(this.extraData) ~ ", blockEntities: " ~ std.conv.to!string(this.blockEntities) ~ ")";
368     }
369 
370 }
371 
372 struct Skin
373 {
374 
375     enum string[] __fields = ["name", "data", "capeData", "geometryName", "geometryData"];
376 
377     string name;
378     ubyte[] data;
379     ubyte[] capeData;
380     string geometryName;
381     ubyte[] geometryData;
382 
383     mixin Make!(Endian.littleEndian, varuint);
384 
385     string toString()
386     {
387         return "Skin(name: " ~ std.conv.to!string(this.name) ~ ", data: " ~ std.conv.to!string(this.data) ~ ", capeData: " ~ std.conv.to!string(this.capeData) ~ ", geometryName: " ~ std.conv.to!string(this.geometryName) ~ ", geometryData: " ~ std.conv.to!string(this.geometryData) ~ ")";
388     }
389 
390 }
391 
392 struct PlayerList
393 {
394 
395     enum string[] __fields = ["uuid", "entityId", "displayName", "skin", "unknown4"];
396 
397     soupply.bedrock261.types.McpeUuid uuid;
398     @Var long entityId;
399     string displayName;
400     soupply.bedrock261.types.Skin skin;
401     string unknown4;
402 
403     mixin Make!(Endian.littleEndian, varuint);
404 
405     string toString()
406     {
407         return "PlayerList(uuid: " ~ std.conv.to!string(this.uuid) ~ ", entityId: " ~ std.conv.to!string(this.entityId) ~ ", displayName: " ~ std.conv.to!string(this.displayName) ~ ", skin: " ~ std.conv.to!string(this.skin) ~ ", unknown4: " ~ std.conv.to!string(this.unknown4) ~ ")";
408     }
409 
410 }
411 
412 struct Decoration
413 {
414 
415     enum string[] __fields = ["rotationAndIcon", "position", "label", "color"];
416 
417     @Var int rotationAndIcon;
418     Vector!(ubyte, "xz") position;
419     string label;
420     uint color;
421 
422     mixin Make!(Endian.littleEndian, varuint);
423 
424     string toString()
425     {
426         return "Decoration(rotationAndIcon: " ~ std.conv.to!string(this.rotationAndIcon) ~ ", position: " ~ std.conv.to!string(this.position) ~ ", label: " ~ std.conv.to!string(this.label) ~ ", color: " ~ std.conv.to!string(this.color) ~ ")";
427     }
428 
429 }
430 
431 struct Enum
432 {
433 
434     enum string[] __fields = ["name", "valuesIndexes"];
435 
436     string name;
437     ushort[] valuesIndexes;
438 
439     mixin Make!(Endian.littleEndian, varuint);
440 
441     string toString()
442     {
443         return "Enum(name: " ~ std.conv.to!string(this.name) ~ ", valuesIndexes: " ~ std.conv.to!string(this.valuesIndexes) ~ ")";
444     }
445 
446 }
447 
448 struct Parameter
449 {
450 
451     // type
452     enum uint VALID = 1048576;
453     enum uint INT = 1;
454     enum uint FLOAT = 2;
455     enum uint VALUE = 3;
456     enum uint WILDCARD_INT = 4;
457     enum uint TARGET = 5;
458     enum uint WILDCARD_TARGET = 6;
459     enum uint STRING = 15;
460     enum uint POSITION = 16;
461     enum uint MESSAGE = 19;
462     enum uint RAWTEXT = 21;
463     enum uint JSON = 24;
464     enum uint COMMAND = 30;
465     enum uint ENUM = 2097152;
466     enum uint TEMPLATE = 16777216;
467 
468     enum string[] __fields = ["name", "type", "optional"];
469 
470     string name;
471     uint type;
472     bool optional;
473 
474     mixin Make!(Endian.littleEndian, varuint);
475 
476     string toString()
477     {
478         return "Parameter(name: " ~ std.conv.to!string(this.name) ~ ", type: " ~ std.conv.to!string(this.type) ~ ", optional: " ~ std.conv.to!string(this.optional) ~ ")";
479     }
480 
481 }
482 
483 struct Overload
484 {
485 
486     enum string[] __fields = ["parameters"];
487 
488     soupply.bedrock261.types.Parameter[] parameters;
489 
490     mixin Make!(Endian.littleEndian, varuint);
491 
492     string toString()
493     {
494         return "Overload(parameters: " ~ std.conv.to!string(this.parameters) ~ ")";
495     }
496 
497 }
498 
499 struct Command
500 {
501 
502     enum string[] __fields = ["name", "description", "unknown2", "permissionLevel", "aliasesEnum", "overloads"];
503 
504     string name;
505     string description;
506     ubyte unknown2;
507     ubyte permissionLevel;
508     int aliasesEnum = -1;
509     soupply.bedrock261.types.Overload[] overloads;
510 
511     mixin Make!(Endian.littleEndian, varuint);
512 
513     string toString()
514     {
515         return "Command(name: " ~ std.conv.to!string(this.name) ~ ", description: " ~ std.conv.to!string(this.description) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ", permissionLevel: " ~ std.conv.to!string(this.permissionLevel) ~ ", aliasesEnum: " ~ std.conv.to!string(this.aliasesEnum) ~ ", overloads: " ~ std.conv.to!string(this.overloads) ~ ")";
516     }
517 
518 }
519 
520 struct CommandOriginData
521 {
522 
523     // type
524     enum uint PLAYER = 0;
525     enum uint BLOCK = 1;
526     enum uint MINECART_BLOCK = 2;
527     enum uint DEV_CONSOLE = 3;
528     enum uint TEST = 4;
529     enum uint AUTOMATION_PLAYER = 5;
530     enum uint CLIENT_AUTOMATION = 6;
531     enum uint DEDICATED_SERVER = 7;
532     enum uint ENTITY = 8;
533     enum uint VIRTUAL = 9;
534     enum uint GAME_ARGUMENT = 10;
535     enum uint ENTITY_SERVER = 11;
536 
537     enum string[] __fields = ["type", "uuid", "requestId", "unknown3"];
538 
539     @Var uint type;
540     UUID uuid;
541     string requestId;
542     @Condition("type==3||type==4") @Var long unknown3;
543 
544     mixin Make!(Endian.littleEndian, varuint);
545 
546     string toString()
547     {
548         return "CommandOriginData(type: " ~ std.conv.to!string(this.type) ~ ", uuid: " ~ std.conv.to!string(this.uuid) ~ ", requestId: " ~ std.conv.to!string(this.requestId) ~ ", unknown3: " ~ std.conv.to!string(this.unknown3) ~ ")";
549     }
550 
551 }
552 
553 struct CommandMessage
554 {
555 
556     enum string[] __fields = ["isInternal", "messageId", "parameters"];
557 
558     bool isInternal;
559     string messageId;
560     string[] parameters;
561 
562     mixin Make!(Endian.littleEndian, varuint);
563 
564     string toString()
565     {
566         return "CommandMessage(isInternal: " ~ std.conv.to!string(this.isInternal) ~ ", messageId: " ~ std.conv.to!string(this.messageId) ~ ", parameters: " ~ std.conv.to!string(this.parameters) ~ ")";
567     }
568 
569 }
570 
571 struct Score
572 {
573 
574     enum string[] __fields = ["uuid", "objectiveName", "score"];
575 
576     UUID uuid;
577     string objectiveName;
578     int score;
579 
580     mixin Make!(Endian.littleEndian, varuint);
581 
582     string toString()
583     {
584         return "Score(uuid: " ~ std.conv.to!string(this.uuid) ~ ", objectiveName: " ~ std.conv.to!string(this.objectiveName) ~ ", score: " ~ std.conv.to!string(this.score) ~ ")";
585     }
586 
587 }