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