1 /*
2 * This file was automatically generated by sel-utils and
3 * released under the MIT License.
4 *
5 * License: https://github.com/sel-project/sel-utils/blob/master/LICENSE
6 * Repository: https://github.com/sel-project/sel-utils
7 * Generated from https://github.com/sel-project/sel-utils/blob/master/xml/protocol/pocket100.xml
8 */
9 module sul.protocol.pocket100.types;
10
11 import std.bitmanip : write, peek;
12 static import std.conv;
13 import std.system : Endian;
14 import std.typecons : Tuple;
15 import std.uuid : UUID;
16
17 import sul.utils.buffer;
18 import sul.utils.var;
19
20 static if(__traits(compiles, { import sul.metadata.pocket100; })) import sul.metadata.pocket100;
21
22 struct PackWithSize {
23
24 public enum string[] FIELDS = ["id", "vers", "size"];
25
26 public string id;
27 public string vers;
28 public ulong size;
29
30 public pure nothrow @safe void encode(Buffer buffer) {
31 with(buffer) {
32 writeBytes(varuint.encode(cast(uint)id.length)); writeString(id);
33 writeBytes(varuint.encode(cast(uint)vers.length)); writeString(vers);
34 writeLittleEndianUlong(size);
35 }
36 }
37
38 public pure nothrow @safe void decode(Buffer buffer) {
39 with(buffer) {
40 uint aq=varuint.decode(_buffer, &_index); id=readString(aq);
41 uint dvc=varuint.decode(_buffer, &_index); vers=readString(dvc);
42 size=readLittleEndianUlong();
43 }
44 }
45
46 public string toString() {
47 return "PackWithSize(id: " ~ std.conv.to!string(this.id) ~ ", vers: " ~ std.conv.to!string(this.vers) ~ ", size: " ~ std.conv.to!string(this.size) ~ ")";
48 }
49
50 }
51
52 struct Pack {
53
54 public enum string[] FIELDS = ["id", "vers"];
55
56 public string id;
57 public string vers;
58
59 public pure nothrow @safe void encode(Buffer buffer) {
60 with(buffer) {
61 writeBytes(varuint.encode(cast(uint)id.length)); writeString(id);
62 writeBytes(varuint.encode(cast(uint)vers.length)); writeString(vers);
63 }
64 }
65
66 public pure nothrow @safe void decode(Buffer buffer) {
67 with(buffer) {
68 uint aq=varuint.decode(_buffer, &_index); id=readString(aq);
69 uint dvc=varuint.decode(_buffer, &_index); vers=readString(dvc);
70 }
71 }
72
73 public string toString() {
74 return "Pack(id: " ~ std.conv.to!string(this.id) ~ ", vers: " ~ std.conv.to!string(this.vers) ~ ")";
75 }
76
77 }
78
79 struct Slot {
80
81 public enum string[] FIELDS = ["id", "metaAndCount", "nbt"];
82
83 public int id;
84 public int metaAndCount;
85 public ubyte[] nbt;
86
87 public pure nothrow @safe void encode(Buffer buffer) {
88 with(buffer) {
89 writeBytes(varint.encode(id));
90 if(id>0){ writeBytes(varint.encode(metaAndCount)); }
91 if(id>0){ writeLittleEndianUshort(cast(ushort)nbt.length); writeBytes(nbt); }
92 }
93 }
94
95 public pure nothrow @safe void decode(Buffer buffer) {
96 with(buffer) {
97 id=varint.decode(_buffer, &_index);
98 if(id>0){ metaAndCount=varint.decode(_buffer, &_index); }
99 if(id>0){ nbt.length=readLittleEndianUshort(); if(_buffer.length>=_index+nbt.length){ nbt=_buffer[_index.._index+nbt.length].dup; _index+=nbt.length; } }
100 }
101 }
102
103 public string toString() {
104 return "Slot(id: " ~ std.conv.to!string(this.id) ~ ", metaAndCount: " ~ std.conv.to!string(this.metaAndCount) ~ ", nbt: " ~ std.conv.to!string(this.nbt) ~ ")";
105 }
106
107 }
108
109 struct Attribute {
110
111 public enum string[] FIELDS = ["min", "max", "value", "def", "name"];
112
113 public float min;
114 public float max;
115 public float value;
116 public float def;
117 public string name;
118
119 public pure nothrow @safe void encode(Buffer buffer) {
120 with(buffer) {
121 writeLittleEndianFloat(min);
122 writeLittleEndianFloat(max);
123 writeLittleEndianFloat(value);
124 writeLittleEndianFloat(def);
125 writeBytes(varuint.encode(cast(uint)name.length)); writeString(name);
126 }
127 }
128
129 public pure nothrow @safe void decode(Buffer buffer) {
130 with(buffer) {
131 min=readLittleEndianFloat();
132 max=readLittleEndianFloat();
133 value=readLittleEndianFloat();
134 def=readLittleEndianFloat();
135 uint bfz=varuint.decode(_buffer, &_index); name=readString(bfz);
136 }
137 }
138
139 public string toString() {
140 return "Attribute(min: " ~ std.conv.to!string(this.min) ~ ", max: " ~ std.conv.to!string(this.max) ~ ", value: " ~ std.conv.to!string(this.value) ~ ", def: " ~ std.conv.to!string(this.def) ~ ", name: " ~ std.conv.to!string(this.name) ~ ")";
141 }
142
143 }
144
145 struct BlockPosition {
146
147 public enum string[] FIELDS = ["x", "y", "z"];
148
149 public int x;
150 public uint y;
151 public int z;
152
153 public pure nothrow @safe void encode(Buffer buffer) {
154 with(buffer) {
155 writeBytes(varint.encode(x));
156 writeBytes(varuint.encode(y));
157 writeBytes(varint.encode(z));
158 }
159 }
160
161 public pure nothrow @safe void decode(Buffer buffer) {
162 with(buffer) {
163 x=varint.decode(_buffer, &_index);
164 y=varuint.decode(_buffer, &_index);
165 z=varint.decode(_buffer, &_index);
166 }
167 }
168
169 public string toString() {
170 return "BlockPosition(x: " ~ std.conv.to!string(this.x) ~ ", y: " ~ std.conv.to!string(this.y) ~ ", z: " ~ std.conv.to!string(this.z) ~ ")";
171 }
172
173 }
174
175 struct Skin {
176
177 public enum string[] FIELDS = ["name", "data"];
178
179 public string name;
180 public ubyte[] data;
181
182 public pure nothrow @safe void encode(Buffer buffer) {
183 with(buffer) {
184 writeBytes(varuint.encode(cast(uint)name.length)); writeString(name);
185 writeBytes(varuint.encode(cast(uint)data.length)); writeBytes(data);
186 }
187 }
188
189 public pure nothrow @safe void decode(Buffer buffer) {
190 with(buffer) {
191 uint bfz=varuint.decode(_buffer, &_index); name=readString(bfz);
192 data.length=varuint.decode(_buffer, &_index); if(_buffer.length>=_index+data.length){ data=_buffer[_index.._index+data.length].dup; _index+=data.length; }
193 }
194 }
195
196 public string toString() {
197 return "Skin(name: " ~ std.conv.to!string(this.name) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
198 }
199
200 }
201
202 struct PlayerList {
203
204 public enum string[] FIELDS = ["uuid", "entityId", "displayName", "skin"];
205
206 public UUID uuid;
207 public long entityId;
208 public string displayName;
209 public sul.protocol.pocket100.types.Skin skin;
210
211 public pure nothrow @safe void encode(Buffer buffer) {
212 with(buffer) {
213 writeBytes(uuid.data);
214 writeBytes(varlong.encode(entityId));
215 writeBytes(varuint.encode(cast(uint)displayName.length)); writeString(displayName);
216 skin.encode(bufferInstance);
217 }
218 }
219
220 public pure nothrow @safe void decode(Buffer buffer) {
221 with(buffer) {
222 if(_buffer.length>=_index+16){ ubyte[16] dvz=_buffer[_index.._index+16].dup; _index+=16; uuid=UUID(dvz); }
223 entityId=varlong.decode(_buffer, &_index);
224 uint zlcxe5bu=varuint.decode(_buffer, &_index); displayName=readString(zlcxe5bu);
225 skin.decode(bufferInstance);
226 }
227 }
228
229 public string toString() {
230 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) ~ ")";
231 }
232
233 }
234
235 struct Link {
236
237 // action
238 public enum ubyte ADD = 0;
239 public enum ubyte RIDE = 1;
240 public enum ubyte REMOVE = 2;
241
242 public enum string[] FIELDS = ["from", "to", "action"];
243
244 public long from;
245 public long to;
246 public ubyte action;
247
248 public pure nothrow @safe void encode(Buffer buffer) {
249 with(buffer) {
250 writeBytes(varlong.encode(from));
251 writeBytes(varlong.encode(to));
252 writeBigEndianUbyte(action);
253 }
254 }
255
256 public pure nothrow @safe void decode(Buffer buffer) {
257 with(buffer) {
258 from=varlong.decode(_buffer, &_index);
259 to=varlong.decode(_buffer, &_index);
260 action=readBigEndianUbyte();
261 }
262 }
263
264 public string toString() {
265 return "Link(from: " ~ std.conv.to!string(this.from) ~ ", to: " ~ std.conv.to!string(this.to) ~ ", action: " ~ std.conv.to!string(this.action) ~ ")";
266 }
267
268 }
269
270 struct Recipe {
271
272 // type
273 public enum int SHAPELESS = 0;
274 public enum int SHAPED = 1;
275 public enum int FURNACE = 2;
276 public enum int FURNACE_DATA = 3;
277 public enum int MULTI = 4;
278
279 public enum string[] FIELDS = ["type", "data"];
280
281 public int type;
282 public ubyte[] data;
283
284 public pure nothrow @safe void encode(Buffer buffer) {
285 with(buffer) {
286 writeBytes(varint.encode(type));
287 writeBytes(data);
288 }
289 }
290
291 public pure nothrow @safe void decode(Buffer buffer) {
292 with(buffer) {
293 type=varint.decode(_buffer, &_index);
294 data=_buffer[_index..$].dup; _index=_buffer.length;
295 }
296 }
297
298 public string toString() {
299 return "Recipe(type: " ~ std.conv.to!string(this.type) ~ ", data: " ~ std.conv.to!string(this.data) ~ ")";
300 }
301
302 }
303
304 struct ChunkData {
305
306 public enum string[] FIELDS = ["sections", "heights", "biomes", "borders", "extraData", "blockEntities"];
307
308 public sul.protocol.pocket100.types.Section[] sections;
309 public ushort[256] heights;
310 public ubyte[256] biomes;
311 public ubyte[] borders;
312 public sul.protocol.pocket100.types.ExtraData[] extraData;
313 public ubyte[] blockEntities;
314
315 public pure nothrow @safe void encode(Buffer o_buffer) {
316 Buffer buffer = new Buffer();
317 with(buffer) {
318 writeBytes(varuint.encode(cast(uint)sections.length)); foreach(cvdlbm;sections){ cvdlbm.encode(bufferInstance); }
319 foreach(avzhc;heights){ writeBigEndianUshort(avzhc); }
320 writeBytes(biomes);
321 writeBytes(varuint.encode(cast(uint)borders.length)); writeBytes(borders);
322 writeBytes(varuint.encode(cast(uint)extraData.length)); foreach(zhcfyr;extraData){ zhcfyr.encode(bufferInstance); }
323 writeBytes(blockEntities);
324 }
325 with(o_buffer){ writeBytes(varuint.encode(cast(uint)buffer._buffer.length)); }
326 o_buffer.writeBytes(buffer._buffer);
327 }
328
329 public pure nothrow @safe void decode(Buffer o_buffer) {
330 Buffer buffer = new Buffer();
331 with(o_buffer) {
332 immutable _length=varuint.decode(_buffer, &_index);
333 buffer._buffer = readBytes(_length);
334 }
335 with(buffer) {
336 sections.length=varuint.decode(_buffer, &_index); foreach(ref cvdlbm;sections){ cvdlbm.decode(bufferInstance); }
337 foreach(ref avzhc;heights){ avzhc=readBigEndianUshort(); }
338 if(_buffer.length>=_index+biomes.length){ biomes=_buffer[_index.._index+biomes.length].dup; _index+=biomes.length; }
339 borders.length=varuint.decode(_buffer, &_index); if(_buffer.length>=_index+borders.length){ borders=_buffer[_index.._index+borders.length].dup; _index+=borders.length; }
340 extraData.length=varuint.decode(_buffer, &_index); foreach(ref zhcfyr;extraData){ zhcfyr.decode(bufferInstance); }
341 blockEntities=_buffer[_index..$].dup; _index=_buffer.length;
342 }
343 }
344
345 public string toString() {
346 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) ~ ")";
347 }
348
349 }
350
351 struct Section {
352
353 public enum string[] FIELDS = ["storageVersion", "blockIds", "blockMetas", "skyLight", "blockLight"];
354
355 public ubyte storageVersion = 0;
356 public ubyte[4096] blockIds;
357 public ubyte[2048] blockMetas;
358 public ubyte[2048] skyLight;
359 public ubyte[2048] blockLight;
360
361 public pure nothrow @safe void encode(Buffer buffer) {
362 with(buffer) {
363 writeBigEndianUbyte(storageVersion);
364 writeBytes(blockIds);
365 writeBytes(blockMetas);
366 writeBytes(skyLight);
367 writeBytes(blockLight);
368 }
369 }
370
371 public pure nothrow @safe void decode(Buffer buffer) {
372 with(buffer) {
373 storageVersion=readBigEndianUbyte();
374 if(_buffer.length>=_index+blockIds.length){ blockIds=_buffer[_index.._index+blockIds.length].dup; _index+=blockIds.length; }
375 if(_buffer.length>=_index+blockMetas.length){ blockMetas=_buffer[_index.._index+blockMetas.length].dup; _index+=blockMetas.length; }
376 if(_buffer.length>=_index+skyLight.length){ skyLight=_buffer[_index.._index+skyLight.length].dup; _index+=skyLight.length; }
377 if(_buffer.length>=_index+blockLight.length){ blockLight=_buffer[_index.._index+blockLight.length].dup; _index+=blockLight.length; }
378 }
379 }
380
381 public string toString() {
382 return "Section(storageVersion: " ~ std.conv.to!string(this.storageVersion) ~ ", blockIds: " ~ std.conv.to!string(this.blockIds) ~ ", blockMetas: " ~ std.conv.to!string(this.blockMetas) ~ ", skyLight: " ~ std.conv.to!string(this.skyLight) ~ ", blockLight: " ~ std.conv.to!string(this.blockLight) ~ ")";
383 }
384
385 }
386
387 struct ExtraData {
388
389 public enum string[] FIELDS = ["key", "value"];
390
391 public uint key;
392 public ushort value;
393
394 public pure nothrow @safe void encode(Buffer buffer) {
395 with(buffer) {
396 writeBytes(varuint.encode(key));
397 writeLittleEndianUshort(value);
398 }
399 }
400
401 public pure nothrow @safe void decode(Buffer buffer) {
402 with(buffer) {
403 key=varuint.decode(_buffer, &_index);
404 value=readLittleEndianUshort();
405 }
406 }
407
408 public string toString() {
409 return "ExtraData(key: " ~ std.conv.to!string(this.key) ~ ", value: " ~ std.conv.to!string(this.value) ~ ")";
410 }
411
412 }
413
414 struct Decoration {
415
416 public enum string[] FIELDS = ["rotationAndIcon", "position", "label", "color"];
417
418 public int rotationAndIcon;
419 public Tuple!(ubyte, "x", ubyte, "z") position;
420 public string label;
421 public uint color;
422
423 public pure nothrow @safe void encode(Buffer buffer) {
424 with(buffer) {
425 writeBytes(varint.encode(rotationAndIcon));
426 writeBigEndianUbyte(position.x); writeBigEndianUbyte(position.z);
427 writeBytes(varuint.encode(cast(uint)label.length)); writeString(label);
428 writeLittleEndianUint(color);
429 }
430 }
431
432 public pure nothrow @safe void decode(Buffer buffer) {
433 with(buffer) {
434 rotationAndIcon=varint.decode(_buffer, &_index);
435 position.x=readBigEndianUbyte(); position.z=readBigEndianUbyte();
436 uint bfzw=varuint.decode(_buffer, &_index); label=readString(bfzw);
437 color=readLittleEndianUint();
438 }
439 }
440
441 public string toString() {
442 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) ~ ")";
443 }
444
445 }
446
447 struct Rule {
448
449 // name
450 public enum string DROWNING_DAMAGE = "drowningdamage";
451 public enum string FALL_DAMAGE = "falldamage";
452 public enum string FIRE_DAMAGE = "firedamage";
453 public enum string IMMUTABLE_WORLD = "immutableworld";
454 public enum string PVP = "pvp";
455
456 public enum string[] FIELDS = ["name", "value", "unknown2"];
457
458 public string name;
459 public bool value;
460 public bool unknown2;
461
462 public pure nothrow @safe void encode(Buffer buffer) {
463 with(buffer) {
464 writeBytes(varuint.encode(cast(uint)name.length)); writeString(name);
465 writeBigEndianBool(value);
466 writeBigEndianBool(unknown2);
467 }
468 }
469
470 public pure nothrow @safe void decode(Buffer buffer) {
471 with(buffer) {
472 uint bfz=varuint.decode(_buffer, &_index); name=readString(bfz);
473 value=readBigEndianBool();
474 unknown2=readBigEndianBool();
475 }
476 }
477
478 public string toString() {
479 return "Rule(name: " ~ std.conv.to!string(this.name) ~ ", value: " ~ std.conv.to!string(this.value) ~ ", unknown2: " ~ std.conv.to!string(this.unknown2) ~ ")";
480 }
481
482 }
483