minecraft-data 3.15.3 → 3.17.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.
@@ -0,0 +1,2005 @@
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
+ modifiers: []varint
472
+ id: string
473
+ name: string
474
+ amount: lf32
475
+ operation: li32
476
+ operand: li32
477
+ serializable: bool
478
+
479
+ # UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on
480
+ # a block. Also used in PlayerAuthoritativeInput packet
481
+ TransactionUseItem:
482
+ # ActionType is the type of the UseItem inventory transaction. It is one of the action types found above,
483
+ # and specifies the way the player interacted with the block.
484
+ action_type: varint =>
485
+ 0: click_block
486
+ 1: click_air
487
+ 2: break_block
488
+ # BlockPosition is the position of the block that was interacted with. This is only really a correct
489
+ # block position if ActionType is not UseItemActionClickAir.
490
+ block_position: vec3i
491
+ # BlockFace is the face of the block that was interacted with. When clicking the block, it is the face
492
+ # clicked. When breaking the block, it is the face that was last being hit until the block broke.
493
+ face: varint
494
+ # HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used
495
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
496
+ hotbar_slot: varint
497
+ # HeldItem is the item that was held to interact with the block. The server should check if this item
498
+ # is actually present in the HotBarSlot.
499
+ held_item: Item
500
+ # Position is the position of the player at the time of interaction. For clicking a block, this is the
501
+ # position at that time, whereas for breaking the block it is the position at the time of breaking.
502
+ player_pos: vec3f
503
+ # ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be
504
+ # used to find out exactly where a player clicked the block.
505
+ click_pos: vec3f
506
+ # BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify
507
+ # that the player's world client-side is synchronised with the server's.
508
+ block_runtime_id: varint
509
+
510
+ # Actions is a list of actions that took place, that form the inventory transaction together. Each of
511
+ # these actions hold one slot in which one item was changed to another. In general, the combination of
512
+ # all of these actions results in a balanced inventory transaction. This should be checked to ensure that
513
+ # no items are cheated into the inventory.
514
+ TransactionActions: []varint
515
+ source_type: varint =>
516
+ 0: container
517
+ 1: global
518
+ 2: world_interaction
519
+ 3: creative
520
+ 100: craft_slot
521
+ 99999: craft
522
+ _: source_type?
523
+ if container or craft:
524
+ inventory_id: WindowIDVarint
525
+ if world_interaction:
526
+ flags: varint
527
+ if craft or craft_slot:
528
+ action: varint
529
+ default: void
530
+ slot: varint
531
+ old_item: Item
532
+ new_item: Item
533
+
534
+ # The Minecraft bedrock inventory system was refactored, but not all inventory actions use the new packet.
535
+ # This data structure holds actions that have not been updated to the new system.
536
+ TransactionLegacy:
537
+ # LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should
538
+ # always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values
539
+ # in it.
540
+ # LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should
541
+ # respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the
542
+ # hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it.
543
+ legacy_request_id: zigzag32
544
+ # `legacy_transactions` are only present if the LegacyRequestID is non-zero. These item slots inform the
545
+ # server of the slots that were changed during the inventory transaction, and the server should send
546
+ # back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.)
547
+ legacy_transactions: legacy_request_id?
548
+ if 0: void
549
+ default: []varint
550
+ container_id: u8
551
+ changed_slots: []varint
552
+ slot_id: u8
553
+
554
+ Transaction:
555
+ # Old transaction system data
556
+ legacy: TransactionLegacy
557
+ # What type of transaction took place
558
+ transaction_type: varint =>
559
+ 0: normal
560
+ 1: inventory_mismatch
561
+ 2: item_use
562
+ 3: item_use_on_entity
563
+ 4: item_release
564
+ # The list of inventory internal actions in this packet, e.g. inventory GUI actions
565
+ actions: TransactionActions
566
+ # Extra data if an intenal inventory transaction did not take place, e.g. use of an item
567
+ transaction_data: transaction_type?
568
+ if normal or inventory_mismatch: void
569
+ # UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on
570
+ # a block.
571
+ if item_use: TransactionUseItem
572
+ # UseItemOnEntityTransactionData represents an inventory transaction data object sent when the client uses
573
+ # an item on an entity.
574
+ if item_use_on_entity:
575
+ # TargetEntityRuntimeID is the entity runtime ID of the target that was clicked. It is the runtime ID
576
+ # that was assigned to it in the AddEntity packet.
577
+ entity_runtime_id: varint64
578
+ # ActionType is the type of the UseItemOnEntity inventory transaction. It is one of the action types
579
+ # found in the constants above, and specifies the way the player interacted with the entity.
580
+ action_type: varint =>
581
+ 0: interact
582
+ 1: attack
583
+ # HotBarSlot is the hot bar slot that the player was holding while clicking the entity. It should be used
584
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
585
+ hotbar_slot: zigzag32
586
+ # HeldItem is the item that was held to interact with the entity. The server should check if this item
587
+ # is actually present in the HotBarSlot.
588
+ held_item: Item
589
+ # Position is the position of the player at the time of clicking the entity.
590
+ player_pos: vec3f
591
+ # ClickedPosition is the position that was clicked relative to the entity's base coordinate. It can be
592
+ # used to find out exactly where a player clicked the entity.
593
+ click_pos: vec3f
594
+ # ReleaseItemTransactionData represents an inventory transaction data object sent when the client releases
595
+ # the item it was using, for example when stopping while eating or stopping the charging of a bow.
596
+ if item_release:
597
+ # ActionType is the type of the ReleaseItem inventory transaction. It is one of the action types found
598
+ # in the constants above, and specifies the way the item was released.
599
+ # As of 1.13, the ActionType is always 0. This field can be ignored, because releasing food (by consuming
600
+ # it) or releasing a bow (to shoot an arrow) is essentially the same.
601
+ action_type: varint =>
602
+ 0: release
603
+ 1: consume
604
+ # HotBarSlot is the hot bar slot that the player was holding while releasing the item. It should be used
605
+ # to ensure that the hot bar slot and held item are correctly synchronised with the server.
606
+ hotbar_slot: zigzag32
607
+ # HeldItem is the item that was released. The server should check if this item is actually present in the
608
+ # HotBarSlot.
609
+ held_item: Item
610
+ # HeadPosition is the position of the player's head at the time of releasing the item. This is used
611
+ # mainly for purposes such as spawning eating particles at that position.
612
+ head_pos: vec3f
613
+
614
+ ItemStacks: Item[]varint
615
+
616
+ RecipeIngredient:
617
+ type: u8 =>
618
+ 0: invalid
619
+ # DefaultItemDescriptor represents an item descriptor for regular items.
620
+ 1: int_id_meta
621
+ # MoLangItemDescriptor represents an item descriptor for items that use MoLang (e.g. behaviour packs).
622
+ 2: molang
623
+ # ItemTagItemDescriptor represents an item descriptor that uses item tagging. This should be used to reduce duplicative
624
+ # entries for items that can be grouped under a single tag.
625
+ 3: item_tag
626
+ # DeferredItemDescriptor represents an item descriptor that uses a namespace and metadata value to identify the item.
627
+ # There is no clear benefit of using this item descriptor.
628
+ 4: string_id_meta
629
+ _: type ?
630
+ if int_id_meta:
631
+ # NetworkID is the numerical network ID of the item. This is sometimes a positive ID, and sometimes a
632
+ # negative ID, depending on what item it concerns.
633
+ network_id: li16
634
+ metadata: network_id ?
635
+ if 0: void
636
+ default: li16
637
+ if molang:
638
+ # Expression represents the MoLang expression used to identify the item/it's associated tag.
639
+ expression: string
640
+ # Version represents the version of MoLang to use.
641
+ version: u8
642
+ if item_tag:
643
+ # Tag represents the tag that the item is part of.
644
+ tag: string
645
+ if string_id_meta:
646
+ # Name is the name of the item, which is a name like 'minecraft:stick'.
647
+ name: string
648
+ # MetadataValue is the metadata value of the item. For some items, this is the damage value, whereas for
649
+ # other items it is simply an identifier of a variant of the item.
650
+ metadata: li16
651
+ count: zigzag32
652
+
653
+ PotionTypeRecipes: []varint
654
+ input_item_id: zigzag32
655
+ input_item_meta: zigzag32
656
+ ingredient_id: zigzag32
657
+ ingredient_meta: zigzag32
658
+ output_item_id: zigzag32
659
+ output_item_meta: zigzag32
660
+
661
+ PotionContainerChangeRecipes: []varint
662
+ input_item_id: zigzag32
663
+ ingredient_id: zigzag32
664
+ output_item_id: zigzag32
665
+
666
+ Recipes: []varint
667
+ type: zigzag32 =>
668
+ 0: shapeless #'ENTRY_SHAPELESS',
669
+ 1: shaped #'ENTRY_SHAPED',
670
+ 2: furnace # 'ENTRY_FURNACE',
671
+ # `furnace_with_metadata` is a recipe specifically used for furnace-type crafting stations. It is equal to
672
+ # `furnace`, except it has an input item with a specific metadata value, instead of any metadata value.
673
+ 3: furnace_with_metadata # 'ENTRY_FURNACE_DATA', // has metadata
674
+ 4: multi #'ENTRY_MULTI', //TODO
675
+ 5: shulker_box #'ENTRY_SHULKER_BOX', //TODO
676
+ 6: shapeless_chemistry #'ENTRY_SHAPELESS_CHEMISTRY', //TODO
677
+ 7: shaped_chemistry #'ENTRY_SHAPED_CHEMISTRY', //TODO
678
+ recipe: type?
679
+ if shapeless or shulker_box or shapeless_chemistry:
680
+ recipe_id: string
681
+ input: RecipeIngredient[]varint
682
+ output: ItemLegacy[]varint
683
+ uuid: uuid
684
+ block: string
685
+ priority: zigzag32
686
+ network_id: varint
687
+ if shaped or shaped_chemistry:
688
+ recipe_id: string
689
+ width: zigzag32
690
+ height: zigzag32
691
+ # 2D input array, size of width*height
692
+ input: []$width
693
+ _: RecipeIngredient[]$height
694
+ output: ItemLegacy[]varint
695
+ uuid: uuid
696
+ block: string
697
+ priority: zigzag32
698
+ network_id: varint
699
+ if furnace:
700
+ input_id: zigzag32
701
+ output: ItemLegacy
702
+ block: string
703
+ if furnace_with_metadata:
704
+ input_id: zigzag32
705
+ input_meta: zigzag32
706
+ output: ItemLegacy
707
+ block: string
708
+ if multi:
709
+ uuid: uuid
710
+ network_id: varint
711
+
712
+ SkinImage:
713
+ width: li32
714
+ height: li32
715
+ data: ByteArray
716
+
717
+ Skin:
718
+ skin_id: string
719
+ play_fab_id: string
720
+ skin_resource_pack: string
721
+ skin_data: SkinImage
722
+ animations: []li32
723
+ skin_image: SkinImage
724
+ animation_type: li32
725
+ animation_frames: lf32
726
+ expression_type: lf32
727
+ cape_data: SkinImage
728
+ geometry_data: string
729
+ geometry_data_version: string
730
+ animation_data: string
731
+
732
+ cape_id: string
733
+ full_skin_id: string
734
+ arm_size: string
735
+ skin_color: string
736
+ personal_pieces: []li32
737
+ piece_id: string
738
+ piece_type: string
739
+ pack_id: string
740
+ is_default_piece: bool
741
+ product_id: string
742
+ piece_tint_colors: []li32
743
+ piece_type: string
744
+ colors: string[]li32
745
+ premium: bool
746
+ persona: bool
747
+ # PersonaCapeOnClassicSkin specifies if the skin had a Persona cape (in-game skin creator cape) equipped
748
+ # on a classic skin.
749
+ cape_on_classic: bool
750
+ primary_user: bool
751
+
752
+ PlayerRecords:
753
+ type: u8 =>
754
+ 0: add
755
+ 1: remove
756
+ records_count: varint
757
+ records: []$records_count
758
+ _: type?
759
+ if add:
760
+ uuid: uuid
761
+ entity_unique_id: zigzag64
762
+ username: string
763
+ xbox_user_id: string
764
+ platform_chat_id: string
765
+ build_platform: li32
766
+ skin_data: Skin
767
+ is_teacher: bool
768
+ is_host: bool
769
+ if remove:
770
+ uuid: uuid
771
+ verified: type ?
772
+ if add: bool[]$records_count
773
+
774
+ Enchant:
775
+ id: u8
776
+ level: u8
777
+
778
+ EnchantOption:
779
+ cost: varint
780
+ slot_flags: li32
781
+ equip_enchants: Enchant[]varint
782
+ held_enchants: Enchant[]varint
783
+ self_enchants: Enchant[]varint
784
+ name: string
785
+ option_id: zigzag32
786
+
787
+ Action: zigzag32 =>
788
+ 0: start_break
789
+ 1: abort_break
790
+ 2: stop_break
791
+ 3: get_updated_block
792
+ 4: drop_item
793
+ 5: start_sleeping
794
+ 6: stop_sleeping
795
+ 7: respawn
796
+ 8: jump
797
+ 9: start_sprint
798
+ 10: stop_sprint
799
+ 11: start_sneak
800
+ 12: stop_sneak
801
+ 13: creative_player_destroy_block
802
+ # sent when spawning in a different dimension to tell the server we spawned
803
+ 14: dimension_change_ack
804
+ 15: start_glide
805
+ 16: stop_glide
806
+ 17: build_denied
807
+ 18: crack_break
808
+ 19: change_skin
809
+ # no longer used
810
+ 20: set_enchatnment_seed
811
+ 21: swimming
812
+ 22: stop_swimming
813
+ 23: start_spin_attack
814
+ 24: stop_spin_attack
815
+ 25: interact_block
816
+ 26: predict_break
817
+ 27: continue_break
818
+ 28: start_item_use_on
819
+ 29: stop_item_use_on
820
+
821
+ # Source and Destination point to the source slot from which Count of the item stack were taken and the
822
+ # destination slot to which this item was moved.
823
+ StackRequestSlotInfo:
824
+ # ContainerID is the ID of the container that the slot was in.
825
+ slot_type: ContainerSlotType
826
+ # Slot is the index of the slot within the container with the ContainerID above.
827
+ slot: u8
828
+ # StackNetworkID is the unique stack ID that the client assumes to be present in this slot. The server
829
+ # must check if these IDs match. If they do not match, servers should reject the stack request that the
830
+ # action holding this info was in.
831
+ stack_id: zigzag32
832
+
833
+ # ItemStackRequest is sent by the client to change item stacks in an inventory. It is essentially a
834
+ # replacement of the InventoryTransaction packet added in 1.16 for inventory specific actions, such as moving
835
+ # items around or crafting. The InventoryTransaction packet is still used for actions such as placing blocks
836
+ # and interacting with entities.
837
+ ItemStackRequest:
838
+ # RequestID is a unique ID for the request. This ID is used by the server to send a response for this
839
+ # specific request in the ItemStackResponse packet.
840
+ request_id: varint
841
+ actions: []varint
842
+ type_id: u8 =>
843
+ # TakeStackRequestAction is sent by the client to the server to take x amount of items from one slot in a
844
+ # container to the cursor.
845
+ - take
846
+ # PlaceStackRequestAction is sent by the client to the server to place x amount of items from one slot into
847
+ # another slot, such as when shift clicking an item in the inventory to move it around or when moving an item
848
+ # in the cursor into a slot.
849
+ - place
850
+ # SwapStackRequestAction is sent by the client to swap the item in its cursor with an item present in another
851
+ # container. The two item stacks swap places.
852
+ - swap
853
+ # DropStackRequestAction is sent by the client when it drops an item out of the inventory when it has its
854
+ # inventory opened. This action is not sent when a player drops an item out of the hotbar using the Q button
855
+ # (or the equivalent on mobile). The InventoryTransaction packet is still used for that action, regardless of
856
+ # whether the item stack network IDs are used or not.
857
+ - drop
858
+ # DestroyStackRequestAction is sent by the client when it destroys an item in creative mode by moving it
859
+ # back into the creative inventory.
860
+ - destroy
861
+ # ConsumeStackRequestAction is sent by the client when it uses an item to craft another item. The original
862
+ # item is 'consumed'.
863
+ - consume
864
+ # CreateStackRequestAction is sent by the client when an item is created through being used as part of a
865
+ # recipe. For example, when milk is used to craft a cake, the buckets are leftover. The buckets are moved to
866
+ # the slot sent by the client here.
867
+ # Note that before this is sent, an action for consuming all items in the crafting table/grid is sent. Items
868
+ # that are not fully consumed when used for a recipe should not be destroyed there, but instead, should be
869
+ # turned into their respective resulting items.
870
+ - create
871
+ # (as of 1.18.10) Not currently used
872
+ - place_in_container
873
+ # (as of 1.18.10) Not currently used
874
+ - take_out_container
875
+ # LabTableCombineStackRequestAction is sent by the client when it uses a lab table to combine item stacks.
876
+ - lab_table_combine
877
+ # BeaconPaymentStackRequestAction is sent by the client when it submits an item to enable effects from a
878
+ # beacon. These items will have been moved into the beacon item slot in advance.
879
+ - beacon_payment
880
+ # MineBlockStackRequestAction is sent by the client when it breaks a block.
881
+ - mine_block
882
+ # CraftRecipeStackRequestAction is sent by the client the moment it begins crafting an item. This is the
883
+ # first action sent, before the Consume and Create item stack request actions.
884
+ # This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
885
+ # crafting, where the old item is consumed.
886
+ - craft_recipe
887
+ # AutoCraftRecipeStackRequestAction is sent by the client similarly to the CraftRecipeStackRequestAction. The
888
+ # only difference is that the recipe is automatically created and crafted by shift clicking the recipe book.
889
+ - craft_recipe_auto #recipe book?
890
+ # CraftCreativeStackRequestAction is sent by the client when it takes an item out fo the creative inventory.
891
+ # The item is thus not really crafted, but instantly created.
892
+ - craft_creative
893
+ # CraftRecipeOptionalStackRequestAction is sent when using an anvil. When this action is sent, the
894
+ # CustomNames field in the respective stack request is non-empty and contains the name of the item created
895
+ # using the anvil.
896
+ - optional
897
+ # CraftGrindstoneRecipeStackRequestAction is sent when a grindstone recipe is crafted. It contains the RecipeNetworkID
898
+ # to identify the recipe crafted, and the cost for crafting the recipe.
899
+ - craft_grindstone_request
900
+ # CraftLoomRecipeStackRequestAction is sent when a loom recipe is crafted. It simply contains the
901
+ # pattern identifier to figure out what pattern is meant to be applied to the item.
902
+ - craft_loom_request
903
+ # CraftNonImplementedStackRequestAction is an action sent for inventory actions that aren't yet implemented
904
+ # in the new system. These include, for example, anvils.
905
+ - non_implemented # anvils aren't fully implemented yet
906
+ # CraftResultsDeprecatedStackRequestAction is an additional, deprecated packet sent by the client after
907
+ # crafting. It holds the final results and the amount of times the recipe was crafted. It shouldn't be used.
908
+ # This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
909
+ # crafting, where the old item is consumed.
910
+ - results_deprecated
911
+ _: type_id ?
912
+ if take or place:
913
+ count: u8
914
+ source: StackRequestSlotInfo
915
+ destination: StackRequestSlotInfo
916
+ if swap:
917
+ # Source and Destination point to the source slot from which Count of the item stack were taken and the
918
+ # destination slot to which this item was moved.
919
+ source: StackRequestSlotInfo
920
+ destination: StackRequestSlotInfo
921
+ if drop:
922
+ # Count is the count of the item in the source slot that was taken towards the destination slot.
923
+ count: u8
924
+ # Source is the source slot from which items were dropped to the ground.
925
+ source: StackRequestSlotInfo
926
+ # Randomly seems to be set to false in most cases. I'm not entirely sure what this does, but this is what
927
+ # vanilla calls this field.
928
+ randomly: bool
929
+ if destroy or consume:
930
+ # Count is the count of the item in the source slot that was destroyed.
931
+ count: u8
932
+ # Source is the source slot from which items came that were destroyed by moving them into the creative
933
+ # inventory.
934
+ source: StackRequestSlotInfo
935
+ if create:
936
+ # ResultsSlot is the slot in the inventory in which the results of the crafting ingredients are to be
937
+ # placed.
938
+ result_slot_id: u8
939
+ if beacon_payment:
940
+ # PrimaryEffect and SecondaryEffect are the effects that were selected from the beacon.
941
+ primary_effect: zigzag32
942
+ secondary_effect: zigzag32
943
+ if mine_block:
944
+ # // Unknown1 ... TODO: Find out what this is for
945
+ unknown1: zigzag32
946
+ # PredictedDurability is the durability of the item that the client assumes to be present at the time
947
+ predicted_durability: zigzag32
948
+ # StackNetworkID is the unique stack ID that the client assumes to be present at the time. The server
949
+ # must check if these IDs match. If they do not match, servers should reject the stack request that the
950
+ # action holding this info was in.
951
+ network_id: zigzag32
952
+ if craft_recipe or craft_recipe_auto:
953
+ # RecipeNetworkID is the network ID of the recipe that is about to be crafted. This network ID matches
954
+ # one of the recipes sent in the CraftingData packet, where each of the recipes have a RecipeNetworkID as
955
+ # of 1.16.
956
+ recipe_network_id: varint
957
+ if craft_creative:
958
+ # The stack ID of the creative item that is being created. This is one of the
959
+ # creative item stack IDs sent in the CreativeContent packet.
960
+ item_id: varint
961
+ if optional:
962
+ # For the cartography table, if a certain MULTI recipe is being called, this points to the network ID that was assigned.
963
+ recipe_network_id: varint
964
+ # Most likely the index in the request's filter strings that this action is using
965
+ filtered_string_index: li32
966
+ if craft_grindstone_request:
967
+ # RecipeNetworkID is the network ID of the recipe that is about to be crafted. This network ID matches
968
+ # one of the recipes sent in the CraftingData packet, where each of the recipes have a RecipeNetworkID as
969
+ recipe_network_id: varint
970
+ # Cost is the cost of the recipe that was crafted.
971
+ cost: varint
972
+ if craft_loom_request:
973
+ # Pattern is the pattern identifier for the loom recipe.
974
+ pattern: string
975
+ if non_implemented: void
976
+ if results_deprecated:
977
+ result_items: ItemLegacy[]varint
978
+ times_crafted: u8
979
+ # CustomNames is a list of custom names involved in the request. This is typically filled with one string
980
+ # when an anvil is used.
981
+ # * Used for the server to determine which strings should be filtered. Used in anvils to verify a renamed item.
982
+ custom_names: string[]varint
983
+ # FilterCause represents the cause of any potential filtering. This is one of the constants above.
984
+ cause: li32 =>
985
+ - chat_public
986
+ - chat_whisper
987
+ - sign_text
988
+ - anvil_text
989
+ - book_and_quill_text
990
+ - command_block_text
991
+ - block_actor_data_text
992
+ - join_event_text
993
+ - leave_event_text
994
+ - slash_command_chat
995
+ - cartography_text
996
+
997
+
998
+ # ItemStackResponse is a response to an individual ItemStackRequest.
999
+ ItemStackResponses: []varint
1000
+ # Status specifies if the request with the RequestID below was successful. If this is the case, the
1001
+ # ContainerInfo below will have information on what slots ended up changing. If not, the container info
1002
+ # will be empty.
1003
+ # A non-0 status means an error occurred and will result in the action being reverted.
1004
+ status: u8 =>
1005
+ 0: ok
1006
+ 1: error
1007
+ # RequestID is the unique ID of the request that this response is in reaction to. If rejected, the client
1008
+ # will undo the actions from the request with this ID.
1009
+ request_id: varint
1010
+ _: status ?
1011
+ if ok:
1012
+ # ContainerInfo holds information on the containers that had their contents changed as a result of the
1013
+ # request.
1014
+ containers: []varint
1015
+ # ContainerID is the container ID of the container that the slots that follow are in. For the main
1016
+ # inventory, this value seems to be 0x1b. For the cursor, this value seems to be 0x3a. For the crafting
1017
+ # grid, this value seems to be 0x0d.
1018
+ # * actually, this is ContainerSlotType - used by the inventory system that specifies the type of slot
1019
+ slot_type: ContainerSlotType
1020
+ # SlotInfo holds information on what item stack should be present in specific slots in the container.
1021
+ slots: []varint
1022
+ # Slot and HotbarSlot seem to be the same value every time: The slot that was actually changed. I'm not
1023
+ # sure if these slots ever differ.
1024
+ slot: u8
1025
+ hotbar_slot: u8
1026
+ # Count is the total count of the item stack. This count will be shown client-side after the response is
1027
+ # sent to the client.
1028
+ count: u8
1029
+ # StackNetworkID is the network ID of the new stack at a specific slot.
1030
+ item_stack_id: varint
1031
+ # CustomName is the custom name of the item stack. It is used in relation to text filtering.
1032
+ custom_name: string
1033
+ # DurabilityCorrection is the current durability of the item stack. This durability will be shown
1034
+ # client-side after the response is sent to the client.
1035
+ durability_correction: zigzag32
1036
+
1037
+
1038
+ ItemComponentList: []varint
1039
+ # Name is the name of the item, which is a name like 'minecraft:stick'.
1040
+ name: string
1041
+ # Data is a map containing the components and properties of the item.
1042
+ nbt: nbt
1043
+
1044
+ CommandOrigin:
1045
+ # Origin is one of the values above that specifies the origin of the command. The origin may change,
1046
+ # depending on what part of the client actually called the command. The command may be issued by a
1047
+ # websocket server, for example.
1048
+ type: varint =>
1049
+ 0: player
1050
+ 1: block
1051
+ 2: minecart_block
1052
+ 3: dev_console
1053
+ 4: test
1054
+ 5: automation_player
1055
+ 6: client_automation
1056
+ 7: dedicated_server
1057
+ 8: entity
1058
+ 9: virtual
1059
+ 10: game_argument
1060
+ 11: entity_server
1061
+ 12: precompiled
1062
+ 13: game_director_entity_server # ?
1063
+ 14: script
1064
+ 15: executor
1065
+
1066
+ # UUID is the UUID of the command called. This UUID is a bit odd as it is not specified by the server. It
1067
+ # is not clear what exactly this UUID is meant to identify, but it is unique for each command called.
1068
+ uuid: uuid
1069
+ # RequestID is an ID that identifies the request of the client. The server should send a CommandOrigin
1070
+ # with the same request ID to ensure it can be matched with the request by the caller of the command.
1071
+ # This is especially important for websocket servers and it seems that this field is only non-empty for
1072
+ # these websocket servers.
1073
+ request_id: string
1074
+ # PlayerUniqueID is an ID that identifies the player, the same as the one found in the AdventureSettings
1075
+ # packet. Filling it out with 0 seems to work.
1076
+ # PlayerUniqueID is only written if Origin is CommandOriginDevConsole or CommandOriginTest.
1077
+ player_entity_id: type?
1078
+ if dev_console or test:
1079
+ player_entity_id: zigzag64
1080
+
1081
+ # MapTrackedObject is an object on a map that is 'tracked' by the client, such as an entity or a block. This
1082
+ # object may move, which is handled client-side.
1083
+ TrackedObject:
1084
+ # Type is the type of the tracked object. It is either MapObjectTypeEntity or MapObjectTypeBlock.
1085
+ type: li32 =>
1086
+ 0: entity
1087
+ 1: block
1088
+ # EntityUniqueID is the unique ID of the entity, if the tracked object was an entity. It needs not to be
1089
+ # filled out if Type is not MapObjectTypeEntity.
1090
+ entity_unique_id: type ?
1091
+ if entity: zigzag64
1092
+ # BlockPosition is the position of the block, if the tracked object was a block. It needs not to be
1093
+ # filled out if Type is not MapObjectTypeBlock.
1094
+ block_position: type ?
1095
+ if block: BlockCoordinates
1096
+
1097
+ # MapDecoration is a fixed decoration on a map: Its position or other properties do not change automatically
1098
+ # client-side.
1099
+ MapDecoration:
1100
+ type: u8
1101
+ # Rotation is the rotation of the map decoration. It is byte due to the 16 fixed directions that the
1102
+ # map decoration may face.
1103
+ rotation: u8
1104
+ # X is the offset on the X axis in pixels of the decoration.
1105
+ x: u8
1106
+ # Y is the offset on the Y axis in pixels of the decoration.
1107
+ y: u8
1108
+ # Label is the name of the map decoration. This name may be of any value.
1109
+ label: string
1110
+ # Colour is the colour of the map decoration. Some map decoration types have a specific colour set
1111
+ # automatically, whereas others may be changed.
1112
+ color_abgr: varint
1113
+
1114
+
1115
+ StructureBlockSettings:
1116
+ # PaletteName is the name of the palette used in the structure. Currently, it seems that this field is
1117
+ # always 'default'.
1118
+ palette_name: string
1119
+ # IgnoreEntities specifies if the structure should ignore entities or include them. If set to false,
1120
+ # entities will also show up in the exported structure.
1121
+ ignore_entities: bool
1122
+ # IgnoreBlocks specifies if the structure should ignore blocks or include them. If set to false, blocks
1123
+ # will show up in the exported structure.
1124
+ ignore_blocks: bool
1125
+ non_ticking_players_and_ticking_areas: bool
1126
+ # Size is the size of the area that is about to be exported. The area exported will start at the
1127
+ # Position + Offset, and will extend as far as Size specifies.
1128
+ size: BlockCoordinates
1129
+ # Offset is the offset position that was set in the structure block. The area exported is offset by this
1130
+ # position.
1131
+ # **TODO**: This will be renamed to offset soon
1132
+ structure_offset: BlockCoordinates
1133
+ # LastEditingPlayerUniqueID is the unique ID of the player that last edited the structure block that
1134
+ # these settings concern.
1135
+ last_editing_player_unique_id: zigzag64
1136
+ # Rotation is the rotation that the structure block should obtain. See the constants above for available
1137
+ # options.
1138
+ rotation: u8 =>
1139
+ 0: none
1140
+ 1: 90_deg
1141
+ 2: 180_deg
1142
+ 3: 270_deg
1143
+ # Mirror specifies the way the structure should be mirrored. It is either no mirror at all, mirror on the
1144
+ # x/z axis or both.
1145
+ mirror: u8 =>
1146
+ 0: none
1147
+ 1: x_axis
1148
+ 2: z_axis
1149
+ 3: both_axes
1150
+ animation_mode: u8 =>
1151
+ 0: none
1152
+ 1: layers
1153
+ 2: blocks
1154
+ # How long the duration for this animation is
1155
+ animation_duration: lf32
1156
+ # Integrity is usually 1, but may be set to a number between 0 and 1 to omit blocks randomly, using
1157
+ # the Seed that follows.
1158
+ integrity: lf32
1159
+ # Seed is the seed used to omit blocks if Integrity is not equal to one. If the Seed is 0, a random
1160
+ # seed is selected to omit blocks.
1161
+ seed: lu32
1162
+ # Pivot is the pivot around which the structure may be rotated.
1163
+ pivot: vec3f
1164
+
1165
+ # EducationSharedResourceURI is an education edition feature that is used for transmitting
1166
+ # education resource settings to clients. It contains a button name and a link URL.
1167
+ EducationSharedResourceURI:
1168
+ # ButtonName is the button name of the resource URI.
1169
+ button_name: string
1170
+ # LinkURI is the link URI for the resource URI.
1171
+ link_uri: string
1172
+
1173
+ EducationExternalLinkSettings:
1174
+ # URL is the external link URL.
1175
+ url: string
1176
+ # DisplayName is the display name in game.
1177
+ display_name: string
1178
+
1179
+ BlockUpdate:
1180
+ position: BlockCoordinates
1181
+ runtime_id: varint
1182
+ flags: varint
1183
+ # EntityUniqueID is the unique ID of the falling block entity that the block transitions to or that the
1184
+ # entity transitions from.
1185
+ # Note that for both possible values for TransitionType, the EntityUniqueID should point to the falling
1186
+ # block entity involved.
1187
+ entity_unique_id: zigzag64
1188
+ # TransitionType is the type of the transition that happened. It is either BlockToEntityTransition, when
1189
+ # a block placed becomes a falling entity, or EntityToBlockTransition, when a falling entity hits the
1190
+ # ground and becomes a solid block again.
1191
+ transition_type: varint => TransitionType
1192
+
1193
+ TransitionType: =>
1194
+ # For falling sand, when a sand turns to an entity
1195
+ 0: entity
1196
+ # When sand turns back to a new block
1197
+ 1: create
1198
+ 2: destroy
1199
+
1200
+ MaterialReducer:
1201
+ mix: zigzag32
1202
+ items:
1203
+ network_id: zigzag32
1204
+ count: zigzag32
1205
+
1206
+ ## Permissions
1207
+
1208
+ # The permission level of a player, for example whether they are an Server Operator or not.
1209
+ PermissionLevel: u8 =>
1210
+ 0: visitor
1211
+ 1: member
1212
+ 2: operator
1213
+ 3: custom
1214
+
1215
+ # The command permission level, for example if being run by a Player, an Op, or a Command Block.
1216
+ CommandPermissionLevel: u8 =>
1217
+ 0: normal
1218
+ 1: operator
1219
+ 2: automation
1220
+ 3: host
1221
+ 4: owner
1222
+ 5: internal
1223
+
1224
+ # The command permission level, for example if being run by a Player, an Op, or a Command Block.
1225
+ CommandPermissionLevelVarint: u8 =>
1226
+ 0: normal
1227
+ 1: operator
1228
+ 2: automation
1229
+ 3: host
1230
+ 4: owner
1231
+ 5: internal
1232
+
1233
+ # List of Window IDs. When a new container is opened (container_open), a new sequential Window ID is created.
1234
+ # Below window IDs are hard-coded and created when the game starts and the server does not
1235
+ # send a `container_open` for them.
1236
+ WindowID: i8 =>
1237
+ -100: drop_contents
1238
+ -24: beacon
1239
+ -23: trading_output
1240
+ -22: trading_use_inputs
1241
+ -21: trading_input_2
1242
+ -20: trading_input_1
1243
+ -17: enchant_output
1244
+ -16: enchant_material
1245
+ -15: enchant_input
1246
+ -13: anvil_output
1247
+ -12: anvil_result
1248
+ -11: anvil_material
1249
+ -10: container_input
1250
+ -5: crafting_use_ingredient
1251
+ -4: crafting_result
1252
+ -3: crafting_remove_ingredient
1253
+ -2: crafting_add_ingredient
1254
+ -1: none
1255
+ 0: inventory
1256
+ 1: first
1257
+ 100: last
1258
+ 119: offhand
1259
+ 120: armor
1260
+ 121: creative
1261
+ 122: hotbar
1262
+ 123: fixed_inventory
1263
+ 124: ui
1264
+
1265
+ WindowIDVarint: varint =>
1266
+ -100: drop_contents
1267
+ -24: beacon
1268
+ -23: trading_output
1269
+ -22: trading_use_inputs
1270
+ -21: trading_input_2
1271
+ -20: trading_input_1
1272
+ -17: enchant_output
1273
+ -16: enchant_material
1274
+ -15: enchant_input
1275
+ -13: anvil_output
1276
+ -12: anvil_result
1277
+ -11: anvil_material
1278
+ -10: container_input
1279
+ -5: crafting_use_ingredient
1280
+ -4: crafting_result
1281
+ -3: crafting_remove_ingredient
1282
+ -2: crafting_add_ingredient
1283
+ -1: none
1284
+ 0: inventory
1285
+ 1: first
1286
+ 100: last
1287
+ 119: offhand
1288
+ 120: armor
1289
+ 121: creative
1290
+ 122: hotbar
1291
+ 123: fixed_inventory
1292
+ 124: ui
1293
+
1294
+ WindowType: i8 =>
1295
+ -9: none
1296
+ -1: inventory
1297
+ 0: container
1298
+ 1: workbench
1299
+ 2: furnace
1300
+ 3: enchantment
1301
+ 4: brewing_stand
1302
+ 5: anvil
1303
+ 6: dispenser
1304
+ 7: dropper
1305
+ 8: hopper
1306
+ 9: cauldron
1307
+ 10: minecart_chest
1308
+ 11: minecart_hopper
1309
+ 12: horse
1310
+ 13: beacon
1311
+ 14: structure_editor
1312
+ 15: trading
1313
+ 16: command_block
1314
+ 17: jukebox
1315
+ 18: armor
1316
+ 19: hand
1317
+ 20: compound_creator
1318
+ 21: element_constructor
1319
+ 22: material_reducer
1320
+ 23: lab_table
1321
+ 24: loom
1322
+ 25: lectern
1323
+ 26: grindstone
1324
+ 27: blast_furnace
1325
+ 28: smoker
1326
+ 29: stonecutter
1327
+ 30: cartography
1328
+ 31: hud
1329
+ 32: jigsaw_editor
1330
+ 33: smithing_table
1331
+
1332
+ # Used in inventory transactions.
1333
+ ContainerSlotType: u8 =>
1334
+ - anvil_input
1335
+ - anvil_material
1336
+ - anvil_result
1337
+ - smithing_table_input
1338
+ - smithing_table_material
1339
+ - smithing_table_result
1340
+ - armor
1341
+ - container
1342
+ - beacon_payment
1343
+ - brewing_input
1344
+ - brewing_result
1345
+ - brewing_fuel
1346
+ - hotbar_and_inventory
1347
+ - crafting_input
1348
+ - crafting_output
1349
+ - recipe_construction
1350
+ - recipe_nature
1351
+ - recipe_items
1352
+ - recipe_search
1353
+ - recipe_search_bar
1354
+ - recipe_equipment
1355
+ - enchanting_input
1356
+ - enchanting_lapis
1357
+ - furnace_fuel
1358
+ - furnace_ingredient
1359
+ - furnace_output
1360
+ - horse_equip
1361
+ - hotbar
1362
+ - inventory
1363
+ - shulker
1364
+ - trade_ingredient1
1365
+ - trade_ingredient2
1366
+ - trade_result
1367
+ - offhand
1368
+ - compcreate_input
1369
+ - compcreate_output
1370
+ - elemconstruct_output
1371
+ - matreduce_input
1372
+ - matreduce_output
1373
+ - labtable_input
1374
+ - loom_input
1375
+ - loom_dye
1376
+ - loom_material
1377
+ - loom_result
1378
+ - blast_furnace_ingredient
1379
+ - smoker_ingredient
1380
+ - trade2_ingredient1
1381
+ - trade2_ingredient2
1382
+ - trade2_result
1383
+ - grindstone_input
1384
+ - grindstone_additional
1385
+ - grindstone_result
1386
+ - stonecutter_input
1387
+ - stonecutter_result
1388
+ - cartography_input
1389
+ - cartography_additional
1390
+ - cartography_result
1391
+ - barrel
1392
+ - cursor
1393
+ - creative_output
1394
+
1395
+ SoundType: varint =>
1396
+ - ItemUseOn
1397
+ - Hit
1398
+ - Step
1399
+ - Fly
1400
+ - Jump
1401
+ - Break
1402
+ - Place
1403
+ - HeavyStep
1404
+ - Gallop
1405
+ - Fall
1406
+ - Ambient
1407
+ - AmbientBaby
1408
+ - AmbientInWater
1409
+ - Breathe
1410
+ - Death
1411
+ - DeathInWater
1412
+ - DeathToZombie
1413
+ - Hurt
1414
+ - HurtInWater
1415
+ - Mad
1416
+ - Boost
1417
+ - Bow
1418
+ - SquishBig
1419
+ - SquishSmall
1420
+ - FallBig
1421
+ - FallSmall
1422
+ - Splash
1423
+ - Fizz
1424
+ - Flap
1425
+ - Swim
1426
+ - Drink
1427
+ - Eat
1428
+ - Takeoff
1429
+ - Shake
1430
+ - Plop
1431
+ - Land
1432
+ - Saddle
1433
+ - Armor
1434
+ - MobArmorStandPlace
1435
+ - AddChest
1436
+ - Throw
1437
+ - Attack
1438
+ - AttackNoDamage
1439
+ - AttackStrong
1440
+ - Warn
1441
+ - Shear
1442
+ - Milk
1443
+ - Thunder
1444
+ - Explode
1445
+ - Fire
1446
+ - Ignite
1447
+ - Fuse
1448
+ - Stare
1449
+ - Spawn
1450
+ - Shoot
1451
+ - BreakBlock
1452
+ - Launch
1453
+ - Blast
1454
+ - LargeBlast
1455
+ - Twinkle
1456
+ - Remedy
1457
+ - Infect
1458
+ - LevelUp
1459
+ - BowHit
1460
+ - BulletHit
1461
+ - ExtinguishFire
1462
+ - ItemFizz
1463
+ - ChestOpen
1464
+ - ChestClosed
1465
+ - ShulkerBoxOpen
1466
+ - ShulkerBoxClosed
1467
+ - EnderChestOpen
1468
+ - EnderChestClosed
1469
+ - PowerOn
1470
+ - PowerOff
1471
+ - Attach
1472
+ - Detach
1473
+ - Deny
1474
+ - Tripod
1475
+ - Pop
1476
+ - DropSlot
1477
+ - Note
1478
+ - Thorns
1479
+ - PistonIn
1480
+ - PistonOut
1481
+ - Portal
1482
+ - Water
1483
+ - LavaPop
1484
+ - Lava
1485
+ - Burp
1486
+ - BucketFillWater
1487
+ - BucketFillLava
1488
+ - BucketEmptyWater
1489
+ - BucketEmptyLava
1490
+ - ArmorEquipChain
1491
+ - ArmorEquipDiamond
1492
+ - ArmorEquipGeneric
1493
+ - ArmorEquipGold
1494
+ - ArmorEquipIron
1495
+ - ArmorEquipLeather
1496
+ - ArmorEquipElytra
1497
+ - Record13
1498
+ - RecordCat
1499
+ - RecordBlocks
1500
+ - RecordChirp
1501
+ - RecordFar
1502
+ - RecordMall
1503
+ - RecordMellohi
1504
+ - RecordStal
1505
+ - RecordStrad
1506
+ - RecordWard
1507
+ - Record11
1508
+ - RecordWait
1509
+ - StopRecord
1510
+ - Flop
1511
+ - GuardianCurse
1512
+ - MobWarning
1513
+ - MobWarningBaby
1514
+ - Teleport
1515
+ - ShulkerOpen
1516
+ - ShulkerClose
1517
+ - Haggle
1518
+ - HaggleYes
1519
+ - HaggleNo
1520
+ - HaggleIdle
1521
+ - ChorusGrow
1522
+ - ChorusDeath
1523
+ - Glass
1524
+ - PotionBrewed
1525
+ - CastSpell
1526
+ - PrepareAttackSpell
1527
+ - PrepareSummon
1528
+ - PrepareWololo
1529
+ - Fang
1530
+ - Charge
1531
+ - CameraTakePicture
1532
+ - LeashKnotPlace
1533
+ - LeashKnotBreak
1534
+ - AmbientGrowl
1535
+ - AmbientWhine
1536
+ - AmbientPant
1537
+ - AmbientPurr
1538
+ - AmbientPurreow
1539
+ - DeathMinVolume
1540
+ - DeathMidVolume
1541
+ - ImitateBlaze
1542
+ - ImitateCaveSpider
1543
+ - ImitateCreeper
1544
+ - ImitateElderGuardian
1545
+ - ImitateEnderDragon
1546
+ - ImitateEnderman
1547
+ - ImitateEndermite
1548
+ - ImitateEvocationIllager
1549
+ - ImitateGhast
1550
+ - ImitateHusk
1551
+ - ImitateIllusionIllager
1552
+ - ImitateMagmaCube
1553
+ - ImitatePolarBear
1554
+ - ImitateShulker
1555
+ - ImitateSilverfish
1556
+ - ImitateSkeleton
1557
+ - ImitateSlime
1558
+ - ImitateSpider
1559
+ - ImitateStray
1560
+ - ImitateVex
1561
+ - ImitateVindicationIllager
1562
+ - ImitateWitch
1563
+ - ImitateWither
1564
+ - ImitateWitherSkeleton
1565
+ - ImitateWolf
1566
+ - ImitateZombie
1567
+ - ImitateZombiePigman
1568
+ - ImitateZombieVillager
1569
+ - EnderEyePlaced
1570
+ - EndPortalCreated
1571
+ - AnvilUse
1572
+ - BottleDragonBreath
1573
+ - PortalTravel
1574
+ - TridentHit
1575
+ - TridentReturn
1576
+ - TridentRiptide1
1577
+ - TridentRiptide2
1578
+ - TridentRiptide3
1579
+ - TridentThrow
1580
+ - TridentThunder
1581
+ - TridentHitGround
1582
+ - Default
1583
+ - FletchingTableUse
1584
+ - ElemConstructOpen
1585
+ - IceBombHit
1586
+ - BalloonPop
1587
+ - LtReactionIceBomb
1588
+ - LtReactionBleach
1589
+ - LtReactionElephantToothpaste
1590
+ - LtReactionElephantToothpaste2
1591
+ - LtReactionGlowStick
1592
+ - LtReactionGlowStick2
1593
+ - LtReactionLuminol
1594
+ - LtReactionSalt
1595
+ - LtReactionFertilizer
1596
+ - LtReactionFireball
1597
+ - LtReactionMagnesiumSalt
1598
+ - LtReactionMiscFire
1599
+ - LtReactionFire
1600
+ - LtReactionMiscExplosion
1601
+ - LtReactionMiscMystical
1602
+ - LtReactionMiscMystical2
1603
+ - LtReactionProduct
1604
+ - SparklerUse
1605
+ - GlowStickUse
1606
+ - SparklerActive
1607
+ - ConvertToDrowned
1608
+ - BucketFillFish
1609
+ - BucketEmptyFish
1610
+ - BubbleColumnUpwards
1611
+ - BubbleColumnDownwards
1612
+ - BubblePop
1613
+ - BubbleUpInside
1614
+ - BubbleDownInside
1615
+ - HurtBaby
1616
+ - DeathBaby
1617
+ - StepBaby
1618
+ - SpawnBaby
1619
+ - Born
1620
+ - TurtleEggBreak
1621
+ - TurtleEggCrack
1622
+ - TurtleEggHatched
1623
+ - LayEgg
1624
+ - TurtleEggAttacked
1625
+ - BeaconActivate
1626
+ - BeaconAmbient
1627
+ - BeaconDeactivate
1628
+ - BeaconPower
1629
+ - ConduitActivate
1630
+ - ConduitAmbient
1631
+ - ConduitAttack
1632
+ - ConduitDeactivate
1633
+ - ConduitShort
1634
+ - Swoop
1635
+ - BambooSaplingPlace
1636
+ - PreSneeze
1637
+ - Sneeze
1638
+ - AmbientTame
1639
+ - Scared
1640
+ - ScaffoldingClimb
1641
+ - CrossbowLoadingStart
1642
+ - CrossbowLoadingMiddle
1643
+ - CrossbowLoadingEnd
1644
+ - CrossbowShoot
1645
+ - CrossbowQuickChargeStart
1646
+ - CrossbowQuickChargeMiddle
1647
+ - CrossbowQuickChargeEnd
1648
+ - AmbientAggressive
1649
+ - AmbientWorried
1650
+ - CantBreed
1651
+ - ShieldBlock
1652
+ - LecternBookPlace
1653
+ - GrindstoneUse
1654
+ - Bell
1655
+ - CampfireCrackle
1656
+ - Roar
1657
+ - Stun
1658
+ - SweetBerryBushHurt
1659
+ - SweetBerryBushPick
1660
+ - CartographyTableUse
1661
+ - StonecutterUse
1662
+ - ComposterEmpty
1663
+ - ComposterFill
1664
+ - ComposterFillLayer
1665
+ - ComposterReady
1666
+ - BarrelOpen
1667
+ - BarrelClose
1668
+ - RaidHorn
1669
+ - LoomUse
1670
+ - AmbientInRaid
1671
+ - UicartographyTableUse
1672
+ - UistonecutterUse
1673
+ - UiloomUse
1674
+ - SmokerUse
1675
+ - BlastFurnaceUse
1676
+ - SmithingTableUse
1677
+ - Screech
1678
+ - Sleep
1679
+ - FurnaceUse
1680
+ - MooshroomConvert
1681
+ - MilkSuspiciously
1682
+ - Celebrate
1683
+ - JumpPrevent
1684
+ - AmbientPollinate
1685
+ - BeehiveDrip
1686
+ - BeehiveEnter
1687
+ - BeehiveExit
1688
+ - BeehiveWork
1689
+ - BeehiveShear
1690
+ - HoneybottleDrink
1691
+ - AmbientCave
1692
+ - Retreat
1693
+ - ConvertToZombified
1694
+ - Admire
1695
+ - StepLava
1696
+ - Tempt
1697
+ - Panic
1698
+ - Angry
1699
+ - AmbientMoodWarpedForest
1700
+ - AmbientMoodSoulsandValley
1701
+ - AmbientMoodNetherWastes
1702
+ - AmbientMoodBasaltDeltas
1703
+ - AmbientMoodCrimsonForest
1704
+ - RespawnAnchorCharge
1705
+ - RespawnAnchorDeplete
1706
+ - RespawnAnchorSetSpawn
1707
+ - RespawnAnchorAmbient
1708
+ - SoulEscapeQuiet
1709
+ - SoulEscapeLoud
1710
+ - RecordPigstep
1711
+ - LinkCompassToLodestone
1712
+ - UseSmithingTable
1713
+ - EquipNetherite
1714
+ - AmbientLoopWarpedForest
1715
+ - AmbientLoopSoulsandValley
1716
+ - AmbientLoopNetherWastes
1717
+ - AmbientLoopBasaltDeltas
1718
+ - AmbientLoopCrimsonForest
1719
+ - AmbientAdditionWarpedForest
1720
+ - AmbientAdditionSoulsandValley
1721
+ - AmbientAdditionNetherWastes
1722
+ - AmbientAdditionBasaltDeltas
1723
+ - AmbientAdditionCrimsonForest
1724
+ - SculkSensorPowerOn
1725
+ - SculkSensorPowerOff
1726
+ - BucketFillPowderSnow
1727
+ - BucketEmptyPowderSnow
1728
+ - PointedDripstoneCauldronDripWater
1729
+ - PointedDripstoneCauldronDripLava
1730
+ - PointedDripstoneDripWater
1731
+ - PointedDripstoneDripLava
1732
+ - CaveVinesPickBerries
1733
+ - BigDripleafTiltDown
1734
+ - BigDripleafTiltUp
1735
+ - CopperWaxOn
1736
+ - CopperWaxOff
1737
+ - Scrape
1738
+ - PlayerHurtDrown
1739
+ - PlayerHurtOnFire
1740
+ - PlayerHurtFreeze
1741
+ - UseSpyglass
1742
+ - StopUsingSpyglass
1743
+ - AmethystBlockChime
1744
+ - AmbientScreamer
1745
+ - HurtScreamer
1746
+ - DeathScreamer
1747
+ - MilkScreamer
1748
+ - JumpToBlock
1749
+ - PreRam
1750
+ - PreRamScreamer
1751
+ - RamImpact
1752
+ - RamImpactScreamer
1753
+ - SquidInkSquirt
1754
+ - GlowSquidInkSquirt
1755
+ - ConvertToStray
1756
+ - CakeAddCandle
1757
+ - ExtinguishCandle
1758
+ - AmbientCandle
1759
+ - BlockClick
1760
+ - BlockClickFail
1761
+ - SculkCatalystBloom
1762
+ - SculkShriekerShriek
1763
+ - WardenNearbyClose
1764
+ - WardenNearbyCloser
1765
+ - WardenNearbyClosest
1766
+ - WardenSlightlyAngry
1767
+ - RecordOtherside
1768
+ - Tongue
1769
+ - CrackIronGolem
1770
+ - RepairIronGolem
1771
+ - Listening
1772
+ - Heartbeat
1773
+ - HornBreak
1774
+ - SculkPlace
1775
+ - SculkSpread
1776
+ - SculkCharge
1777
+ - SculkSensorPlace
1778
+ - SculkShriekerPlace
1779
+ - goat_call_0
1780
+ - goat_call_1
1781
+ - goat_call_2
1782
+ - goat_call_3
1783
+ - goat_call_4
1784
+ - goat_call_5
1785
+ - goat_call_6
1786
+ - goat_call_7
1787
+ - goat_call_8
1788
+ - goat_call_9
1789
+ - goat_harmony_0
1790
+ - goat_harmony_1
1791
+ - goat_harmony_2
1792
+ - goat_harmony_3
1793
+ - goat_harmony_4
1794
+ - goat_harmony_5
1795
+ - goat_harmony_6
1796
+ - goat_harmony_7
1797
+ - goat_harmony_8
1798
+ - goat_harmony_9
1799
+ - goat_melody_0
1800
+ - goat_melody_1
1801
+ - goat_melody_2
1802
+ - goat_melody_3
1803
+ - goat_melody_4
1804
+ - goat_melody_5
1805
+ - goat_melody_6
1806
+ - goat_melody_7
1807
+ - goat_melody_8
1808
+ - goat_melody_9
1809
+ - goat_bass_0
1810
+ - goat_bass_1
1811
+ - goat_bass_2
1812
+ - goat_bass_3
1813
+ - goat_bass_4
1814
+ - goat_bass_5
1815
+ - goat_bass_6
1816
+ - goat_bass_7
1817
+ - goat_bass_8
1818
+ - goat_bass_9
1819
+ - _
1820
+ - _
1821
+ - _
1822
+ - ImitateWarden
1823
+ - ListeningAngry
1824
+ - ItemGiven
1825
+ - ItemTaken
1826
+ - Disappeared
1827
+ - Reappeared
1828
+ - DrinkMilk
1829
+ - FrogspawnHatched
1830
+ - LaySpawn
1831
+ - FrogspawnBreak
1832
+ - SonicBoom
1833
+ - SonicCharge
1834
+ - SoundeventItemThrown
1835
+ - Record5
1836
+ - ConvertToFrog
1837
+ - RecordPlaying
1838
+ - DrinkMilk
1839
+ - RecordPlaying
1840
+ - EnchantingTableUse
1841
+
1842
+ # TODO: remove?
1843
+ LegacyEntityType: li32 =>
1844
+ 10: chicken
1845
+ 11: cow
1846
+ 12: pig
1847
+ 13: sheep
1848
+ 14: wolf
1849
+ 15: villager
1850
+ 16: mooshroom
1851
+ 17: squid
1852
+ 18: rabbit
1853
+ 19: bat
1854
+ 20: iron_golem
1855
+ 21: snow_golem
1856
+ 22: ocelot
1857
+ 23: horse
1858
+ 24: donkey
1859
+ 25: mule
1860
+ 26: skeleton_horse
1861
+ 27: zombie_horse
1862
+ 28: polar_bear
1863
+ 29: llama
1864
+ 30: parrot
1865
+ 31: dolphin
1866
+ 32: zombie
1867
+ 33: creeper
1868
+ 34: skeleton
1869
+ 35: spider
1870
+ 36: zombie_pigman
1871
+ 37: slime
1872
+ 38: enderman
1873
+ 39: silverfish
1874
+ 40: cave_spider
1875
+ 41: ghast
1876
+ 42: magma_cube
1877
+ 43: blaze
1878
+ 44: zombie_villager
1879
+ 45: witch
1880
+ 46: stray
1881
+ 47: husk
1882
+ 48: wither_skeleton
1883
+ 49: guardian
1884
+ 50: elder_guardian
1885
+ 51: npc
1886
+ 52: wither
1887
+ 53: ender_dragon
1888
+ 54: shulker
1889
+ 55: endermite
1890
+ 56: agent # LEARN_TO_CODE_MASCOT
1891
+ 57: vindicator
1892
+ 58: phantom
1893
+ 61: armor_stand
1894
+ 62: tripod_camera
1895
+ 63: player
1896
+ 64: item
1897
+ 65: tnt
1898
+ 66: falling_block
1899
+ 67: moving_block
1900
+ 68: xp_bottle
1901
+ 69: xp_orb
1902
+ 70: eye_of_ender_signal
1903
+ 71: ender_crystal
1904
+ 72: fireworks_rocket
1905
+ 73: thrown_trident
1906
+ 74: turtle
1907
+ 75: cat
1908
+ 76: shulker_bullet
1909
+ 77: fishing_hook
1910
+ 78: chalkboard
1911
+ 79: dragon_fireball
1912
+ 80: arrow
1913
+ 81: snowball
1914
+ 82: egg
1915
+ 83: painting
1916
+ 84: minecart
1917
+ 85: fireball
1918
+ 86: splash_potion
1919
+ 87: ender_pearl
1920
+ 88: leash_knot
1921
+ 89: wither_skull
1922
+ 90: boat
1923
+ 91: wither_skull_dangerous
1924
+ 93: lightning_bolt
1925
+ 94: small_fireball
1926
+ 95: area_effect_cloud
1927
+ 96: hopper_minecart
1928
+ 97: tnt_minecart
1929
+ 98: chest_minecart
1930
+ 100: command_block_minecart
1931
+ 101: lingering_potion
1932
+ 102: llama_spit
1933
+ 103: evocation_fang
1934
+ 104: evocation_illager
1935
+ 105: vex
1936
+ 106: ice_bomb
1937
+ 107: balloon
1938
+ 108: pufferfish
1939
+ 109: salmon
1940
+ 110: drowned
1941
+ 111: tropicalfish
1942
+ 112: cod
1943
+ 113: panda
1944
+
1945
+ DeviceOS: li32 =>
1946
+ - Undefined
1947
+ - Android
1948
+ - IOS
1949
+ - OSX
1950
+ - FireOS
1951
+ - GearVR
1952
+ - Hololens
1953
+ - Win10
1954
+ - Win32
1955
+ - Dedicated
1956
+ - TVOS
1957
+ - Orbis
1958
+ - NintendoSwitch
1959
+ - Xbox
1960
+ - WindowsPhone
1961
+ - Linux
1962
+
1963
+
1964
+ AbilitySet: ["bitflags",
1965
+ {
1966
+ "type": "lu32",
1967
+ "flags": {
1968
+ "build": 1,
1969
+ "mine": 2,
1970
+ "doors_and_switches": 4,
1971
+ "open_containers": 8,
1972
+ "attack_players": 16,
1973
+ "attack_mobs": 32,
1974
+ "operator_commands": 64,
1975
+ "teleport": 128,
1976
+ "invulnerable": 256,
1977
+ "flying": 512,
1978
+ "may_fly": 1024,
1979
+ "instant_build": 2048,
1980
+ "lightning": 4096,
1981
+ "fly_speed": 8192,
1982
+ "walk_speed": 16384,
1983
+ "muted": 32768,
1984
+ "world_builder": 65536,
1985
+ "no_clip": 131072
1986
+ }
1987
+ }
1988
+ ]
1989
+
1990
+ # AbilityLayer represents the abilities of a specific layer, such as the base layer or the spectator layer.
1991
+ AbilityLayers:
1992
+ # Type represents the type of the layer. This is one of the AbilityLayerType constants defined above.
1993
+ type: lu16 =>
1994
+ - cache
1995
+ - base
1996
+ - spectator
1997
+ - commands
1998
+ # The abilities that can be toggled between
1999
+ allowed: AbilitySet
2000
+ # The abilities that are currently active
2001
+ enabled: AbilitySet
2002
+ # FlySpeed is the default fly speed of the layer.
2003
+ fly_speed: lf32
2004
+ # WalkSpeed is the default walk speed of the layer.
2005
+ walk_speed: lf32