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