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 }