minecraft-data 3.4.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.github/workflows/npm-publish.yml +1 -1
  2. package/data.js +46 -1
  3. package/doc/history.md +9 -0
  4. package/index.d.ts +21 -1
  5. package/minecraft-data/README.md +2 -2
  6. package/minecraft-data/data/bedrock/1.19.1/proto.yml +3575 -0
  7. package/minecraft-data/data/bedrock/1.19.1/types.yml +1887 -0
  8. package/minecraft-data/data/bedrock/1.19.10/protocol.json +10458 -0
  9. package/minecraft-data/data/bedrock/1.19.10/version.json +6 -0
  10. package/minecraft-data/data/bedrock/common/protocolVersions.json +6 -0
  11. package/minecraft-data/data/bedrock/common/versions.json +2 -1
  12. package/minecraft-data/data/bedrock/latest/proto.yml +127 -21
  13. package/minecraft-data/data/bedrock/latest/types.yml +71 -3
  14. package/minecraft-data/data/dataPaths.json +46 -1
  15. package/minecraft-data/data/pc/1.18/blockLoot.json +3783 -1868
  16. package/minecraft-data/data/pc/1.18/entityLoot.json +23 -2
  17. package/minecraft-data/data/pc/1.18/language.json +436 -93
  18. package/minecraft-data/data/pc/1.19/biomes.json +695 -0
  19. package/minecraft-data/data/pc/1.19/blockCollisionShapes.json +120584 -0
  20. package/minecraft-data/data/pc/1.19/blockLoot.json +12419 -0
  21. package/minecraft-data/data/pc/1.19/blocks.json +34097 -0
  22. package/minecraft-data/data/pc/1.19/effects.json +200 -0
  23. package/minecraft-data/data/pc/1.19/enchantments.json +875 -0
  24. package/minecraft-data/data/pc/1.19/entities.json +1182 -0
  25. package/minecraft-data/data/pc/1.19/entityLoot.json +1218 -0
  26. package/minecraft-data/data/pc/1.19/foods.json +402 -0
  27. package/minecraft-data/data/pc/1.19/instruments.json +66 -0
  28. package/minecraft-data/data/pc/1.19/items.json +7613 -0
  29. package/minecraft-data/data/pc/1.19/language.json +5338 -0
  30. package/minecraft-data/data/pc/1.19/materials.json +154 -0
  31. package/minecraft-data/data/pc/1.19/particles.json +374 -0
  32. package/minecraft-data/data/pc/1.19/tints.json +429 -0
  33. package/minecraft-data/data/pc/1.19/version.json +5 -0
  34. package/minecraft-data/data/pc/common/protocolVersions.json +49 -0
  35. package/minecraft-data/data/pc/common/versions.json +2 -1
  36. package/minecraft-data/doc/history.md +28 -18
  37. package/minecraft-data/schemas/biomes_schema.json +0 -1
  38. package/package.json +3 -3
