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 }