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