@@ -0,0 +1,1887 @@
1
+ !StartDocs: Types
2
+
3
+ BehaviourPackInfos: []li16
4
+ uuid: string
5
+ version: string
6
+ size: lu64
7
+ content_key: string
8
+ sub_pack_name: string
9
+ content_identity: string
10
+ has_scripts: bool
11
+
12
+ TexturePackInfos: []li16
13
+ uuid: string
14
+ version: string
15
+ size: lu64
16
+ content_key: string
17
+ sub_pack_name: string
18
+ content_identity: string
19
+ has_scripts: bool
20
+ rtx_enabled: bool
21
+
22
+ ResourcePackIdVersions: []varint
23
+ # The ID of the resource pack.
24
+ uuid: string
25
+ # The version of the resource pack.
26
+ version: string
27
+ # The subpack name of the resource pack.
28
+ name: string
29
+
30
+ ResourcePackIds: string[]li16
31
+
32
+ Experiment:
33
+ name: string
34
+ enabled: bool
35
+
36
+ Experiments: Experiment[]li32
37
+
38
+ GameMode: zigzag32 =>
39
+ 0: survival
40
+ 1: creative
41
+ 2: adventure
42
+ 3: survival_spectator
43
+ 4: creative_spectator
44
+ 5: fallback
45
+ 6: spectator
46
+
47
+ GameRule:
48
+ name: string
49
+ editable: bool
50
+ type: varint =>
51
+ 1: bool
52
+ 2: int
53
+ 3: float
54
+ value: type?
55
+ if bool: bool
56
+ if int: zigzag32
57
+ if float: lf32
58
+
59
+ GameRules: GameRule[]varint
60
+
61
+ # CacheBlob represents a blob as used in the client side blob cache protocol. It holds a hash of its data and
62
+ # the full data of it.
63
+ Blob:
64
+ # Hash is the hash of the blob. The hash is computed using xxHash, and must be deterministic for the same
65
+ # chunk data.
66
+ hash: lu64
67
+ # Payload is the data of the blob. When sent, the client will associate the Hash of the blob with the
68
+ # Payload in it.
69
+ payload: ByteArray
70
+
71
+ BlockProperties: []varint
72
+ name: string
73
+ state: nbt
74
+
75
+ Itemstates: []varint
76
+ name: string
77
+ runtime_id: li16
78
+ component_based: bool
79
+
80
+
81
+
82
+ ItemExtraDataWithBlockingTick:
83
+ has_nbt: lu16 =>
84
+ 0xffff: 'true'
85
+ 0x0000: 'false'
86
+ nbt: has_nbt ?
87
+ if true:
88
+ version: u8
89
+ nbt: lnbt
90
+ default: void
91
+ can_place_on: ShortArray[]li32
92
+ can_destroy: ShortArray[]li32
93
+ blocking_tick: li64
94
+
95
+ ItemExtraDataWithoutBlockingTick:
96
+ has_nbt: lu16 =>
97
+ 0xffff: 'true'
98
+ 0x0000: 'false'
99
+ nbt: has_nbt ?
100
+ if true:
101
+ version: u8
102
+ nbt: lnbt
103
+ default: void
104
+ can_place_on: ShortArray[]li32
105
+ can_destroy: ShortArray[]li32
106
+
107
+ # Same as below but without a "networkStackID" boolean
108
+ ItemLegacy:
109
+ network_id: zigzag32
110
+ _: network_id?
111
+ if 0: void
112
+ default:
113
+ count: lu16
114
+ metadata: varint
115
+ block_runtime_id: zigzag32
116
+ extra: network_id ?
117
+ # The Shield Item ID is sent in the StartGame packet. It is usually 355 in vanilla.
118
+ if /ShieldItemID: '["encapsulated", { "lengthType": "varint", "type": "ItemExtraDataWithBlockingTick" }]'
119
+ default: '["encapsulated", { "lengthType": "varint", "type": "ItemExtraDataWithoutBlockingTick" }]'
120
+
121
+ # An "ItemStack" here represents an Item instance. You can think about it like a pointer
122
+ # to an item class. The data for the class gets updated with the data in the `item` field
123
+ # As of 1.16.220, now functionally the same as `Item` just without an extra boolean when
124
+ # server auth inventories is disabled.
125
+ Item:
126
+ network_id: zigzag32
127
+ _: network_id?
128
+ if 0: void
129
+ default:
130
+ count: lu16
131
+ metadata: varint
132
+ # When server authoritative inventory is enabled, all allocated items have a unique ID used to identify
133
+ # a specifc item instance.
134
+ has_stack_id: u8
135
+ # StackNetworkID is the network ID of this item *instance*. If the stack is empty, 0 is always written for this
136
+ # field. If not, the field should be set to 1 if the server authoritative inventories are disabled in the
137
+ # StartGame packet, or to a unique stack ID if it is enabled.
138
+ stack_id: has_stack_id ?
139
+ if 0: void
140
+ default: zigzag32
141
+ block_runtime_id: zigzag32
142
+ extra: network_id ?
143
+ # The Shield Item ID is sent in the StartGame packet. It is usually 355 in vanilla.
144
+ ## Really bad compiler hack to allow us to use a global variable
145
+ if /ShieldItemID: '["encapsulated", { "lengthType": "varint", "type": "ItemExtraDataWithBlockingTick" }]'
146
+ default: '["encapsulated", { "lengthType": "varint", "type": "ItemExtraDataWithoutBlockingTick" }]'
147
+
148
+ vec3i:
149
+ x: zigzag32
150
+ y: zigzag32
151
+ z: zigzag32
152
+
153
+ vec3u:
154
+ x: varint
155
+ y: varint
156
+ z: varint
157
+
158
+ vec3f:
159
+ x: lf32
160
+ y: lf32
161
+ z: lf32
162
+
163
+ vec2f:
164
+ x: lf32
165
+ z: lf32
166
+
167
+ MetadataDictionary: []varint
168
+ # https://github.com/pmmp/PocketMine-MP/blob/stable/src/pocketmine/entity/Entity.php#L101
169
+ key: varint =>
170
+ 0: flags
171
+ 1: health #int (minecart/boat)
172
+ 2: variant #int
173
+ 3: color #byte
174
+ 4: nametag #string
175
+ 5: owner_eid #long
176
+ 6: target_eid #long
177
+ 7: air #short
178
+ 8: potion_color #int (ARGB!)
179
+ 9: potion_ambient #byte
180
+ 10: jump_duration #long
181
+ 11: hurt_time #int (minecart/boat)
182
+ 12: hurt_direction #int (minecart/boat)
183
+ 13: paddle_time_left #float
184
+ 14: paddle_time_right #float
185
+ 15: experience_value #int (xp orb)
186
+ 16: minecart_display_block #int (id | (data << 16))
187
+ 17: minecart_display_offset #int
188
+ 18: minecart_has_display #byte (must be 1 for minecart to show block inside)
189
+ 20: old_swell
190
+ 21: swell_dir
191
+ 22: charge_amount
192
+ 23: enderman_held_runtime_id #short
193
+ 24: entity_age #short
194
+ 26: player_flags
195
+ 27: player_index
196
+ 28: player_bed_position #block coords
197
+ 29: fireball_power_x #float
198
+ 30: fireball_power_y
199
+ 31: fireball_power_z
200
+ 32: aux_power
201
+ 33: fish_x
202
+ 34: fish_z
203
+ 35: fish_angle
204
+ 36: potion_aux_value #short
205
+ 37: lead_holder_eid #long
206
+ 38: scale
207
+ 39: interactive_tag #string
208
+ 40: npc_skin_id #string
209
+ 41: url_tag #string
210
+ 42: max_airdata_max_air
211
+ 43: mark_variant #int
212
+ 44: container_type #byte
213
+ 45: container_base_size #int
214
+ 46: container_extra_slots_per_strength #int
215
+ 47: block_target
216
+ 48: wither_invulnerable_ticks #int
217
+ 49: wither_target_1 #long
218
+ 50: wither_target_2 #long
219
+ 51: wither_target_3 #long
220
+ 52: aerial_attack
221
+ 53: boundingbox_width
222
+ 54: boundingbox_height
223
+ 55: fuse_length
224
+ 56: rider_seat_position #vector3f
225
+ 57: rider_rotation_locked #byte
226
+ 58: rider_max_rotation #float
227
+ 59: rider_min_rotation #float
228
+ 60: rider_rotation_offset
229
+ 61: area_effect_cloud_radius #float
230
+ 62: area_effect_cloud_waiting #int
231
+ 63: area_effect_cloud_particle_id #int
232
+ 64: shulker_peek_id #int
233
+ 65: shulker_attach_face #byte
234
+ 66: shulker_attached #short
235
+ 67: shulker_attach_pos
236
+ 68: trading_player_eid #long
237
+ 69: trading_career
238
+ 70: has_command_block
239
+ 71: command_block_command #string
240
+ 72: command_block_last_output #string
241
+ 73: command_block_track_output #byte
242
+ 74: controlling_rider_seat_number #byte
243
+ 75: strength #int
244
+ 76: max_strength #int
245
+ 77: spell_casting_color #int
246
+ 78: limited_life
247
+ 79: armor_stand_pose_index # int
248
+ 80: ender_crystal_time_offset # int
249
+ 81: always_show_nametag # byte
250
+ 82: color_2 # byte
251
+ 83: name_author
252
+ 84: score_tag #String
253
+ 85: balloon_attached_entity # long
254
+ 86: pufferfish_size
255
+ 87: bubble_time
256
+ 88: agent
257
+ 89: sitting_amount
258
+ 90: sitting_amount_previous
259
+ 91: eating_counter
260
+ 92: flags_extended
261
+ 93: laying_amount
262
+ 94: laying_amount_previous
263
+ 95: duration
264
+ 96: spawn_time
265
+ 97: change_rate
266
+ 98: change_on_pickup
267
+ 99: pickup_count
268
+ 100: interact_text
269
+ 101: trade_tier
270
+ 102: max_trade_tier
271
+ 103: trade_experience
272
+ 104: skin_id
273
+ 105: spawning_frames
274
+ 106: command_block_tick_delay
275
+ 107: command_block_execute_on_first_tick
276
+ 108: ambient_sound_interval
277
+ 109: ambient_sound_interval_range
278
+ 110: ambient_sound_event_name
279
+ 111: fall_damage_multiplier
280
+ 112: name_raw_text
281
+ 113: can_ride_target
282
+ 114: low_tier_cured_discount
283
+ 115: high_tier_cured_discount
284
+ 116: nearby_cured_discount
285
+ 117: nearby_cured_discount_timestamp
286
+ 118: hitbox
287
+ 119: is_buoyant
288
+ 120: base_runtime_id
289
+ 121: freezing_effect_strength
290
+ 122: buoyancy_data
291
+ 123: goat_horn_count
292
+ 124: update_properties
293
+ 125: movement_sound_distance_offset
294
+ 126: heartbeat_interval_ticks
295
+ 127: heartbeat_sound_event
296
+ type: varint =>
297
+ 0: byte
298
+ 1: short
299
+ 2: int
300
+ 3: float
301
+ 4: string
302
+ 5: compound
303
+ 6: vec3i
304
+ 7: long
305
+ 8: vec3f
306
+ value: key ?
307
+ if flags: MetadataFlags1
308
+ if flags_extended: MetadataFlags2
309
+ default: type ?
310
+ if byte: i8
311
+ if short: li16
312
+ if int: zigzag32
313
+ if float: lf32
314
+ if string: string
315
+ if compound: nbt
316
+ if vec3i: vec3i
317
+ if long: zigzag64
318
+ if vec3f: vec3f
319
+
320
+ MetadataFlags1: [ "bitflags", {
321
+ "type": "zigzag64",
322
+ "big": true,
323
+ "flags": [
324
+ "onfire",
325
+ "sneaking",
326
+ "riding",
327
+ "sprinting",
328
+ "action",
329
+ "invisible",
330
+ "tempted",
331
+ "inlove",
332
+ "saddled",
333
+ "powered",
334
+ "ignited",
335
+ "baby",
336
+ "converting",
337
+ "critical",
338
+ "can_show_nametag",
339
+ "always_show_nametag",
340
+ "no_ai",
341
+ "silent",
342
+ "wallclimbing",
343
+ "can_climb",
344
+ "swimmer",
345
+ "can_fly",
346
+ "walker",
347
+ "resting",
348
+ "sitting",
349
+ "angry",
350
+ "interested",
351
+ "charged",
352
+ "tamed",
353
+ "orphaned",
354
+ "leashed",
355
+ "sheared",
356
+ "gliding",
357
+ "elder",
358
+ "moving",
359
+ "breathing",
360
+ "chested",
361
+ "stackable",
362
+ "showbase",
363
+ "rearing",
364
+ "vibrating",
365
+ "idling",
366
+ "evoker_spell",
367
+ "charge_attack",
368
+ "wasd_controlled",
369
+ "can_power_jump",
370
+ "linger",
371
+ "has_collision",
372
+ "affected_by_gravity",
373
+ "fire_immune",
374
+ "dancing",
375
+ "enchanted",
376
+ "show_trident_rope", # tridents show an animated rope when enchanted with loyalty after they are thrown and return to their owner. to be combined with data_owner_eid
377
+ "container_private", #inventory is private, doesn't drop contents when killed if true
378
+ "transforming",
379
+ "spin_attack",
380
+ "swimming",
381
+ "bribed", #dolphins have this set when they go to find treasure for the player
382
+ "pregnant",
383
+ "laying_egg",
384
+ "rider_can_pick", #???
385
+ "transition_sitting",
386
+ "eating",
387
+ "laying_down"
388
+ ]
389
+ }]
390
+
391
+ MetadataFlags2: [ "bitflags", {
392
+ "type": "zigzag64",
393
+ "big": true,
394
+ "flags": [
395
+ "sneezing",
396
+ "trusting",
397
+ "rolling",
398
+ "scared",
399
+ "in_scaffolding",
400
+ "over_scaffolding",
401
+ "fall_through_scaffolding",
402
+ "blocking", #shield
403
+ "transition_blocking",
404
+ "blocked_using_shield",
405
+ "blocked_using_damaged_shield",
406
+ "sleeping",
407
+ "wants_to_wake",
408
+ "trade_interest",
409
+ "door_breaker", #...
410
+ "breaking_obstruction",
411
+ "door_opener", #...
412
+ "illager_captain",
413
+ "stunned",
414
+ "roaring",
415
+ "delayed_attacking",
416
+ "avoiding_mobs",
417
+ "avoiding_block",
418
+ "facing_target_to_range_attack",
419
+ "hidden_when_invisible", #??????????????????
420
+ "is_in_ui",
421
+ "stalking",
422
+ "emoting",
423
+ "celebrating",
424
+ "admiring",
425
+ "celebrating_special",
426
+ "unknown95", # 95
427
+ "ram_attack",
428
+ "playing_dead",
429
+ "in_ascendable_block",
430
+ "over_descendable_block",
431
+ "croaking",
432
+ "eat_mob",
433
+ "jump_goal_jump",
434
+ "emerging",
435
+ "sniffing",
436
+ "digging"
437
+ ]
438
+ }]
439
+
440
+ Link:
441
+ ridden_entity_id: zigzag64
442
+ rider_entity_id: zigzag64
443
+ type: u8
444
+ immediate: bool
445
+ rider_initiated: bool
446
+
447
+ Links: Link[]varint
448
+
449
+ EntityAttributes: []varint
450
+ name: string
451
+ min: lf32
452
+ value: lf32
453
+ max: lf32
454
+
455
+ Rotation:
456
+ yaw: byterot
457
+ pitch: byterot
458
+ head_yaw: byterot
459
+
460
+ BlockCoordinates: # mojang...
461
+ x: zigzag32
462
+ y: varint
463
+ z: zigzag32
464
+
465
+ PlayerAttributes: []varint
466
+ min: lf32
467
+ max: lf32
468
+ current: lf32
469
+ default: lf32
470
+ name: string
471
+
472
+ # UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on
473
+ # a block. Also used in PlayerAuthoritativeInput packet
474
+ TransactionUseItem:
475
+ # ActionType is the type of the UseItem inventory transaction. It is one of the action types found above,
476
+ # and specifies the way the player interacted with the block.
477
+ action_type: varint =>
478
+ 0: click_block
479
+ 1: click_air
480
+ 2: break_block
481
+ # BlockPosition is the position of the block that was interacted with. This is only really a correct
482
+ # block position if ActionType is not UseItemActionClickAir.
483
+ block_position: vec3i
484
+ # BlockFace is the face of the block that was interacted with. When clicking the block, it is the face
485
+ # clicked. When breaking the block, it is the face that was last being hit until the block broke.
486
+ face: varint
487
+ # HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used
488
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
489
+ hotbar_slot: varint
490
+ # HeldItem is the item that was held to interact with the block. The server should check if this item
491
+ # is actually present in the HotBarSlot.
492
+ held_item: Item
493
+ # Position is the position of the player at the time of interaction. For clicking a block, this is the
494
+ # position at that time, whereas for breaking the block it is the position at the time of breaking.
495
+ player_pos: vec3f
496
+ # ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be
497
+ # used to find out exactly where a player clicked the block.
498
+ click_pos: vec3f
499
+ # BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify
500
+ # that the player's world client-side is synchronised with the server's.
501
+ block_runtime_id: varint
502
+
503
+ # Actions is a list of actions that took place, that form the inventory transaction together. Each of
504
+ # these actions hold one slot in which one item was changed to another. In general, the combination of
505
+ # all of these actions results in a balanced inventory transaction. This should be checked to ensure that
506
+ # no items are cheated into the inventory.
507
+ TransactionActions: []varint
508
+ source_type: varint =>
509
+ 0: container
510
+ 1: global
511
+ 2: world_interaction
512
+ 3: creative
513
+ 100: craft_slot
514
+ 99999: craft
515
+ _: source_type?
516
+ if container or craft:
517
+ inventory_id: WindowIDVarint
518
+ if world_interaction:
519
+ flags: varint
520
+ if craft or craft_slot:
521
+ action: varint
522
+ default: void
523
+ slot: varint
524
+ old_item: Item
525
+ new_item: Item
526
+
527
+ # The Minecraft bedrock inventory system was refactored, but not all inventory actions use the new packet.
528
+ # This data structure holds actions that have not been updated to the new system.
529
+ TransactionLegacy:
530
+ # LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should
531
+ # always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values
532
+ # in it.
533
+ # LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should
534
+ # respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the
535
+ # hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it.
536
+ legacy_request_id: zigzag32
537
+ # `legacy_transactions` are only present if the LegacyRequestID is non-zero. These item slots inform the
538
+ # server of the slots that were changed during the inventory transaction, and the server should send
539
+ # back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.)
540
+ legacy_transactions: legacy_request_id?
541
+ if 0: void
542
+ default: []varint
543
+ container_id: u8
544
+ changed_slots: []varint
545
+ slot_id: u8
546
+
547
+ Transaction:
548
+ # Old transaction system data
549
+ legacy: TransactionLegacy
550
+ # What type of transaction took place
551
+ transaction_type: varint =>
552
+ 0: normal
553
+ 1: inventory_mismatch
554
+ 2: item_use
555
+ 3: item_use_on_entity
556
+ 4: item_release
557
+ # The list of inventory internal actions in this packet, e.g. inventory GUI actions
558
+ actions: TransactionActions
559
+ # Extra data if an intenal inventory transaction did not take place, e.g. use of an item
560
+ transaction_data: transaction_type?
561
+ if normal or inventory_mismatch: void
562
+ # UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on
563
+ # a block.
564
+ if item_use: TransactionUseItem
565
+ # UseItemOnEntityTransactionData represents an inventory transaction data object sent when the client uses
566
+ # an item on an entity.
567
+ if item_use_on_entity:
568
+ # TargetEntityRuntimeID is the entity runtime ID of the target that was clicked. It is the runtime ID
569
+ # that was assigned to it in the AddEntity packet.
570
+ entity_runtime_id: varint64
571
+ # ActionType is the type of the UseItemOnEntity inventory transaction. It is one of the action types
572
+ # found in the constants above, and specifies the way the player interacted with the entity.
573
+ action_type: varint =>
574
+ 0: interact
575
+ 1: attack
576
+ # HotBarSlot is the hot bar slot that the player was holding while clicking the entity. It should be used
577
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
578
+ hotbar_slot: zigzag32
579
+ # HeldItem is the item that was held to interact with the entity. The server should check if this item
580
+ # is actually present in the HotBarSlot.
581
+ held_item: Item
582
+ # Position is the position of the player at the time of clicking the entity.
583
+ player_pos: vec3f
584
+ # ClickedPosition is the position that was clicked relative to the entity's base coordinate. It can be
585
+ # used to find out exactly where a player clicked the entity.
586
+ click_pos: vec3f
587
+ # ReleaseItemTransactionData represents an inventory transaction data object sent when the client releases
588
+ # the item it was using, for example when stopping while eating or stopping the charging of a bow.
589
+ if item_release:
590
+ # ActionType is the type of the ReleaseItem inventory transaction. It is one of the action types found
591
+ # in the constants above, and specifies the way the item was released.
592
+ # As of 1.13, the ActionType is always 0. This field can be ignored, because releasing food (by consuming
593
+ # it) or releasing a bow (to shoot an arrow) is essentially the same.
594
+ action_type: varint =>
595
+ 0: release
596
+ 1: consume
597
+ # HotBarSlot is the hot bar slot that the player was holding while releasing the item. It should be used
598
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
599
+ hotbar_slot: zigzag32
600
+ # HeldItem is the item that was released. The server should check if this item is actually present in the
601
+ # HotBarSlot.
602
+ held_item: Item
603
+ # HeadPosition is the position of the player's head at the time of releasing the item. This is used
604
+ # mainly for purposes such as spawning eating particles at that position.
605
+ head_pos: vec3f
606
+
607
+ ItemStacks: Item[]varint
608
+
609
+ RecipeIngredient:
610
+ network_id: zigzag32
611
+ _: network_id?
612
+ if 0: void
613
+ default:
614
+ network_data: zigzag32
615
+ count: zigzag32
616
+
617
+ PotionTypeRecipes: []varint
618
+ input_item_id: zigzag32
619
+ input_item_meta: zigzag32
620
+ ingredient_id: zigzag32
621
+ ingredient_meta: zigzag32
622
+ output_item_id: zigzag32
623
+ output_item_meta: zigzag32
624
+
625
+ PotionContainerChangeRecipes: []varint
626
+ input_item_id: zigzag32
627
+ ingredient_id: zigzag32
628
+ output_item_id: zigzag32
629
+
630
+ Recipes: []varint
631
+ type: zigzag32 =>
632
+ 0: shapeless #'ENTRY_SHAPELESS',
633
+ 1: shaped #'ENTRY_SHAPED',
634
+ 2: furnace # 'ENTRY_FURNACE',
635
+ # `furnace_with_metadata` is a recipe specifically used for furnace-type crafting stations. It is equal to
636
+ # `furnace`, except it has an input item with a specific metadata value, instead of any metadata value.
637
+ 3: furnace_with_metadata # 'ENTRY_FURNACE_DATA', // has metadata
638
+ 4: multi #'ENTRY_MULTI', //TODO
639
+ 5: shulker_box #'ENTRY_SHULKER_BOX', //TODO
640
+ 6: shapeless_chemistry #'ENTRY_SHAPELESS_CHEMISTRY', //TODO
641
+ 7: shaped_chemistry #'ENTRY_SHAPED_CHEMISTRY', //TODO
642
+ recipe: type?
643
+ if shapeless or shulker_box or shapeless_chemistry:
644
+ recipe_id: string
645
+ input: RecipeIngredient[]varint
646
+ output: ItemLegacy[]varint
647
+ uuid: uuid
648
+ block: string
649
+ priority: zigzag32
650
+ network_id: varint
651
+ if shaped or shaped_chemistry:
652
+ recipe_id: string
653
+ width: zigzag32
654
+ height: zigzag32
655
+ # 2D input array, size of width*height
656
+ input: []$width
657
+ _: RecipeIngredient[]$height
658
+ output: ItemLegacy[]varint
659
+ uuid: uuid
660
+ block: string
661
+ priority: zigzag32
662
+ network_id: varint
663
+ if furnace:
664
+ input_id: zigzag32
665
+ output: ItemLegacy
666
+ block: string
667
+ if furnace_with_metadata:
668
+ input_id: zigzag32
669
+ input_meta: zigzag32
670
+ output: ItemLegacy
671
+ block: string
672
+ if multi:
673
+ uuid: uuid
674
+ network_id: varint
675
+
676
+ SkinImage:
677
+ width: li32
678
+ height: li32
679
+ data: ByteArray
680
+
681
+ Skin:
682
+ skin_id: string
683
+ play_fab_id: string
684
+ skin_resource_pack: string
685
+ skin_data: SkinImage
686
+ animations: []li32
687
+ skin_image: SkinImage
688
+ animation_type: li32
689
+ animation_frames: lf32
690
+ expression_type: lf32
691
+ cape_data: SkinImage
692
+ geometry_data: string
693
+ geometry_data_version: string
694
+ animation_data: string
695
+
696
+ cape_id: string
697
+ full_skin_id: string
698
+ arm_size: string
699
+ skin_color: string
700
+ personal_pieces: []li32
701
+ piece_id: string
702
+ piece_type: string
703
+ pack_id: string
704
+ is_default_piece: bool
705
+ product_id: string
706
+ piece_tint_colors: []li32
707
+ piece_type: string
708
+ colors: string[]li32
709
+ premium: bool
710
+ persona: bool
711
+ # PersonaCapeOnClassicSkin specifies if the skin had a Persona cape (in-game skin creator cape) equipped
712
+ # on a classic skin.
713
+ cape_on_classic: bool
714
+ primary_user: bool
715
+
716
+ PlayerRecords:
717
+ type: u8 =>
718
+ 0: add
719
+ 1: remove
720
+ records_count: varint
721
+ records: []$records_count
722
+ _: type?
723
+ if add:
724
+ uuid: uuid
725
+ entity_unique_id: zigzag64
726
+ username: string
727
+ xbox_user_id: string
728
+ platform_chat_id: string
729
+ build_platform: li32
730
+ skin_data: Skin
731
+ is_teacher: bool
732
+ is_host: bool
733
+ if remove:
734
+ uuid: uuid
735
+ verified: type ?
736
+ if add: bool[]$records_count
737
+
738
+ Enchant:
739
+ id: u8
740
+ level: u8
741
+
742
+ EnchantOption:
743
+ cost: varint
744
+ slot_flags: li32
745
+ equip_enchants: Enchant[]varint
746
+ held_enchants: Enchant[]varint
747
+ self_enchants: Enchant[]varint
748
+ name: string
749
+ option_id: zigzag32
750
+
751
+ Action: zigzag32 =>
752
+ 0: start_break
753
+ 1: abort_break
754
+ 2: stop_break
755
+ 3: get_updated_block
756
+ 4: drop_item
757
+ 5: start_sleeping
758
+ 6: stop_sleeping
759
+ 7: respawn
760
+ 8: jump
761
+ 9: start_sprint
762
+ 10: stop_sprint
763
+ 11: start_sneak
764
+ 12: stop_sneak
765
+ 13: creative_player_destroy_block
766
+ # sent when spawning in a different dimension to tell the server we spawned
767
+ 14: dimension_change_ack
768
+ 15: start_glide
769
+ 16: stop_glide
770
+ 17: build_denied
771
+ 18: crack_break
772
+ 19: change_skin
773
+ # no longer used
774
+ 20: set_enchatnment_seed
775
+ 21: swimming
776
+ 22: stop_swimming
777
+ 23: start_spin_attack
778
+ 24: stop_spin_attack
779
+ 25: interact_block
780
+ 26: predict_break
781
+ 27: continue_break
782
+ 28: start_item_use_on
783
+ 29: stop_item_use_on
784
+
785
+ # Source and Destination point to the source slot from which Count of the item stack were taken and the
786
+ # destination slot to which this item was moved.
787
+ StackRequestSlotInfo:
788
+ # ContainerID is the ID of the container that the slot was in.
789
+ slot_type: ContainerSlotType
790
+ # Slot is the index of the slot within the container with the ContainerID above.
791
+ slot: u8
792
+ # StackNetworkID is the unique stack ID that the client assumes to be present in this slot. The server
793
+ # must check if these IDs match. If they do not match, servers should reject the stack request that the
794
+ # action holding this info was in.
795
+ stack_id: zigzag32
796
+
797
+ # ItemStackRequest is sent by the client to change item stacks in an inventory. It is essentially a
798
+ # replacement of the InventoryTransaction packet added in 1.16 for inventory specific actions, such as moving
799
+ # items around or crafting. The InventoryTransaction packet is still used for actions such as placing blocks
800
+ # and interacting with entities.
801
+ ItemStackRequest:
802
+ # RequestID is a unique ID for the request. This ID is used by the server to send a response for this
803
+ # specific request in the ItemStackResponse packet.
804
+ request_id: varint
805
+ actions: []varint
806
+ type_id: u8 =>
807
+ # TakeStackRequestAction is sent by the client to the server to take x amount of items from one slot in a
808
+ # container to the cursor.
809
+ - take
810
+ # PlaceStackRequestAction is sent by the client to the server to place x amount of items from one slot into
811
+ # another slot, such as when shift clicking an item in the inventory to move it around or when moving an item
812
+ # in the cursor into a slot.
813
+ - place
814
+ # SwapStackRequestAction is sent by the client to swap the item in its cursor with an item present in another
815
+ # container. The two item stacks swap places.
816
+ - swap
817
+ # DropStackRequestAction is sent by the client when it drops an item out of the inventory when it has its
818
+ # inventory opened. This action is not sent when a player drops an item out of the hotbar using the Q button
819
+ # (or the equivalent on mobile). The InventoryTransaction packet is still used for that action, regardless of
820
+ # whether the item stack network IDs are used or not.
821
+ - drop
822
+ # DestroyStackRequestAction is sent by the client when it destroys an item in creative mode by moving it
823
+ # back into the creative inventory.
824
+ - destroy
825
+ # ConsumeStackRequestAction is sent by the client when it uses an item to craft another item. The original
826
+ # item is 'consumed'.
827
+ - consume
828
+ # CreateStackRequestAction is sent by the client when an item is created through being used as part of a
829
+ # recipe. For example, when milk is used to craft a cake, the buckets are leftover. The buckets are moved to
830
+ # the slot sent by the client here.
831
+ # Note that before this is sent, an action for consuming all items in the crafting table/grid is sent. Items
832
+ # that are not fully consumed when used for a recipe should not be destroyed there, but instead, should be
833
+ # turned into their respective resulting items.
834
+ - create
835
+ # (as of 1.18.10) Not currently used
836
+ - place_in_container
837
+ # (as of 1.18.10) Not currently used
838
+ - take_out_container
839
+ # LabTableCombineStackRequestAction is sent by the client when it uses a lab table to combine item stacks.
840
+ - lab_table_combine
841
+ # BeaconPaymentStackRequestAction is sent by the client when it submits an item to enable effects from a
842
+ # beacon. These items will have been moved into the beacon item slot in advance.
843
+ - beacon_payment
844
+ # MineBlockStackRequestAction is sent by the client when it breaks a block.
845
+ - mine_block
846
+ # CraftRecipeStackRequestAction is sent by the client the moment it begins crafting an item. This is the
847
+ # first action sent, before the Consume and Create item stack request actions.
848
+ # This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
849
+ # crafting, where the old item is consumed.
850
+ - craft_recipe
851
+ # AutoCraftRecipeStackRequestAction is sent by the client similarly to the CraftRecipeStackRequestAction. The
852
+ # only difference is that the recipe is automatically created and crafted by shift clicking the recipe book.
853
+ - craft_recipe_auto #recipe book?
854
+ # CraftCreativeStackRequestAction is sent by the client when it takes an item out fo the creative inventory.
855
+ # The item is thus not really crafted, but instantly created.
856
+ - craft_creative
857
+ # CraftRecipeOptionalStackRequestAction is sent when using an anvil. When this action is sent, the
858
+ # CustomNames field in the respective stack request is non-empty and contains the name of the item created
859
+ # using the anvil.
860
+ - optional
861
+ # CraftGrindstoneRecipeStackRequestAction is sent when a grindstone recipe is crafted. It contains the RecipeNetworkID
862
+ # to identify the recipe crafted, and the cost for crafting the recipe.
863
+ - craft_grindstone_request
864
+ # CraftLoomRecipeStackRequestAction is sent when a loom recipe is crafted. It simply contains the
865
+ # pattern identifier to figure out what pattern is meant to be applied to the item.
866
+ - craft_loom_request
867
+ # CraftNonImplementedStackRequestAction is an action sent for inventory actions that aren't yet implemented
868
+ # in the new system. These include, for example, anvils.
869
+ - non_implemented # anvils aren't fully implemented yet
870
+ # CraftResultsDeprecatedStackRequestAction is an additional, deprecated packet sent by the client after
871
+ # crafting. It holds the final results and the amount of times the recipe was crafted. It shouldn't be used.
872
+ # This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
873
+ # crafting, where the old item is consumed.
874
+ - results_deprecated
875
+ _: type_id ?
876
+ if take or place:
877
+ count: u8
878
+ source: StackRequestSlotInfo
879
+ destination: StackRequestSlotInfo
880
+ if swap:
881
+ # Source and Destination point to the source slot from which Count of the item stack were taken and the
882
+ # destination slot to which this item was moved.
883
+ source: StackRequestSlotInfo
884
+ destination: StackRequestSlotInfo
885
+ if drop:
886
+ # Count is the count of the item in the source slot that was taken towards the destination slot.
887
+ count: u8
888
+ # Source is the source slot from which items were dropped to the ground.
889
+ source: StackRequestSlotInfo
890
+ # Randomly seems to be set to false in most cases. I'm not entirely sure what this does, but this is what
891
+ # vanilla calls this field.
892
+ randomly: bool
893
+ if destroy or consume:
894
+ # Count is the count of the item in the source slot that was destroyed.
895
+ count: u8
896
+ # Source is the source slot from which items came that were destroyed by moving them into the creative
897
+ # inventory.
898
+ source: StackRequestSlotInfo
899
+ if create:
900
+ # ResultsSlot is the slot in the inventory in which the results of the crafting ingredients are to be
901
+ # placed.
902
+ result_slot_id: u8
903
+ if beacon_payment:
904
+ # PrimaryEffect and SecondaryEffect are the effects that were selected from the beacon.
905
+ primary_effect: zigzag32
906
+ secondary_effect: zigzag32
907
+ if mine_block:
908
+ # // Unknown1 ... TODO: Find out what this is for
909
+ unknown1: zigzag32
910
+ # PredictedDurability is the durability of the item that the client assumes to be present at the time
911
+ predicted_durability: zigzag32
912
+ # StackNetworkID is the unique stack ID that the client assumes to be present at the time. The server
913
+ # must check if these IDs match. If they do not match, servers should reject the stack request that the
914
+ # action holding this info was in.
915
+ network_id: zigzag32
916
+ if craft_recipe or craft_recipe_auto:
917
+ # RecipeNetworkID is the network ID of the recipe that is about to be crafted. This network ID matches
918
+ # one of the recipes sent in the CraftingData packet, where each of the recipes have a RecipeNetworkID as
919
+ # of 1.16.
920
+ recipe_network_id: varint
921
+ if craft_creative:
922
+ # The stack ID of the creative item that is being created. This is one of the
923
+ # creative item stack IDs sent in the CreativeContent packet.
924
+ item_id: varint
925
+ if optional:
926
+ # For the cartography table, if a certain MULTI recipe is being called, this points to the network ID that was assigned.
927
+ recipe_network_id: varint
928
+ # Most likely the index in the request's filter strings that this action is using
929
+ filtered_string_index: li32
930
+ if craft_grindstone_request:
931
+ # RecipeNetworkID is the network ID of the recipe that is about to be crafted. This network ID matches
932
+ # one of the recipes sent in the CraftingData packet, where each of the recipes have a RecipeNetworkID as
933
+ recipe_network_id: varint
934
+ # Cost is the cost of the recipe that was crafted.
935
+ cost: varint
936
+ if craft_loom_request:
937
+ # Pattern is the pattern identifier for the loom recipe.
938
+ pattern: string
939
+ if non_implemented: void
940
+ if results_deprecated:
941
+ result_items: ItemLegacy[]varint
942
+ times_crafted: u8
943
+ # CustomNames is a list of custom names involved in the request. This is typically filled with one string
944
+ # when an anvil is used.
945
+ # * Used for the server to determine which strings should be filtered. Used in anvils to verify a renamed item.
946
+ custom_names: string[]varint
947
+
948
+ # ItemStackResponse is a response to an individual ItemStackRequest.
949
+ ItemStackResponses: []varint
950
+ # Status specifies if the request with the RequestID below was successful. If this is the case, the
951
+ # ContainerInfo below will have information on what slots ended up changing. If not, the container info
952
+ # will be empty.
953
+ # A non-0 status means an error occurred and will result in the action being reverted.
954
+ status: u8 =>
955
+ 0: ok
956
+ 1: error
957
+ # RequestID is the unique ID of the request that this response is in reaction to. If rejected, the client
958
+ # will undo the actions from the request with this ID.
959
+ request_id: varint
960
+ _: status ?
961
+ if ok:
962
+ # ContainerInfo holds information on the containers that had their contents changed as a result of the
963
+ # request.
964
+ containers: []varint
965
+ # ContainerID is the container ID of the container that the slots that follow are in. For the main
966
+ # inventory, this value seems to be 0x1b. For the cursor, this value seems to be 0x3a. For the crafting
967
+ # grid, this value seems to be 0x0d.
968
+ # * actually, this is ContainerSlotType - used by the inventory system that specifies the type of slot
969
+ slot_type: ContainerSlotType
970
+ # SlotInfo holds information on what item stack should be present in specific slots in the container.
971
+ slots: []varint
972
+ # Slot and HotbarSlot seem to be the same value every time: The slot that was actually changed. I'm not
973
+ # sure if these slots ever differ.
974
+ slot: u8
975
+ hotbar_slot: u8
976
+ # Count is the total count of the item stack. This count will be shown client-side after the response is
977
+ # sent to the client.
978
+ count: u8
979
+ # StackNetworkID is the network ID of the new stack at a specific slot.
980
+ item_stack_id: varint
981
+ # CustomName is the custom name of the item stack. It is used in relation to text filtering.
982
+ custom_name: string
983
+ # DurabilityCorrection is the current durability of the item stack. This durability will be shown
984
+ # client-side after the response is sent to the client.
985
+ durability_correction: zigzag32
986
+
987
+
988
+ ItemComponentList: []varint
989
+ # Name is the name of the item, which is a name like 'minecraft:stick'.
990
+ name: string
991
+ # Data is a map containing the components and properties of the item.
992
+ nbt: nbt
993
+
994
+ CommandOrigin:
995
+ # Origin is one of the values above that specifies the origin of the command. The origin may change,
996
+ # depending on what part of the client actually called the command. The command may be issued by a
997
+ # websocket server, for example.
998
+ type: varint =>
999
+ 0: player
1000
+ 1: block
1001
+ 2: minecart_block
1002
+ 3: dev_console
1003
+ 4: test
1004
+ 5: automation_player
1005
+ 6: client_automation
1006
+ 7: dedicated_server
1007
+ 8: entity
1008
+ 9: virtual
1009
+ 10: game_argument
1010
+ 11: entity_server
1011
+ 12: precompiled
1012
+ 13: game_director_entity_server # ?
1013
+ 14: script
1014
+ 15: executor
1015
+
1016
+ # UUID is the UUID of the command called. This UUID is a bit odd as it is not specified by the server. It
1017
+ # is not clear what exactly this UUID is meant to identify, but it is unique for each command called.
1018
+ uuid: uuid
1019
+ # RequestID is an ID that identifies the request of the client. The server should send a CommandOrigin
1020
+ # with the same request ID to ensure it can be matched with the request by the caller of the command.
1021
+ # This is especially important for websocket servers and it seems that this field is only non-empty for
1022
+ # these websocket servers.
1023
+ request_id: string
1024
+ # PlayerUniqueID is an ID that identifies the player, the same as the one found in the AdventureSettings
1025
+ # packet. Filling it out with 0 seems to work.
1026
+ # PlayerUniqueID is only written if Origin is CommandOriginDevConsole or CommandOriginTest.
1027
+ player_entity_id: type?
1028
+ if dev_console or test:
1029
+ player_entity_id: zigzag64
1030
+
1031
+ # MapTrackedObject is an object on a map that is 'tracked' by the client, such as an entity or a block. This
1032
+ # object may move, which is handled client-side.
1033
+ TrackedObject:
1034
+ # Type is the type of the tracked object. It is either MapObjectTypeEntity or MapObjectTypeBlock.
1035
+ type: li32 =>
1036
+ 0: entity
1037
+ 1: block
1038
+ # EntityUniqueID is the unique ID of the entity, if the tracked object was an entity. It needs not to be
1039
+ # filled out if Type is not MapObjectTypeEntity.
1040
+ entity_unique_id: type ?
1041
+ if entity: zigzag64
1042
+ # BlockPosition is the position of the block, if the tracked object was a block. It needs not to be
1043
+ # filled out if Type is not MapObjectTypeBlock.
1044
+ block_position: type ?
1045
+ if block: BlockCoordinates
1046
+
1047
+ # MapDecoration is a fixed decoration on a map: Its position or other properties do not change automatically
1048
+ # client-side.
1049
+ MapDecoration:
1050
+ type: u8
1051
+ # Rotation is the rotation of the map decoration. It is byte due to the 16 fixed directions that the
1052
+ # map decoration may face.
1053
+ rotation: u8
1054
+ # X is the offset on the X axis in pixels of the decoration.
1055
+ x: u8
1056
+ # Y is the offset on the Y axis in pixels of the decoration.
1057
+ y: u8
1058
+ # Label is the name of the map decoration. This name may be of any value.
1059
+ label: string
1060
+ # Colour is the colour of the map decoration. Some map decoration types have a specific colour set
1061
+ # automatically, whereas others may be changed.
1062
+ color_abgr: varint
1063
+
1064
+
1065
+ StructureBlockSettings:
1066
+ # PaletteName is the name of the palette used in the structure. Currently, it seems that this field is
1067
+ # always 'default'.
1068
+ palette_name: string
1069
+ # IgnoreEntities specifies if the structure should ignore entities or include them. If set to false,
1070
+ # entities will also show up in the exported structure.
1071
+ ignore_entities: bool
1072
+ # IgnoreBlocks specifies if the structure should ignore blocks or include them. If set to false, blocks
1073
+ # will show up in the exported structure.
1074
+ ignore_blocks: bool
1075
+ non_ticking_players_and_ticking_areas: bool
1076
+ # Size is the size of the area that is about to be exported. The area exported will start at the
1077
+ # Position + Offset, and will extend as far as Size specifies.
1078
+ size: BlockCoordinates
1079
+ # Offset is the offset position that was set in the structure block. The area exported is offset by this
1080
+ # position.
1081
+ # **TODO**: This will be renamed to offset soon
1082
+ structure_offset: BlockCoordinates
1083
+ # LastEditingPlayerUniqueID is the unique ID of the player that last edited the structure block that
1084
+ # these settings concern.
1085
+ last_editing_player_unique_id: zigzag64
1086
+ # Rotation is the rotation that the structure block should obtain. See the constants above for available
1087
+ # options.
1088
+ rotation: u8 =>
1089
+ 0: none
1090
+ 1: 90_deg
1091
+ 2: 180_deg
1092
+ 3: 270_deg
1093
+ # Mirror specifies the way the structure should be mirrored. It is either no mirror at all, mirror on the
1094
+ # x/z axis or both.
1095
+ mirror: u8 =>
1096
+ 0: none
1097
+ 1: x_axis
1098
+ 2: z_axis
1099
+ 3: both_axes
1100
+ animation_mode: u8 =>
1101
+ 0: none
1102
+ 1: layers
1103
+ 2: blocks
1104
+ # How long the duration for this animation is
1105
+ animation_duration: lf32
1106
+ # Integrity is usually 1, but may be set to a number between 0 and 1 to omit blocks randomly, using
1107
+ # the Seed that follows.
1108
+ integrity: lf32
1109
+ # Seed is the seed used to omit blocks if Integrity is not equal to one. If the Seed is 0, a random
1110
+ # seed is selected to omit blocks.
1111
+ seed: lu32
1112
+ # Pivot is the pivot around which the structure may be rotated.
1113
+ pivot: vec3f
1114
+
1115
+ # EducationSharedResourceURI is an education edition feature that is used for transmitting
1116
+ # education resource settings to clients. It contains a button name and a link URL.
1117
+ EducationSharedResourceURI:
1118
+ # ButtonName is the button name of the resource URI.
1119
+ button_name: string
1120
+ # LinkURI is the link URI for the resource URI.
1121
+ link_uri: string
1122
+
1123
+ EducationExternalLinkSettings:
1124
+ # URL is the external link URL.
1125
+ url: string
1126
+ # DisplayName is the display name in game.
1127
+ display_name: string
1128
+
1129
+ BlockUpdate:
1130
+ position: BlockCoordinates
1131
+ runtime_id: varint
1132
+ flags: varint
1133
+ # EntityUniqueID is the unique ID of the falling block entity that the block transitions to or that the
1134
+ # entity transitions from.
1135
+ # Note that for both possible values for TransitionType, the EntityUniqueID should point to the falling
1136
+ # block entity involved.
1137
+ entity_unique_id: zigzag64
1138
+ # TransitionType is the type of the transition that happened. It is either BlockToEntityTransition, when
1139
+ # a block placed becomes a falling entity, or EntityToBlockTransition, when a falling entity hits the
1140
+ # ground and becomes a solid block again.
1141
+ transition_type: varint => TransitionType
1142
+
1143
+ TransitionType: =>
1144
+ # For falling sand, when a sand turns to an entity
1145
+ 0: entity
1146
+ # When sand turns back to a new block
1147
+ 1: create
1148
+ 2: destroy
1149
+
1150
+ MaterialReducer:
1151
+ mix: zigzag32
1152
+ items:
1153
+ network_id: zigzag32
1154
+ count: zigzag32
1155
+
1156
+ PermissionLevel: varint =>
1157
+ 0: visitor
1158
+ 1: member
1159
+ 2: operator
1160
+ 3: custom
1161
+
1162
+ # List of Window IDs. When a new container is opened (container_open), a new sequential Window ID is created.
1163
+ # Below window IDs are hard-coded and created when the game starts and the server does not
1164
+ # send a `container_open` for them.
1165
+ WindowID: i8 =>
1166
+ -100: drop_contents
1167
+ -24: beacon
1168
+ -23: trading_output
1169
+ -22: trading_use_inputs
1170
+ -21: trading_input_2
1171
+ -20: trading_input_1
1172
+ -17: enchant_output
1173
+ -16: enchant_material
1174
+ -15: enchant_input
1175
+ -13: anvil_output
1176
+ -12: anvil_result
1177
+ -11: anvil_material
1178
+ -10: container_input
1179
+ -5: crafting_use_ingredient
1180
+ -4: crafting_result
1181
+ -3: crafting_remove_ingredient
1182
+ -2: crafting_add_ingredient
1183
+ -1: none
1184
+ 0: inventory
1185
+ 1: first
1186
+ 100: last
1187
+ 119: offhand
1188
+ 120: armor
1189
+ 121: creative
1190
+ 122: hotbar
1191
+ 123: fixed_inventory
1192
+ 124: ui
1193
+
1194
+ WindowIDVarint: varint =>
1195
+ -100: drop_contents
1196
+ -24: beacon
1197
+ -23: trading_output
1198
+ -22: trading_use_inputs
1199
+ -21: trading_input_2
1200
+ -20: trading_input_1
1201
+ -17: enchant_output
1202
+ -16: enchant_material
1203
+ -15: enchant_input
1204
+ -13: anvil_output
1205
+ -12: anvil_result
1206
+ -11: anvil_material
1207
+ -10: container_input
1208
+ -5: crafting_use_ingredient
1209
+ -4: crafting_result
1210
+ -3: crafting_remove_ingredient
1211
+ -2: crafting_add_ingredient
1212
+ -1: none
1213
+ 0: inventory
1214
+ 1: first
1215
+ 100: last
1216
+ 119: offhand
1217
+ 120: armor
1218
+ 121: creative
1219
+ 122: hotbar
1220
+ 123: fixed_inventory
1221
+ 124: ui
1222
+
1223
+ WindowType: i8 =>
1224
+ -9: none
1225
+ -1: inventory
1226
+ 0: container
1227
+ 1: workbench
1228
+ 2: furnace
1229
+ 3: enchantment
1230
+ 4: brewing_stand
1231
+ 5: anvil
1232
+ 6: dispenser
1233
+ 7: dropper
1234
+ 8: hopper
1235
+ 9: cauldron
1236
+ 10: minecart_chest
1237
+ 11: minecart_hopper
1238
+ 12: horse
1239
+ 13: beacon
1240
+ 14: structure_editor
1241
+ 15: trading
1242
+ 16: command_block
1243
+ 17: jukebox
1244
+ 18: armor
1245
+ 19: hand
1246
+ 20: compound_creator
1247
+ 21: element_constructor
1248
+ 22: material_reducer
1249
+ 23: lab_table
1250
+ 24: loom
1251
+ 25: lectern
1252
+ 26: grindstone
1253
+ 27: blast_furnace
1254
+ 28: smoker
1255
+ 29: stonecutter
1256
+ 30: cartography
1257
+ 31: hud
1258
+ 32: jigsaw_editor
1259
+ 33: smithing_table
1260
+
1261
+ # Used in inventory transactions.
1262
+ ContainerSlotType: u8 =>
1263
+ - anvil_input
1264
+ - anvil_material
1265
+ - anvil_result
1266
+ - smithing_table_input
1267
+ - smithing_table_material
1268
+ - smithing_table_result
1269
+ - armor
1270
+ - container
1271
+ - beacon_payment
1272
+ - brewing_input
1273
+ - brewing_result
1274
+ - brewing_fuel
1275
+ - hotbar_and_inventory
1276
+ - crafting_input
1277
+ - crafting_output
1278
+ - recipe_construction
1279
+ - recipe_nature
1280
+ - recipe_items
1281
+ - recipe_search
1282
+ - recipe_search_bar
1283
+ - recipe_equipment
1284
+ - enchanting_input
1285
+ - enchanting_lapis
1286
+ - furnace_fuel
1287
+ - furnace_ingredient
1288
+ - furnace_output
1289
+ - horse_equip
1290
+ - hotbar
1291
+ - inventory
1292
+ - shulker
1293
+ - trade_ingredient1
1294
+ - trade_ingredient2
1295
+ - trade_result
1296
+ - offhand
1297
+ - compcreate_input
1298
+ - compcreate_output
1299
+ - elemconstruct_output
1300
+ - matreduce_input
1301
+ - matreduce_output
1302
+ - labtable_input
1303
+ - loom_input
1304
+ - loom_dye
1305
+ - loom_material
1306
+ - loom_result
1307
+ - blast_furnace_ingredient
1308
+ - smoker_ingredient
1309
+ - trade2_ingredient1
1310
+ - trade2_ingredient2
1311
+ - trade2_result
1312
+ - grindstone_input
1313
+ - grindstone_additional
1314
+ - grindstone_result
1315
+ - stonecutter_input
1316
+ - stonecutter_result
1317
+ - cartography_input
1318
+ - cartography_additional
1319
+ - cartography_result
1320
+ - barrel
1321
+ - cursor
1322
+ - creative_output
1323
+
1324
+ SoundType: varint =>
1325
+ - ItemUseOn
1326
+ - Hit
1327
+ - Step
1328
+ - Fly
1329
+ - Jump
1330
+ - Break
1331
+ - Place
1332
+ - HeavyStep
1333
+ - Gallop
1334
+ - Fall
1335
+ - Ambient
1336
+ - AmbientBaby
1337
+ - AmbientInWater
1338
+ - Breathe
1339
+ - Death
1340
+ - DeathInWater
1341
+ - DeathToZombie
1342
+ - Hurt
1343
+ - HurtInWater
1344
+ - Mad
1345
+ - Boost
1346
+ - Bow
1347
+ - SquishBig
1348
+ - SquishSmall
1349
+ - FallBig
1350
+ - FallSmall
1351
+ - Splash
1352
+ - Fizz
1353
+ - Flap
1354
+ - Swim
1355
+ - Drink
1356
+ - Eat
1357
+ - Takeoff
1358
+ - Shake
1359
+ - Plop
1360
+ - Land
1361
+ - Saddle
1362
+ - Armor
1363
+ - MobArmorStandPlace
1364
+ - AddChest
1365
+ - Throw
1366
+ - Attack
1367
+ - AttackNoDamage
1368
+ - AttackStrong
1369
+ - Warn
1370
+ - Shear
1371
+ - Milk
1372
+ - Thunder
1373
+ - Explode
1374
+ - Fire
1375
+ - Ignite
1376
+ - Fuse
1377
+ - Stare
1378
+ - Spawn
1379
+ - Shoot
1380
+ - BreakBlock
1381
+ - Launch
1382
+ - Blast
1383
+ - LargeBlast
1384
+ - Twinkle
1385
+ - Remedy
1386
+ - Infect
1387
+ - LevelUp
1388
+ - BowHit
1389
+ - BulletHit
1390
+ - ExtinguishFire
1391
+ - ItemFizz
1392
+ - ChestOpen
1393
+ - ChestClosed
1394
+ - ShulkerBoxOpen
1395
+ - ShulkerBoxClosed
1396
+ - EnderChestOpen
1397
+ - EnderChestClosed
1398
+ - PowerOn
1399
+ - PowerOff
1400
+ - Attach
1401
+ - Detach
1402
+ - Deny
1403
+ - Tripod
1404
+ - Pop
1405
+ - DropSlot
1406
+ - Note
1407
+ - Thorns
1408
+ - PistonIn
1409
+ - PistonOut
1410
+ - Portal
1411
+ - Water
1412
+ - LavaPop
1413
+ - Lava
1414
+ - Burp
1415
+ - BucketFillWater
1416
+ - BucketFillLava
1417
+ - BucketEmptyWater
1418
+ - BucketEmptyLava
1419
+ - ArmorEquipChain
1420
+ - ArmorEquipDiamond
1421
+ - ArmorEquipGeneric
1422
+ - ArmorEquipGold
1423
+ - ArmorEquipIron
1424
+ - ArmorEquipLeather
1425
+ - ArmorEquipElytra
1426
+ - Record13
1427
+ - RecordCat
1428
+ - RecordBlocks
1429
+ - RecordChirp
1430
+ - RecordFar
1431
+ - RecordMall
1432
+ - RecordMellohi
1433
+ - RecordStal
1434
+ - RecordStrad
1435
+ - RecordWard
1436
+ - Record11
1437
+ - RecordWait
1438
+ - StopRecord
1439
+ - Flop
1440
+ - GuardianCurse
1441
+ - MobWarning
1442
+ - MobWarningBaby
1443
+ - Teleport
1444
+ - ShulkerOpen
1445
+ - ShulkerClose
1446
+ - Haggle
1447
+ - HaggleYes
1448
+ - HaggleNo
1449
+ - HaggleIdle
1450
+ - ChorusGrow
1451
+ - ChorusDeath
1452
+ - Glass
1453
+ - PotionBrewed
1454
+ - CastSpell
1455
+ - PrepareAttackSpell
1456
+ - PrepareSummon
1457
+ - PrepareWololo
1458
+ - Fang
1459
+ - Charge
1460
+ - CameraTakePicture
1461
+ - LeashKnotPlace
1462
+ - LeashKnotBreak
1463
+ - AmbientGrowl
1464
+ - AmbientWhine
1465
+ - AmbientPant
1466
+ - AmbientPurr
1467
+ - AmbientPurreow
1468
+ - DeathMinVolume
1469
+ - DeathMidVolume
1470
+ - ImitateBlaze
1471
+ - ImitateCaveSpider
1472
+ - ImitateCreeper
1473
+ - ImitateElderGuardian
1474
+ - ImitateEnderDragon
1475
+ - ImitateEnderman
1476
+ - ImitateEndermite
1477
+ - ImitateEvocationIllager
1478
+ - ImitateGhast
1479
+ - ImitateHusk
1480
+ - ImitateIllusionIllager
1481
+ - ImitateMagmaCube
1482
+ - ImitatePolarBear
1483
+ - ImitateShulker
1484
+ - ImitateSilverfish
1485
+ - ImitateSkeleton
1486
+ - ImitateSlime
1487
+ - ImitateSpider
1488
+ - ImitateStray
1489
+ - ImitateVex
1490
+ - ImitateVindicationIllager
1491
+ - ImitateWitch
1492
+ - ImitateWither
1493
+ - ImitateWitherSkeleton
1494
+ - ImitateWolf
1495
+ - ImitateZombie
1496
+ - ImitateZombiePigman
1497
+ - ImitateZombieVillager
1498
+ - EnderEyePlaced
1499
+ - EndPortalCreated
1500
+ - AnvilUse
1501
+ - BottleDragonBreath
1502
+ - PortalTravel
1503
+ - TridentHit
1504
+ - TridentReturn
1505
+ - TridentRiptide1
1506
+ - TridentRiptide2
1507
+ - TridentRiptide3
1508
+ - TridentThrow
1509
+ - TridentThunder
1510
+ - TridentHitGround
1511
+ - Default
1512
+ - FletchingTableUse
1513
+ - ElemConstructOpen
1514
+ - IceBombHit
1515
+ - BalloonPop
1516
+ - LtReactionIceBomb
1517
+ - LtReactionBleach
1518
+ - LtReactionElephantToothpaste
1519
+ - LtReactionElephantToothpaste2
1520
+ - LtReactionGlowStick
1521
+ - LtReactionGlowStick2
1522
+ - LtReactionLuminol
1523
+ - LtReactionSalt
1524
+ - LtReactionFertilizer
1525
+ - LtReactionFireball
1526
+ - LtReactionMagnesiumSalt
1527
+ - LtReactionMiscFire
1528
+ - LtReactionFire
1529
+ - LtReactionMiscExplosion
1530
+ - LtReactionMiscMystical
1531
+ - LtReactionMiscMystical2
1532
+ - LtReactionProduct
1533
+ - SparklerUse
1534
+ - GlowStickUse
1535
+ - SparklerActive
1536
+ - ConvertToDrowned
1537
+ - BucketFillFish
1538
+ - BucketEmptyFish
1539
+ - BubbleColumnUpwards
1540
+ - BubbleColumnDownwards
1541
+ - BubblePop
1542
+ - BubbleUpInside
1543
+ - BubbleDownInside
1544
+ - HurtBaby
1545
+ - DeathBaby
1546
+ - StepBaby
1547
+ - SpawnBaby
1548
+ - Born
1549
+ - TurtleEggBreak
1550
+ - TurtleEggCrack
1551
+ - TurtleEggHatched
1552
+ - LayEgg
1553
+ - TurtleEggAttacked
1554
+ - BeaconActivate
1555
+ - BeaconAmbient
1556
+ - BeaconDeactivate
1557
+ - BeaconPower
1558
+ - ConduitActivate
1559
+ - ConduitAmbient
1560
+ - ConduitAttack
1561
+ - ConduitDeactivate
1562
+ - ConduitShort
1563
+ - Swoop
1564
+ - BambooSaplingPlace
1565
+ - PreSneeze
1566
+ - Sneeze
1567
+ - AmbientTame
1568
+ - Scared
1569
+ - ScaffoldingClimb
1570
+ - CrossbowLoadingStart
1571
+ - CrossbowLoadingMiddle
1572
+ - CrossbowLoadingEnd
1573
+ - CrossbowShoot
1574
+ - CrossbowQuickChargeStart
1575
+ - CrossbowQuickChargeMiddle
1576
+ - CrossbowQuickChargeEnd
1577
+ - AmbientAggressive
1578
+ - AmbientWorried
1579
+ - CantBreed
1580
+ - ShieldBlock
1581
+ - LecternBookPlace
1582
+ - GrindstoneUse
1583
+ - Bell
1584
+ - CampfireCrackle
1585
+ - Roar
1586
+ - Stun
1587
+ - SweetBerryBushHurt
1588
+ - SweetBerryBushPick
1589
+ - CartographyTableUse
1590
+ - StonecutterUse
1591
+ - ComposterEmpty
1592
+ - ComposterFill
1593
+ - ComposterFillLayer
1594
+ - ComposterReady
1595
+ - BarrelOpen
1596
+ - BarrelClose
1597
+ - RaidHorn
1598
+ - LoomUse
1599
+ - AmbientInRaid
1600
+ - UicartographyTableUse
1601
+ - UistonecutterUse
1602
+ - UiloomUse
1603
+ - SmokerUse
1604
+ - BlastFurnaceUse
1605
+ - SmithingTableUse
1606
+ - Screech
1607
+ - Sleep
1608
+ - FurnaceUse
1609
+ - MooshroomConvert
1610
+ - MilkSuspiciously
1611
+ - Celebrate
1612
+ - JumpPrevent
1613
+ - AmbientPollinate
1614
+ - BeehiveDrip
1615
+ - BeehiveEnter
1616
+ - BeehiveExit
1617
+ - BeehiveWork
1618
+ - BeehiveShear
1619
+ - HoneybottleDrink
1620
+ - AmbientCave
1621
+ - Retreat
1622
+ - ConvertToZombified
1623
+ - Admire
1624
+ - StepLava
1625
+ - Tempt
1626
+ - Panic
1627
+ - Angry
1628
+ - AmbientMoodWarpedForest
1629
+ - AmbientMoodSoulsandValley
1630
+ - AmbientMoodNetherWastes
1631
+ - AmbientMoodBasaltDeltas
1632
+ - AmbientMoodCrimsonForest
1633
+ - RespawnAnchorCharge
1634
+ - RespawnAnchorDeplete
1635
+ - RespawnAnchorSetSpawn
1636
+ - RespawnAnchorAmbient
1637
+ - SoulEscapeQuiet
1638
+ - SoulEscapeLoud
1639
+ - RecordPigstep
1640
+ - LinkCompassToLodestone
1641
+ - UseSmithingTable
1642
+ - EquipNetherite
1643
+ - AmbientLoopWarpedForest
1644
+ - AmbientLoopSoulsandValley
1645
+ - AmbientLoopNetherWastes
1646
+ - AmbientLoopBasaltDeltas
1647
+ - AmbientLoopCrimsonForest
1648
+ - AmbientAdditionWarpedForest
1649
+ - AmbientAdditionSoulsandValley
1650
+ - AmbientAdditionNetherWastes
1651
+ - AmbientAdditionBasaltDeltas
1652
+ - AmbientAdditionCrimsonForest
1653
+ - SculkSensorPowerOn
1654
+ - SculkSensorPowerOff
1655
+ - BucketFillPowderSnow
1656
+ - BucketEmptyPowderSnow
1657
+ - PointedDripstoneCauldronDripWater
1658
+ - PointedDripstoneCauldronDripLava
1659
+ - PointedDripstoneDripWater
1660
+ - PointedDripstoneDripLava
1661
+ - CaveVinesPickBerries
1662
+ - BigDripleafTiltDown
1663
+ - BigDripleafTiltUp
1664
+ - CopperWaxOn
1665
+ - CopperWaxOff
1666
+ - Scrape
1667
+ - PlayerHurtDrown
1668
+ - PlayerHurtOnFire
1669
+ - PlayerHurtFreeze
1670
+ - UseSpyglass
1671
+ - StopUsingSpyglass
1672
+ - AmethystBlockChime
1673
+ - AmbientScreamer
1674
+ - HurtScreamer
1675
+ - DeathScreamer
1676
+ - MilkScreamer
1677
+ - JumpToBlock
1678
+ - PreRam
1679
+ - PreRamScreamer
1680
+ - RamImpact
1681
+ - RamImpactScreamer
1682
+ - SquidInkSquirt
1683
+ - GlowSquidInkSquirt
1684
+ - ConvertToStray
1685
+ - CakeAddCandle
1686
+ - ExtinguishCandle
1687
+ - AmbientCandle
1688
+ - BlockClick
1689
+ - BlockClickFail
1690
+ - SculkCatalystBloom
1691
+ - SculkShriekerShriek
1692
+ - WardenNearbyClose
1693
+ - WardenNearbyCloser
1694
+ - WardenNearbyClosest
1695
+ - WardenSlightlyAngry
1696
+ - RecordOtherside
1697
+ - Tongue
1698
+ - CrackIronGolem
1699
+ - RepairIronGolem
1700
+ - Listening
1701
+ - Heartbeat
1702
+ - HornBreak
1703
+ - SculkPlace
1704
+ - SculkSpread
1705
+ - SculkCharge
1706
+ - SculkSensorPlace
1707
+ - SculkShriekerPlace
1708
+ - goat_call_0
1709
+ - goat_call_1
1710
+ - goat_call_2
1711
+ - goat_call_3
1712
+ - goat_call_4
1713
+ - goat_call_5
1714
+ - goat_call_6
1715
+ - goat_call_7
1716
+ - goat_call_8
1717
+ - goat_call_9
1718
+ - goat_harmony_0
1719
+ - goat_harmony_1
1720
+ - goat_harmony_2
1721
+ - goat_harmony_3
1722
+ - goat_harmony_4
1723
+ - goat_harmony_5
1724
+ - goat_harmony_6
1725
+ - goat_harmony_7
1726
+ - goat_harmony_8
1727
+ - goat_harmony_9
1728
+ - goat_melody_0
1729
+ - goat_melody_1
1730
+ - goat_melody_2
1731
+ - goat_melody_3
1732
+ - goat_melody_4
1733
+ - goat_melody_5
1734
+ - goat_melody_6
1735
+ - goat_melody_7
1736
+ - goat_melody_8
1737
+ - goat_melody_9
1738
+ - goat_bass_0
1739
+ - goat_bass_1
1740
+ - goat_bass_2
1741
+ - goat_bass_3
1742
+ - goat_bass_4
1743
+ - goat_bass_5
1744
+ - goat_bass_6
1745
+ - goat_bass_7
1746
+ - goat_bass_8
1747
+ - goat_bass_9
1748
+ - _
1749
+ - _
1750
+ - _
1751
+ - ImitateWarden
1752
+ - ListeningAngry
1753
+ - ItemGiven
1754
+ - ItemTaken
1755
+ - Disappeared
1756
+ - Reappeared
1757
+ - _
1758
+ - FrogspawnHatched
1759
+ - LaySpawn
1760
+ - FrogspawnBreak
1761
+ - SonicBoom
1762
+ - SonicCharge
1763
+ - SoundeventItemThrown
1764
+ - Record5
1765
+ - ConvertToFrog
1766
+ - Undefined
1767
+
1768
+ # TODO: remove?
1769
+ LegacyEntityType: li32 =>
1770
+ 10: chicken
1771
+ 11: cow
1772
+ 12: pig
1773
+ 13: sheep
1774
+ 14: wolf
1775
+ 15: villager
1776
+ 16: mooshroom
1777
+ 17: squid
1778
+ 18: rabbit
1779
+ 19: bat
1780
+ 20: iron_golem
1781
+ 21: snow_golem
1782
+ 22: ocelot
1783
+ 23: horse
1784
+ 24: donkey
1785
+ 25: mule
1786
+ 26: skeleton_horse
1787
+ 27: zombie_horse
1788
+ 28: polar_bear
1789
+ 29: llama
1790
+ 30: parrot
1791
+ 31: dolphin
1792
+ 32: zombie
1793
+ 33: creeper
1794
+ 34: skeleton
1795
+ 35: spider
1796
+ 36: zombie_pigman
1797
+ 37: slime
1798
+ 38: enderman
1799
+ 39: silverfish
1800
+ 40: cave_spider
1801
+ 41: ghast
1802
+ 42: magma_cube
1803
+ 43: blaze
1804
+ 44: zombie_villager
1805
+ 45: witch
1806
+ 46: stray
1807
+ 47: husk
1808
+ 48: wither_skeleton
1809
+ 49: guardian
1810
+ 50: elder_guardian
1811
+ 51: npc
1812
+ 52: wither
1813
+ 53: ender_dragon
1814
+ 54: shulker
1815
+ 55: endermite
1816
+ 56: agent # LEARN_TO_CODE_MASCOT
1817
+ 57: vindicator
1818
+ 58: phantom
1819
+ 61: armor_stand
1820
+ 62: tripod_camera
1821
+ 63: player
1822
+ 64: item
1823
+ 65: tnt
1824
+ 66: falling_block
1825
+ 67: moving_block
1826
+ 68: xp_bottle
1827
+ 69: xp_orb
1828
+ 70: eye_of_ender_signal
1829
+ 71: ender_crystal
1830
+ 72: fireworks_rocket
1831
+ 73: thrown_trident
1832
+ 74: turtle
1833
+ 75: cat
1834
+ 76: shulker_bullet
1835
+ 77: fishing_hook
1836
+ 78: chalkboard
1837
+ 79: dragon_fireball
1838
+ 80: arrow
1839
+ 81: snowball
1840
+ 82: egg
1841
+ 83: painting
1842
+ 84: minecart
1843
+ 85: fireball
1844
+ 86: splash_potion
1845
+ 87: ender_pearl
1846
+ 88: leash_knot
1847
+ 89: wither_skull
1848
+ 90: boat
1849
+ 91: wither_skull_dangerous
1850
+ 93: lightning_bolt
1851
+ 94: small_fireball
1852
+ 95: area_effect_cloud
1853
+ 96: hopper_minecart
1854
+ 97: tnt_minecart
1855
+ 98: chest_minecart
1856
+ 100: command_block_minecart
1857
+ 101: lingering_potion
1858
+ 102: llama_spit
1859
+ 103: evocation_fang
1860
+ 104: evocation_illager
1861
+ 105: vex
1862
+ 106: ice_bomb
1863
+ 107: balloon
1864
+ 108: pufferfish
1865
+ 109: salmon
1866
+ 110: drowned
1867
+ 111: tropicalfish
1868
+ 112: cod
1869
+ 113: panda
1870
+
1871
+ DeviceOS: li32 =>
1872
+ - Undefined
1873
+ - Android
1874
+ - IOS
1875
+ - OSX
1876
+ - FireOS
1877
+ - GearVR
1878
+ - Hololens
1879
+ - Win10
1880
+ - Win32
1881
+ - Dedicated
1882
+ - TVOS
1883
+ - Orbis
1884
+ - NintendoSwitch
1885
+ - Xbox
1886
+ - WindowsPhone
1887
+ - Linux