minecraft-data 3.78.0 → 3.80.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 (48) hide show
  1. package/data.js +78 -2
  2. package/doc/history.md +8 -0
  3. package/index.d.ts +3 -0
  4. package/minecraft-data/README.md +2 -2
  5. package/minecraft-data/data/bedrock/1.21.20/proto.yml +2 -2
  6. package/minecraft-data/data/bedrock/1.21.20/protocol.json +2 -2
  7. package/minecraft-data/data/bedrock/1.21.20/types.yml +1 -1
  8. package/minecraft-data/data/bedrock/1.21.30/proto.yml +2 -2
  9. package/minecraft-data/data/bedrock/1.21.30/protocol.json +1 -1
  10. package/minecraft-data/data/bedrock/1.21.42/proto.yml +4337 -0
  11. package/minecraft-data/data/bedrock/1.21.42/protocol.json +3 -3
  12. package/minecraft-data/data/bedrock/1.21.42/types.yml +2422 -0
  13. package/minecraft-data/data/bedrock/1.21.50/protocol.json +13034 -0
  14. package/minecraft-data/data/bedrock/1.21.50/version.json +6 -0
  15. package/minecraft-data/data/bedrock/common/protocolVersions.json +6 -0
  16. package/minecraft-data/data/bedrock/common/versions.json +2 -1
  17. package/minecraft-data/data/bedrock/latest/proto.yml +79 -3
  18. package/minecraft-data/data/bedrock/latest/types.yml +20 -3
  19. package/minecraft-data/data/dataPaths.json +79 -3
  20. package/minecraft-data/data/pc/1.20.5/proto.yml +5 -34
  21. package/minecraft-data/data/pc/1.20.5/protocol.json +26 -129
  22. package/minecraft-data/data/pc/1.21/version.json +6 -0
  23. package/minecraft-data/data/pc/1.21.1/attributes.json +219 -0
  24. package/minecraft-data/data/pc/1.21.1/proto.yml +3534 -0
  25. package/minecraft-data/data/pc/1.21.1/protocol.json +55 -51
  26. package/minecraft-data/data/pc/1.21.3/attributes.json +226 -0
  27. package/minecraft-data/data/pc/1.21.3/biomes.json +652 -0
  28. package/minecraft-data/data/pc/1.21.3/blockCollisionShapes.json +137701 -0
  29. package/minecraft-data/data/pc/1.21.3/blocks.json +40773 -0
  30. package/minecraft-data/data/pc/1.21.3/entities.json +4158 -0
  31. package/minecraft-data/data/pc/1.21.3/foods.json +402 -0
  32. package/minecraft-data/data/pc/1.21.3/items.json +9038 -0
  33. package/minecraft-data/data/pc/1.21.3/language.json +6974 -0
  34. package/minecraft-data/data/pc/1.21.3/materials.json +134 -0
  35. package/minecraft-data/data/pc/1.21.3/particles.json +446 -0
  36. package/minecraft-data/data/pc/1.21.3/protocol.json +9518 -0
  37. package/minecraft-data/data/pc/1.21.3/recipes.json +29693 -0
  38. package/minecraft-data/data/pc/1.21.3/sounds.json +6546 -0
  39. package/minecraft-data/data/pc/1.21.3/tints.json +465 -0
  40. package/minecraft-data/data/pc/1.21.3/version.json +6 -0
  41. package/minecraft-data/data/pc/common/features.json +5 -0
  42. package/minecraft-data/data/pc/common/protocolVersions.json +80 -0
  43. package/minecraft-data/data/pc/common/versions.json +3 -2
  44. package/minecraft-data/data/pc/latest/proto.yml +444 -603
  45. package/minecraft-data/doc/history.md +19 -0
  46. package/minecraft-data/tools/js/extractPcEntityMetadata.js +32 -10
  47. package/minecraft-data/tools/js/extractSlotComponents.js +23 -0
  48. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- !version: 1.21.1
1
+ !version: 1.21.3
2
2
  !StartDocs: true
3
3
 
4
4
  ^types:
@@ -23,6 +23,7 @@
23
23
  entityMetadataLoop: native
24
24
  topBitSetTerminatedArray: native
25
25
  bitfield: native
26
+ bitflags: native
26
27
  container: native
27
28
  switch: native
28
29
  void: native
@@ -30,7 +31,8 @@
30
31
  restBuffer: native
31
32
  anonymousNbt: native
32
33
  anonOptionalNbt: native
33
- arrayWithLengthOffset: native
34
+ registryEntryHolder: native
35
+ registryEntryHolderSet: native
34
36
  ByteArray: ["buffer", { "countType": "varint" }]
35
37
  string: [
36
38
  "pstring",
@@ -54,7 +56,72 @@
54
56
  x: f64
55
57
  y: f64
56
58
  z: f64
57
-
59
+ IDSet: ["registryEntryHolderSet", {
60
+ "base": { name: "name", type: "string" },
61
+ "otherwise": { name: "ids", type: "varint" }
62
+ }]
63
+ ContainerID: varint
64
+ SoundEvent:
65
+ soundName: string
66
+ fixedRange?: f32
67
+ RecipeDisplay:
68
+ type: varint =>
69
+ - crafting_shapeless
70
+ - crafting_shaped
71
+ - furnace
72
+ - stonecutter
73
+ - smithing
74
+ data: type ?
75
+ if crafting_shapeless:
76
+ ingredients: SlotDisplay[]varint
77
+ result: SlotDisplay
78
+ craftingStation: SlotDisplay
79
+ if crafting_shaped:
80
+ width: varint
81
+ height: varint
82
+ ingredients: SlotDisplay[]varint
83
+ result: SlotDisplay
84
+ craftingStation: SlotDisplay
85
+ if furnace:
86
+ ingredient: SlotDisplay
87
+ fuel: SlotDisplay
88
+ result: SlotDisplay
89
+ craftingStation: SlotDisplay
90
+ duration: varint
91
+ experience: f32
92
+ if stonecutter:
93
+ ingredient: SlotDisplay
94
+ result: SlotDisplay
95
+ craftingStation: SlotDisplay
96
+ if smithing:
97
+ template: SlotDisplay
98
+ base: SlotDisplay
99
+ addition: SlotDisplay
100
+ result: SlotDisplay
101
+ craftingStation: SlotDisplay
102
+ SlotDisplay:
103
+ type: varint =>
104
+ - empty
105
+ - any_fuel
106
+ - item
107
+ - item_stack
108
+ - tag
109
+ - smithing_trim
110
+ - with_remainder
111
+ - composite
112
+ data: type ?
113
+ if empty or any_fuel: void
114
+ if item: varint
115
+ if item_stack: Slot
116
+ if tag: string
117
+ if simthing_trim:
118
+ base: SlotDisplay
119
+ material: SlotDisplay
120
+ pattern: SlotDisplay
121
+ if with_remainder:
122
+ input: SlotDisplay
123
+ remainder: SlotDisplay
124
+ if composite: SlotDisplay[]varint
58
125
  SlotComponentType: varint =>
59
126
  - custom_data
60
127
  - max_stack_size
@@ -63,6 +130,7 @@
63
130
  - unbreakable
64
131
  - custom_name
65
132
  - item_name
133
+ - item_model
66
134
  - lore
67
135
  - rarity
68
136
  - enchantments
@@ -77,8 +145,17 @@
77
145
  - enchantment_glint_override
78
146
  - intangible_projectile
79
147
  - food
80
- - fire_resistant
148
+ - consumable
149
+ - use_remainder
150
+ - use_cooldown
151
+ - damage_resistant
81
152
  - tool
153
+ - enchantable
154
+ - equippable
155
+ - repairable
156
+ - glider
157
+ - tooltip_style
158
+ - death_protection
82
159
  - stored_enchantments
83
160
  - dyed_color
84
161
  - map_color
@@ -116,8 +193,9 @@
116
193
 
117
194
  SlotComponent:
118
195
  type: SlotComponentType
196
+ ## Ref: client/net/minecraft/core/component/DataComponents.java
119
197
  data: type ?
120
- # TODO: look into how nbt works here
198
+ ## TODO: look into how nbt works here
121
199
  if custom_data: anonymousNbt
122
200
  if max_stack_size: varint
123
201
  if max_damage: varint
@@ -125,8 +203,13 @@
125
203
  if unbreakable: bool
126
204
  if custom_name: anonymousNbt
127
205
  if item_name: anonymousNbt
206
+ if item_model: string
128
207
  if lore: anonOptionalNbt[]varint
129
- if rarity: varint
208
+ if rarity: varint =>
209
+ - common
210
+ - uncommon
211
+ - rare
212
+ - epic
130
213
  if enchantments:
131
214
  enchantments: []varint
132
215
  id: varint
@@ -138,7 +221,6 @@
138
221
  if attribute_modifiers:
139
222
  attributes: []varint
140
223
  typeId: varint
141
- uniqueId: UUID
142
224
  name: string
143
225
  value: f64
144
226
  operation: varint =>
@@ -164,53 +246,78 @@
164
246
  if creative_slot_lock: void
165
247
  if enchantment_glint_override: bool
166
248
  if intangible_projectile: void
167
- # Name Type Description
168
- # Nutrition VarInt Non-negative
169
- # Saturation Modifier Float How much saturation will be given after consuming the item.
170
- # Can Always Eat Boolean Whether the item can always be eaten, even at full hunger.
171
- # Seconds To Eat Float How long it takes to consume the item.
172
- # Using converts to Slot Data This specifies the item produced after consuming the current item. In the Notchian server, this is used for stews, which turn into bowls. Set this to Air if the item should be consumed normally without leaving any other item after.
173
- # Number of effects VarInt Number of elements in the following array.
174
- # Effect Type ID Array Potion Effect The potion effect. See Potion Effect.
175
- # Probability Float The probability for this effect to be chosen.
176
249
  if food:
177
250
  nutrition: varint
251
+ # How much saturation will be given after consuming the item.
178
252
  saturationModifier: f32
253
+ # Whether the item can always be eaten, even at full hunger.
179
254
  canAlwaysEat: bool
180
- secondsToEat: f32
181
- usingConvertsTo: Slot
182
- effects: []varint
183
- effect: varint
184
- probability: f32
185
- if fire_resistant: void
186
- # Name Type Description
187
- # Number of Rules VarInt The number of elements in the following array.
188
- # Rule
189
- # Blocks Array Block Set The block this rule applies to. See Block Set.
190
- # Has Speed Boolean
191
- # Speed Optional Float The speed at which the tool breaks this rules' blocks. Only present if Has Speed is true.
192
- # Has Correct Drop For Blocks Boolean
193
- # Correct Drop For Blocks Optional Boolean Whether items should drop only if this is the correct tool. Only present if Has Correct Drop For Blocks is true.
194
- # Default Mining Speed Float The mining speed in case none of the previous rule were matched.
195
- # Damage Per Block VarInt The amount of damage the item takes per block break.
255
+ if consumable:
256
+ consume_seconds: f32
257
+ animation: varint =>
258
+ - none
259
+ - eat
260
+ - drink
261
+ - block
262
+ - bow
263
+ - spear
264
+ - crossbow
265
+ - spyglass
266
+ - toot_horn
267
+ - brush
268
+ sound: ["registryEntryHolder", {
269
+ "baseName": "soundId",
270
+ "otherwise": { name: "data", type: "SoundEvent" }
271
+ }]
272
+ makes_particles: bool
273
+ effects: ConsumeEffect[]varint
274
+ if use_remainder: Slot
275
+ if use_cooldown:
276
+ seconds: f32
277
+ cooldownGroup?: string
278
+ if damage_resistant: string
196
279
  if tool:
197
280
  rules: []varint
198
- blocks: BlockSet[]varint
199
- hasSpeed: bool
200
- speed: f32
201
- hasCorrectDropForBlocks: bool
202
- correctDropForBlocks: bool
281
+ blocks: IDSet
282
+ # The speed at which the tool breaks this rules' blocks.
283
+ speed?: f32
284
+ # Whether items should drop only if this is the correct tool.
285
+ correctDropForBlocks?: bool
286
+ # The mining speed in case none of the previous rule were matched.
203
287
  defaultMiningSpeed: f32
204
288
  damagePerBlock: varint
205
- # Name Type Description
206
- # Number of enchantments VarInt Number of elements in the following array.
207
- # Enchantment Type ID Array VarInt Enum The ID of the enchantment in the enchantment registry.
208
- # Level VarInt The level of the enchantment.
209
- # Show In Tooltip Boolean Whether the list of enchantments should be shown on the item's tooltip.
289
+ # Enchantment cost up to which the item can be enchanted
290
+ if enchantable: varint
291
+ if equippable:
292
+ slot: varint =>
293
+ - main_hand
294
+ - off_hand
295
+ - feet
296
+ - legs
297
+ - chest
298
+ - head
299
+ - body
300
+ sound: ["registryEntryHolder", {
301
+ "baseName": "soundId",
302
+ "otherwise": { name: "data", type: "SoundEvent" }
303
+ }]
304
+ model?: string
305
+ cameraOverlay?: string
306
+ allowedEntities?: IDSet
307
+ dispensable: bool
308
+ swappable: bool
309
+ damageable: bool
310
+ if repairable:
311
+ items: IDSet
312
+ if tooltip_style: string
313
+ if death_protection:
314
+ effects: ConsumeEffect[]varint
210
315
  if stored_enchantments:
211
316
  enchantments: []varint
317
+ # The ID of the enchantment in the enchantment registry.
212
318
  id: varint
213
319
  level: varint
320
+ # Whether the list of enchantments should be shown on the item's tooltip.
214
321
  showInTooltip: bool
215
322
  if dyed_color:
216
323
  color: varint
@@ -223,21 +330,13 @@
223
330
  projectiles: Slot[]varint
224
331
  if bundle_contents:
225
332
  contents: Slot[]varint
226
- # Name Type Description
227
- # Has Potion ID Boolean Whether this potion has an ID in the potion registry. If true, it has the default effects associated with the potion type.
228
- # Potion ID Optional VarInt The ID of the potion type in the potion registry. Only present if Has Potion ID is true.
229
- # Has Custom Color Boolean Whether this potion has a custom color. If false, it uses the default color associated with the potion type.
230
- # Custom Color Optional Int The RGB components of the color, encoded as an integer. Only present if Has Custom Color is true.
231
- # Number Of Custom Effects VarInt The number of elements in the following array.
232
- # Custom Effects Array of Potion Effect Any custom effects the potion might have. See Potion Effect.
233
333
  if potion_contents:
234
- hasPotionId: bool
235
- potionId: optvarint
236
- hasCustomColor: bool
237
- customColor: optvarint
238
- customEffects: []varint
239
- effect: varint
240
- details: EffectDetail
334
+ # True if this potion has an ID in the potion registry--it has the default effects associated with the potion type.
335
+ potionId?: varint
336
+ # The RGB components of the color, encoded as an integer.
337
+ customColor?: varint
338
+ customEffects: PotionEffect[]varint
339
+ customName: string
241
340
  # Name Type Description
242
341
  # Number Of Effects VarInt Number of elements in the following array.
243
342
  # Effect Type ID Array VarInt Enum The ID of the effect in the potion effect type registry.
@@ -374,7 +473,7 @@
374
473
  if lodestone_tracker:
375
474
  globalPosition?:
376
475
  dimension: string
377
- position: vec3f
476
+ position: position
378
477
  tracked: bool
379
478
  # Name Type Description
380
479
  # Shape VarInt Enum Can be one of the following:
@@ -459,68 +558,12 @@
459
558
  if container_loot: anonymousNbt
460
559
 
461
560
  Slot:
462
- itemCount: i8
561
+ itemCount: varint
463
562
  _: itemCount ?
464
563
  if 0: void
465
564
  default:
466
- itemId: varint
565
+ item: varint
467
566
  # https://wiki.vg/Slot_Data#Structured_components
468
- # + public static final DataComponentType<CompoundTag> CUSTOM_DATA = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
469
- # + public static final IntComponentType MAX_STACK_SIZE = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
470
- # + public static final IntComponentType MAX_DAMAGE = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
471
- # + public static final IntComponentType DAMAGE = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
472
- # + public static final BooleanComponentType UNBREAKABLE = new BooleanComponentType(ByteBuf::readBoolean, ByteBuf::writeBoolean, BooleanDataComponent::new);
473
- # + public static final DataComponentType<Component> CUSTOM_NAME = new DataComponentType<>(ItemCodecHelper::readComponent, ItemCodecHelper::writeComponent, ObjectDataComponent::new);
474
- # + public static final DataComponentType<Component> ITEM_NAME = new DataComponentType<>(ItemCodecHelper::readComponent, ItemCodecHelper::writeComponent, ObjectDataComponent::new);
475
- # + public static final DataComponentType<List<Component>> LORE = new DataComponentType<>(listReader(ItemCodecHelper::readComponent), listWriter(ItemCodecHelper::writeComponent), ObjectDataComponent::new);
476
- # + public static final IntComponentType RARITY = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
477
- # + public static final DataComponentType<ItemEnchantments> ENCHANTMENTS = new DataComponentType<>(ItemCodecHelper::readItemEnchantments, ItemCodecHelper::writeItemEnchantments, ObjectDataComponent::new);
478
- # + public static final DataComponentType<AdventureModePredicate> CAN_PLACE_ON = new DataComponentType<>(ItemCodecHelper::readAdventureModePredicate, ItemCodecHelper::writeAdventureModePredicate, ObjectDataComponent::new);
479
- # + public static final DataComponentType<AdventureModePredicate> CAN_BREAK = new DataComponentType<>(ItemCodecHelper::readAdventureModePredicate, ItemCodecHelper::writeAdventureModePredicate, ObjectDataComponent::new);
480
- # + public static final DataComponentType<ItemAttributeModifiers> ATTRIBUTE_MODIFIERS = new DataComponentType<>(ItemCodecHelper::readItemAttributeModifiers, ItemCodecHelper::writeItemAttributeModifiers, ObjectDataComponent::new);
481
- # + public static final IntComponentType CUSTOM_MODEL_DATA = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
482
- # + public static final DataComponentType<Unit> HIDE_ADDITIONAL_TOOLTIP = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new);
483
- # + public static final DataComponentType<Unit> HIDE_TOOLTIP = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new);
484
- # + public static final IntComponentType REPAIR_COST = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
485
- # + public static final DataComponentType<Unit> CREATIVE_SLOT_LOCK = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new);
486
- # + public static final BooleanComponentType ENCHANTMENT_GLINT_OVERRIDE = new BooleanComponentType(ByteBuf::readBoolean, ByteBuf::writeBoolean, BooleanDataComponent::new);
487
- # + public static final DataComponentType<CompoundTag> INTANGIBLE_PROJECTILE = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
488
- # + public static final DataComponentType<FoodProperties> FOOD = new DataComponentType<>(ItemCodecHelper::readFoodProperties, ItemCodecHelper::writeFoodProperties, ObjectDataComponent::new);
489
- # + public static final DataComponentType<Unit> FIRE_RESISTANT = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new);
490
- # + public static final DataComponentType<ToolData> TOOL = new DataComponentType<>(ItemCodecHelper::readToolData, ItemCodecHelper::writeToolData, ObjectDataComponent::new);
491
- # + public static final DataComponentType<ItemEnchantments> STORED_ENCHANTMENTS = new DataComponentType<>(ItemCodecHelper::readItemEnchantments, ItemCodecHelper::writeItemEnchantments, ObjectDataComponent::new);
492
- # + public static final DataComponentType<DyedItemColor> DYED_COLOR = new DataComponentType<>(ItemCodecHelper::readDyedItemColor, ItemCodecHelper::writeDyedItemColor, ObjectDataComponent::new);
493
- # + public static final IntComponentType MAP_COLOR = new IntComponentType((helper, input) -> input.readInt(), (helper, output, value) -> output.writeInt(value), IntDataComponent::new);
494
- # + public static final IntComponentType MAP_ID = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
495
- # + public static final DataComponentType<CompoundTag> MAP_DECORATIONS = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
496
- # + public static final IntComponentType MAP_POST_PROCESSING = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
497
- # + public static final DataComponentType<List<ItemStack>> CHARGED_PROJECTILES = new DataComponentType<>(listReader(ItemCodecHelper::readItemStack), listWriter(ItemCodecHelper::writeItemStack), ObjectDataComponent::new);
498
- # + public static final DataComponentType<List<ItemStack>> BUNDLE_CONTENTS = new DataComponentType<>(listReader(ItemCodecHelper::readItemStack), listWriter(ItemCodecHelper::writeItemStack), ObjectDataComponent::new);
499
- # + public static final DataComponentType<PotionContents> POTION_CONTENTS = new DataComponentType<>(ItemCodecHelper::readPotionContents, ItemCodecHelper::writePotionContents, ObjectDataComponent::new);
500
- # + public static final DataComponentType<List<SuspiciousStewEffect>> SUSPICIOUS_STEW_EFFECTS = new DataComponentType<>(listReader(ItemCodecHelper::readStewEffect), listWriter(ItemCodecHelper::writeStewEffect), ObjectDataComponent::new);
501
- # + public static final DataComponentType<WritableBookContent> WRITABLE_BOOK_CONTENT = new DataComponentType<>(ItemCodecHelper::readWritableBookContent, ItemCodecHelper::writeWritableBookContent, ObjectDataComponent::new);
502
- # + public static final DataComponentType<WrittenBookContent> WRITTEN_BOOK_CONTENT = new DataComponentType<>(ItemCodecHelper::readWrittenBookContent, ItemCodecHelper::writeWrittenBookContent, ObjectDataComponent::new);
503
- # + public static final DataComponentType<ArmorTrim> TRIM = new DataComponentType<>(ItemCodecHelper::readArmorTrim, ItemCodecHelper::writeArmorTrim, ObjectDataComponent::new);
504
- # + public static final DataComponentType<CompoundTag> DEBUG_STICK_STATE = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
505
- # + public static final DataComponentType<CompoundTag> ENTITY_DATA = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
506
- # + public static final DataComponentType<CompoundTag> BUCKET_ENTITY_DATA = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
507
- # + public static final DataComponentType<CompoundTag> BLOCK_ENTITY_DATA = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
508
- # + public static final DataComponentType<Holder<Instrument>> INSTRUMENT = new DataComponentType<>(ItemCodecHelper::readInstrument, ItemCodecHelper::writeInstrument, ObjectDataComponent::new);
509
- # + public static final IntComponentType OMINOUS_BOTTLE_AMPLIFIER = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
510
- # + public static final DataComponentType<ListTag> RECIPES = new DataComponentType<>(ItemCodecHelper::readRecipes, ItemCodecHelper::writeRecipes, ObjectDataComponent::new);
511
- # + public static final DataComponentType<LodestoneTracker> LODESTONE_TRACKER = new DataComponentType<>(ItemCodecHelper::readLodestoneTarget, ItemCodecHelper::writeLodestoneTarget, ObjectDataComponent::new);
512
- # + public static final DataComponentType<Fireworks.FireworkExplosion> FIREWORK_EXPLOSION = new DataComponentType<>(ItemCodecHelper::readFireworkExplosion, ItemCodecHelper::writeFireworkExplosion, ObjectDataComponent::new);
513
- # + public static final DataComponentType<Fireworks> FIREWORKS = new DataComponentType<>(ItemCodecHelper::readFireworks, ItemCodecHelper::writeFireworks, ObjectDataComponent::new);
514
- # + public static final DataComponentType<GameProfile> PROFILE = new DataComponentType<>(ItemCodecHelper::readResolvableProfile, ItemCodecHelper::writeResolvableProfile, ObjectDataComponent::new);
515
- # + public static final DataComponentType<String> NOTE_BLOCK_SOUND = new DataComponentType<>(ItemCodecHelper::readResourceLocation, ItemCodecHelper::writeResourceLocation, ObjectDataComponent::new);
516
- # + public static final DataComponentType<List<BannerPatternLayer>> BANNER_PATTERNS = new DataComponentType<>(listReader(ItemCodecHelper::readBannerPatternLayer), listWriter(ItemCodecHelper::writeBannerPatternLayer), ObjectDataComponent::new);
517
- # + public static final IntComponentType BASE_COLOR = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new);
518
- # + public static final DataComponentType<List<Integer>> POT_DECORATIONS = new DataComponentType<>(listReader(ItemCodecHelper::readVarInt), listWriter(ItemCodecHelper::writeVarInt), ObjectDataComponent::new);
519
- # + public static final DataComponentType<List<ItemStack>> CONTAINER = new DataComponentType<>(listReader(ItemCodecHelper::readOptionalItemStack), listWriter(MinecraftCodecHelper::writeOptionalItemStack), ObjectDataComponent::new);
520
- # + public static final DataComponentType<BlockStateProperties> BLOCK_STATE = new DataComponentType<>(ItemCodecHelper::readBlockStateProperties, ItemCodecHelper::writeBlockStateProperties, ObjectDataComponent::new);
521
- # + public static final DataComponentType<List<BeehiveOccupant>> BEES = new DataComponentType<>(listReader(ItemCodecHelper::readBeehiveOccupant), listWriter(ItemCodecHelper::writeBeehiveOccupant), ObjectDataComponent::new);
522
- # + public static final DataComponentType<StringTag> LOCK = new DataComponentType<>(ItemCodecHelper::readLock, ItemCodecHelper::writeLock, ObjectDataComponent::new);
523
- # + public static final DataComponentType<CompoundTag> CONTAINER_LOOT = new DataComponentType<>(ItemCodecHelper::readAnyTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new);
524
567
  addedComponentCount: varint
525
568
  removedComponentCount: varint
526
569
  components: SlotComponent[]$addedComponentCount
@@ -551,15 +594,31 @@
551
594
  showIcon: bool
552
595
  hiddenEffect?: EffectDetail
553
596
 
554
- BlockSet:
555
- type: varint
556
- name: type ?
557
- if 0: string
558
- default: void
559
- # TODO: This will require a custom type ; we need type - 1 length of blockIds
560
- blockIds: type ?
561
- if 0: void
562
- default: ["arrayWithLengthOffset", {"count": "type", "type": "varint", "lengthOffset": -1}]
597
+ PotionEffect:
598
+ id: varint
599
+ details: EffectDetail
600
+
601
+ ConsumeEffect:
602
+ type: varint =>
603
+ - apply_effects
604
+ - remove_effects
605
+ - clear_all_effects
606
+ - teleport_randomly
607
+ - play_sound
608
+ _: type ?
609
+ if apply_effects:
610
+ effects: PotionEffect[]varint
611
+ probability: f32
612
+ if remove_effects:
613
+ effects: IDSet
614
+ if clear_all_effects: void
615
+ if teleport_randomly:
616
+ diameter: f32
617
+ if play_sound:
618
+ sound: ["registryEntryHolder", {
619
+ "baseName": "soundId",
620
+ "otherwise": { name: "data", type: "SoundEvent" }
621
+ }]
563
622
 
564
623
  BlockProperty:
565
624
  # Name of the block state property.
@@ -574,7 +633,10 @@
574
633
  maxValue?: string
575
634
 
576
635
  BlockPredicate:
577
- blockSet?: BlockSet[]varint
636
+ blockSet?: ["registryEntryHolderSet", {
637
+ "base": { name: "name", type: "string" },
638
+ "otherwise": { name: "blockIds", type: "varint" }
639
+ }]
578
640
  properties?: BlockProperty[]varint
579
641
  nbt: anonOptionalNbt
580
642
 
@@ -627,6 +689,7 @@
627
689
  - instant_effect
628
690
  - item
629
691
  - vibration
692
+ - trail
630
693
  - item_slime
631
694
  - item_cobweb
632
695
  - item_snowball
@@ -690,6 +753,7 @@
690
753
  - ominous_spawning
691
754
  - raid_omen
692
755
  - trial_omen
756
+ - block_crumble
693
757
  ## ## Tips for reviewing particle data (as of 1.20.5)
694
758
  ## Inside the registry code, each particle can have an associated "options" type and
695
759
  ## each options type can add additional data to be encoded.
@@ -705,7 +769,7 @@
705
769
  ## which as we can see writes the varint to the buffer.
706
770
  ## If you want to see all the serializers try regexp searching "StreamCodec.*Particle"
707
771
  data: type ?
708
- if block or block_marker or falling_dust or dust_pillar: varint
772
+ if block or block_marker or falling_dust or dust_pillar or block_crumble: varint
709
773
  if dust:
710
774
  red: f32
711
775
  green: f32
@@ -733,6 +797,9 @@
733
797
  entityId: varint
734
798
  entity_eye_height: f32
735
799
  ticks: varint
800
+ if trail:
801
+ target: vec3f64
802
+ color: u8
736
803
  ingredient: Slot[]varint
737
804
  position: [
738
805
  "bitfield",
@@ -842,36 +909,33 @@
842
909
  if optional_unsigned_int: optvarint
843
910
  if pose: varint
844
911
  if cat_variant: varint
845
- if wolf_variant:
846
- wildTexture: string
847
- tameTexture: string
848
- angryTexture: string
849
- maybeInputLength: varint
850
- biomeLocation: maybeInputLength ?
851
- if 0: string
852
- biomeHolders: maybeInputLength ?
853
- if 0: void
854
- default: ["arrayWithLengthOffset", {"count": "type", "type": "varint", "lengthOffset": -1}]
912
+ if wolf_variant: ["registryEntryHolder", {
913
+ "baseName": "variantId",
914
+ "otherwise": { name: "variantData", type: "EntityMetadataWolfVariant" }
915
+ }]
855
916
  if frog_variant: varint
856
917
  if optional_global_pos: ["option", "string"]
857
- if painting_variant:
858
- width: varint
859
- height: varint
860
- assetId: string
918
+ if painting_variant: ["registryEntryHolder", {
919
+ "baseName": "variantId",
920
+ "otherwise": { name: "variantData", type: "EntityMetadataPaintingVariant" }
921
+ }]
861
922
  if sniffer_state: varint
862
923
  if armadillo_state: varint
863
924
  if vector3: vec3f
864
925
  if quaternion: vec4f
926
+ EntityMetadataPaintingVariant:
927
+ width: i32
928
+ height: i32
929
+ assetId: string
930
+ title?: anonymousNbt
931
+ author?: anonymousNbt
932
+ EntityMetadataWolfVariant:
933
+ wildTexture: string
934
+ tameTexture: string
935
+ angryTexture: string
936
+ biome: IDSet
937
+
865
938
  entityMetadata: ["entityMetadataLoop", { "endVal": 255, "type": "entityMetadataEntry" }]
866
- minecraft_simple_recipe_format:
867
- category: varint
868
- minecraft_smelting_format:
869
- group: string
870
- category: varint
871
- ingredient: ingredient
872
- result: Slot
873
- experience: f32
874
- cookTime: varint
875
939
  tags: []varint
876
940
  tagName: string
877
941
  entries: varint[]varint
@@ -1240,6 +1304,16 @@
1240
1304
  details: []varint
1241
1305
  key: string
1242
1306
  value: string
1307
+ # MC: ClientboundResourcePackPopPacket
1308
+ packet_common_remove_resource_pack:
1309
+ uuid?: UUID
1310
+ # MC: ClientboundResourcePackPushPacket
1311
+ packet_common_add_resource_pack:
1312
+ uuid: UUID
1313
+ url: string
1314
+ hash: string
1315
+ forced: bool
1316
+ promptMessage?: anonymousNbt
1243
1317
 
1244
1318
  ServerLinkType: varint =>
1245
1319
  - bug_report
@@ -1331,7 +1405,7 @@
1331
1405
  }
1332
1406
  ]
1333
1407
  shouldAuthenticate: bool
1334
- # MC: ClientboundGameProfilePacket
1408
+ # MC: ClientboundLoginFinishedPacket
1335
1409
  packet_success:
1336
1410
  uuid: UUID
1337
1411
  username: string
@@ -1339,7 +1413,6 @@
1339
1413
  name: string
1340
1414
  value: string
1341
1415
  signature?: string
1342
- strictErrorHandling: bool
1343
1416
  # MC: ClientboundLoginCompressionPacket
1344
1417
  packet_compress:
1345
1418
  threshold: varint
@@ -1432,16 +1505,6 @@
1432
1505
  entries: []varint
1433
1506
  key: string
1434
1507
  value?: anonymousNbt
1435
- # MC: ClientboundResourcePackPopPacket
1436
- packet_remove_resource_pack:
1437
- uuid?: UUID
1438
- # MC: ClientboundResourcePackPushPacket
1439
- packet_add_resource_pack:
1440
- uuid: UUID
1441
- url: string
1442
- hash: string
1443
- forced: bool
1444
- promptMessage?: anonymousNbt
1445
1508
  ## (Store cookie and Transfer are Common) ##
1446
1509
  # MC: ClientboundUpdateEnabledFeaturesPacket
1447
1510
  packet_feature_flags:
@@ -1480,8 +1543,8 @@
1480
1543
  if ping: packet_ping
1481
1544
  if reset_chat: packet_reset_chat
1482
1545
  if registry_data: packet_registry_data
1483
- if remove_resource_pack: packet_remove_resource_pack
1484
- if add_resource_pack: packet_add_resource_pack
1546
+ if remove_resource_pack: packet_common_remove_resource_pack
1547
+ if add_resource_pack: packet_common_add_resource_pack
1485
1548
  if store_cookie: packet_common_store_cookie
1486
1549
  if transfer: packet_common_transfer
1487
1550
  if feature_flags: packet_feature_flags
@@ -1500,6 +1563,7 @@
1500
1563
  mainHand: varint
1501
1564
  enableTextFiltering: bool
1502
1565
  enableServerListing: bool
1566
+ particles: varint
1503
1567
  ## (Cookie Response is Common) ##
1504
1568
  # MC: ServerboundCustomPayloadPacket
1505
1569
  packet_custom_payload:
@@ -1560,6 +1624,7 @@
1560
1624
  dimensionName: string
1561
1625
  location: position
1562
1626
  portalCooldown: varint
1627
+ seaLevel: varint
1563
1628
 
1564
1629
  # MC: ClientboundAddEntityPacket
1565
1630
  packet_spawn_entity:
@@ -1672,28 +1737,29 @@
1672
1737
  rootIndex: varint
1673
1738
  # MC: ClientboundContainerClosePacket
1674
1739
  packet_close_window:
1675
- windowId: u8
1740
+ windowId: ContainerID
1676
1741
  # MC: ClientboundContainerSetContentPacket
1677
1742
  packet_window_items:
1678
- windowId: u8
1743
+ windowId: ContainerID
1679
1744
  stateId: varint
1680
1745
  items: Slot[]varint
1681
1746
  carriedItem: Slot
1682
1747
  # MC: ClientboundContainerSetDataPacket
1683
1748
  packet_craft_progress_bar:
1684
- windowId: u8
1749
+ windowId: ContainerID
1685
1750
  property: i16
1686
1751
  value: i16
1687
1752
  # MC: ClientboundContainerSetSlotPacket
1688
1753
  packet_set_slot:
1689
- windowId: i8
1754
+ windowId: ContainerID
1690
1755
  stateId: varint
1691
1756
  slot: i16
1692
1757
  item: Slot
1693
1758
  ## (Cookie Request is Common)
1694
1759
  # MC: ClientboundCooldownPacket
1695
1760
  packet_set_cooldown:
1696
- itemID: varint
1761
+ # TODO: figure out what this is
1762
+ cooldownGroup: string
1697
1763
  cooldownTicks: varint
1698
1764
  # MC: ClientboundCustomChatCompletionsPacket
1699
1765
  packet_chat_suggestions:
@@ -1758,22 +1824,23 @@
1758
1824
  packet_entity_status:
1759
1825
  entityId: i32
1760
1826
  entityStatus: i8
1761
- # MC: ClientboundExplodePacket
1762
- packet_explosion:
1827
+ # MC: ClientboundEntityPositionSyncPacket
1828
+ packet_sync_entity_position:
1829
+ entityId: varint
1763
1830
  x: f64
1764
1831
  y: f64
1765
1832
  z: f64
1766
- radius: f32
1767
- affectedBlockOffsets: []varint
1768
- x: i8
1769
- y: i8
1770
- z: i8
1771
- playerMotionX: f32
1772
- playerMotionY: f32
1773
- playerMotionZ: f32
1774
- block_interaction_type: varint
1775
- small_explosion_particle: Particle
1776
- large_explosion_particle: Particle
1833
+ dx: f64
1834
+ dy: f64
1835
+ dz: f64
1836
+ yaw: f32
1837
+ pitch: f32
1838
+ onGround: bool
1839
+ # MC: ClientboundExplodePacket
1840
+ packet_explosion:
1841
+ center: vec3f
1842
+ playerKnockback?: vec3f
1843
+ explosionParticle: Particle
1777
1844
  soundId: varint
1778
1845
  _: soundId ?
1779
1846
  if 0:
@@ -1791,7 +1858,7 @@
1791
1858
  gameMode: f32
1792
1859
  # MC: ClientboundHorseScreenOpenPacket
1793
1860
  packet_open_horse_window:
1794
- windowId: u8
1861
+ windowId: ContainerID
1795
1862
  nbSlots: varint
1796
1863
  entityId: i32
1797
1864
  # MC: ClientboundHurtAnimationPacket
@@ -1905,7 +1972,7 @@
1905
1972
  ]
1906
1973
  # MC: ClientboundMerchantOffersPacket
1907
1974
  packet_trade_list:
1908
- windowId: varint
1975
+ windowId: ContainerID
1909
1976
  ## https://github.com/extremeheat/extracted_minecraft_data/blob/client1.20.5/client/net/minecraft/world/item/trading/MerchantOffer.java#L210
1910
1977
  trades: []varint
1911
1978
  inputItem1:
@@ -1946,6 +2013,15 @@
1946
2013
  yaw: i8
1947
2014
  pitch: i8
1948
2015
  onGround: bool
2016
+ # MC: ClientboundMoveMinecartPacket
2017
+ packet_move_minecart:
2018
+ entityId: varint
2019
+ steps: []varint
2020
+ position: vec3f
2021
+ movement: vec3f
2022
+ yaw: f32
2023
+ pitch: f32
2024
+ weight: f32
1949
2025
  # MC: ClientboundMoveEntityPacket.Rot
1950
2026
  packet_entity_look:
1951
2027
  entityId: varint
@@ -1979,8 +2055,8 @@
1979
2055
  id: i64
1980
2056
  # MC: ClientboundPlaceGhostRecipePacket
1981
2057
  packet_craft_recipe_response:
1982
- windowId: i8
1983
- recipe: string
2058
+ windowId: ContainerID
2059
+ recipeDisplay: RecipeDisplay
1984
2060
  # MC: ClientboundPlayerAbilitiesPacket
1985
2061
  packet_abilities:
1986
2062
  flags: i8
@@ -2023,309 +2099,41 @@
2023
2099
  players: UUID[]varint
2024
2100
  # MC: ClientboundPlayerInfoUpdatePacket
2025
2101
  packet_player_info:
2026
- action: i8
2102
+ # action is a bitfield of the above
2103
+ action: ["bitfield", [
2104
+ { "name": "unused", "size": 1, "signed": false },
2105
+ { "name": "update_priority", "size": 1, "signed": false },
2106
+ { "name": "update_display_name", "size": 1, "signed": false },
2107
+ { "name": "update_latency", "size": 1, "signed": false },
2108
+ { "name": "update_listed", "size": 1, "signed": false },
2109
+ { "name": "update_game_mode", "size": 1, "signed": false },
2110
+ { "name": "initialize_chat", "size": 1, "signed": false },
2111
+ { "name": "add_player", "size": 1, "signed": false }
2112
+ ]]
2027
2113
  data: []varint
2028
2114
  uuid: UUID
2029
- player: ../action ?
2115
+ player: ../action/add_player ?
2030
2116
  if 1: game_profile
2031
- if 3: game_profile
2032
- if 5: game_profile
2033
- if 7: game_profile
2034
- if 9: game_profile
2035
- if 11: game_profile
2036
- if 13: game_profile
2037
- if 15: game_profile
2038
- if 17: game_profile
2039
- if 19: game_profile
2040
- if 21: game_profile
2041
- if 23: game_profile
2042
- if 25: game_profile
2043
- if 27: game_profile
2044
- if 29: game_profile
2045
- if 31: game_profile
2046
- if 33: game_profile
2047
- if 35: game_profile
2048
- if 37: game_profile
2049
- if 39: game_profile
2050
- if 41: game_profile
2051
- if 43: game_profile
2052
- if 45: game_profile
2053
- if 47: game_profile
2054
- if 49: game_profile
2055
- if 51: game_profile
2056
- if 53: game_profile
2057
- if 55: game_profile
2058
- if 57: game_profile
2059
- if 59: game_profile
2060
- if 61: game_profile
2061
- if 63: game_profile
2062
2117
  default: void
2063
- chatSession: ../action ?
2064
- if 2: chat_session
2065
- if 3: chat_session
2066
- if 6: chat_session
2067
- if 7: chat_session
2068
- if 10: chat_session
2069
- if 11: chat_session
2070
- if 14: chat_session
2071
- if 15: chat_session
2072
- if 18: chat_session
2073
- if 19: chat_session
2074
- if 22: chat_session
2075
- if 23: chat_session
2076
- if 26: chat_session
2077
- if 27: chat_session
2078
- if 30: chat_session
2079
- if 31: chat_session
2080
- if 34: chat_session
2081
- if 35: chat_session
2082
- if 38: chat_session
2083
- if 39: chat_session
2084
- if 42: chat_session
2085
- if 43: chat_session
2086
- if 46: chat_session
2087
- if 47: chat_session
2088
- if 50: chat_session
2089
- if 51: chat_session
2090
- if 54: chat_session
2091
- if 55: chat_session
2092
- if 58: chat_session
2093
- if 59: chat_session
2094
- if 62: chat_session
2095
- if 63: chat_session
2118
+ chatSession: ../action/initialize_chat ?
2119
+ if 1: chat_session
2096
2120
  default: void
2097
- gamemode: ../action ?
2098
- if 4: varint
2099
- if 5: varint
2100
- if 6: varint
2101
- if 7: varint
2102
- if 12: varint
2103
- if 13: varint
2104
- if 14: varint
2105
- if 15: varint
2106
- if 20: varint
2107
- if 21: varint
2108
- if 22: varint
2109
- if 23: varint
2110
- if 28: varint
2111
- if 29: varint
2112
- if 30: varint
2113
- if 31: varint
2114
- if 36: varint
2115
- if 37: varint
2116
- if 38: varint
2117
- if 39: varint
2118
- if 44: varint
2119
- if 45: varint
2120
- if 46: varint
2121
- if 47: varint
2122
- if 52: varint
2123
- if 53: varint
2124
- if 54: varint
2125
- if 55: varint
2126
- if 60: varint
2127
- if 61: varint
2128
- if 62: varint
2129
- if 63: varint
2121
+ gamemode: ../action/update_game_mode ?
2122
+ if 1: varint
2130
2123
  default: void
2131
- listed: ../action ?
2132
- if 8: bool
2133
- if 9: bool
2134
- if 10: bool
2135
- if 11: bool
2136
- if 12: bool
2137
- if 13: bool
2138
- if 14: bool
2139
- if 15: bool
2140
- if 24: bool
2141
- if 25: bool
2142
- if 26: bool
2143
- if 27: bool
2144
- if 28: bool
2145
- if 29: bool
2146
- if 30: bool
2147
- if 31: bool
2148
- if 40: bool
2149
- if 41: bool
2150
- if 42: bool
2151
- if 43: bool
2152
- if 44: bool
2153
- if 45: bool
2154
- if 46: bool
2155
- if 47: bool
2156
- if 56: bool
2157
- if 57: bool
2158
- if 58: bool
2159
- if 59: bool
2160
- if 60: bool
2161
- if 61: bool
2162
- if 62: bool
2163
- if 63: bool
2124
+ listed: ../action/update_listed ?
2125
+ if 1: varint
2164
2126
  default: void
2165
- latency: ../action ?
2166
- if 16: varint
2167
- if 17: varint
2168
- if 18: varint
2169
- if 19: varint
2170
- if 20: varint
2171
- if 21: varint
2172
- if 22: varint
2173
- if 23: varint
2174
- if 24: varint
2175
- if 25: varint
2176
- if 26: varint
2177
- if 27: varint
2178
- if 28: varint
2179
- if 29: varint
2180
- if 30: varint
2181
- if 31: varint
2182
- if 48: varint
2183
- if 49: varint
2184
- if 50: varint
2185
- if 51: varint
2186
- if 52: varint
2187
- if 53: varint
2188
- if 54: varint
2189
- if 55: varint
2190
- if 56: varint
2191
- if 57: varint
2192
- if 58: varint
2193
- if 59: varint
2194
- if 60: varint
2195
- if 61: varint
2196
- if 62: varint
2197
- if 63: varint
2127
+ latency: ../action/update_latency ?
2128
+ if 1: varint
2198
2129
  default: void
2199
- displayName: ../action ?
2200
- if 32: [
2201
- "option",
2202
- "anonymousNbt"
2203
- ]
2204
- if 33: [
2205
- "option",
2206
- "anonymousNbt"
2207
- ]
2208
- if 34: [
2209
- "option",
2210
- "anonymousNbt"
2211
- ]
2212
- if 35: [
2213
- "option",
2214
- "anonymousNbt"
2215
- ]
2216
- if 36: [
2217
- "option",
2218
- "anonymousNbt"
2219
- ]
2220
- if 37: [
2221
- "option",
2222
- "anonymousNbt"
2223
- ]
2224
- if 38: [
2225
- "option",
2226
- "anonymousNbt"
2227
- ]
2228
- if 39: [
2229
- "option",
2230
- "anonymousNbt"
2231
- ]
2232
- if 40: [
2233
- "option",
2234
- "anonymousNbt"
2235
- ]
2236
- if 41: [
2237
- "option",
2238
- "anonymousNbt"
2239
- ]
2240
- if 42: [
2241
- "option",
2242
- "anonymousNbt"
2243
- ]
2244
- if 43: [
2245
- "option",
2246
- "anonymousNbt"
2247
- ]
2248
- if 44: [
2249
- "option",
2250
- "anonymousNbt"
2251
- ]
2252
- if 45: [
2253
- "option",
2254
- "anonymousNbt"
2255
- ]
2256
- if 46: [
2257
- "option",
2258
- "anonymousNbt"
2259
- ]
2260
- if 47: [
2261
- "option",
2262
- "anonymousNbt"
2263
- ]
2264
- if 48: [
2265
- "option",
2266
- "anonymousNbt"
2267
- ]
2268
- if 49: [
2269
- "option",
2270
- "anonymousNbt"
2271
- ]
2272
- if 50: [
2273
- "option",
2274
- "anonymousNbt"
2275
- ]
2276
- if 51: [
2277
- "option",
2278
- "anonymousNbt"
2279
- ]
2280
- if 52: [
2281
- "option",
2282
- "anonymousNbt"
2283
- ]
2284
- if 53: [
2285
- "option",
2286
- "anonymousNbt"
2287
- ]
2288
- if 54: [
2289
- "option",
2290
- "anonymousNbt"
2291
- ]
2292
- if 55: [
2293
- "option",
2294
- "anonymousNbt"
2295
- ]
2296
- if 56: [
2297
- "option",
2298
- "anonymousNbt"
2299
- ]
2300
- if 57: [
2301
- "option",
2302
- "anonymousNbt"
2303
- ]
2304
- if 58: [
2305
- "option",
2306
- "anonymousNbt"
2307
- ]
2308
- if 59: [
2309
- "option",
2310
- "anonymousNbt"
2311
- ]
2312
- if 60: [
2313
- "option",
2314
- "anonymousNbt"
2315
- ]
2316
- if 61: [
2317
- "option",
2318
- "anonymousNbt"
2319
- ]
2320
- if 62: [
2321
- "option",
2322
- "anonymousNbt"
2323
- ]
2324
- if 63: [
2325
- "option",
2326
- "anonymousNbt"
2327
- ]
2130
+ displayName: ../action/update_display_name ?
2131
+ if 1: ["option", "anonymousNbt"]
2328
2132
  default: void
2133
+ listPriority: ../action/update_priority ?
2134
+ if 1: varint
2135
+ default: void
2136
+
2329
2137
  # MC: ClientboundPlayerLookAtPacket
2330
2138
  packet_face_player:
2331
2139
  feet_eyes: varint
@@ -2339,30 +2147,84 @@
2339
2147
  entity_feet_eyes: isEntity ?
2340
2148
  if true: varint
2341
2149
  default: void
2150
+
2151
+ # https://github.com/extremeheat/extracted_minecraft_data/blob/client1.21.2/client/net/minecraft/world/entity/Relative.java#L82
2152
+ PositionUpdateRelatives: ["bitflags", {
2153
+ "type": "u32",
2154
+ "flags": ["x", "y", "z", "yaw", "pitch", "dx", "dy", "dz", "yawDelta"]
2155
+ }]
2156
+ # PositionUpdateRelatives: ["bitfield", [
2157
+ # # unused bits on top
2158
+ # { "name": "unused", "size": 23, "signed": false },
2159
+ # { "name": "yawDelta", "size": 1, "signed": false },
2160
+ # { "name": "dz", "size": 1, "signed": false },
2161
+ # { "name": "dy", "size": 1, "signed": false },
2162
+ # { "name": "dx", "size": 1, "signed": false },
2163
+ # { "name": "pitch", "size": 1, "signed": false },
2164
+ # { "name": "yaw", "size": 1, "signed": false },
2165
+ # { "name": "z", "size": 1, "signed": false },
2166
+ # { "name": "y", "size": 1, "signed": false },
2167
+ # { "name": "x", "size": 1, "signed": false },
2168
+ # ]]
2342
2169
  # MC: ClientboundPlayerPositionPacket
2343
2170
  packet_position:
2171
+ teleportId: varint
2344
2172
  x: f64
2345
2173
  y: f64
2346
2174
  z: f64
2175
+ dx: f64
2176
+ dy: f64
2177
+ dz: f64
2347
2178
  yaw: f32
2348
2179
  pitch: f32
2349
- flags: i8
2350
- teleportId: varint
2351
- # MC: ClientboundRecipePacket
2352
- packet_unlock_recipes:
2353
- action: varint
2354
- craftingBookOpen: bool
2355
- filteringCraftable: bool
2356
- smeltingBookOpen: bool
2357
- filteringSmeltable: bool
2358
- blastFurnaceOpen: bool
2359
- filteringBlastFurnace: bool
2360
- smokerBookOpen: bool
2361
- filteringSmoker: bool
2362
- recipes1: string[]varint
2363
- recipes2: action ?
2364
- if 0: string[]varint
2365
- default: void
2180
+ flags: PositionUpdateRelatives
2181
+ # MC: ClientboundPlayerRotationPacket
2182
+ packet_player_rotation:
2183
+ yaw: f32
2184
+ pitch: f32
2185
+
2186
+ # MC: ClientboundRecipeBookAddPacket
2187
+ packet_recipe_book_add:
2188
+ entries: []varint
2189
+ # RecipeDisplayEntry
2190
+ recipe:
2191
+ displayId: varint
2192
+ display: RecipeDisplay
2193
+ group: optvarint
2194
+ # This ID corresponds to the "recipe_book_category" registry
2195
+ category: varint =>
2196
+ - crafting_building_blocks
2197
+ - crafting_redstone
2198
+ - crafting_equipment
2199
+ - crafting_misc
2200
+ - furnace_food
2201
+ - furnace_blocks
2202
+ - furnace_misc
2203
+ - blast_furnace_blocks
2204
+ - blast_furnace_misc
2205
+ - smoker_food
2206
+ - stonecutter
2207
+ - smithing
2208
+ - campfire
2209
+ craftingRequirements?: IDSet[]varint
2210
+ flags: ["bitflags", {
2211
+ "type": "u8",
2212
+ "flags": ["notification", "highlight"]
2213
+ }]
2214
+ replace: bool
2215
+ # MC: ClientboundRecipeBookRemovePacket
2216
+ packet_recipe_book_remove:
2217
+ recipeIds: varint[]varint
2218
+ # MC: ClientboundRecipeBookSettingsPacket
2219
+ packet_recipe_book_settings:
2220
+ craftingGuiOpen: bool
2221
+ craftingFilteringCraftable: bool
2222
+ smeltingGuiOpen: bool
2223
+ smeltingFilteringCraftable: bool
2224
+ blastGuiOpen: bool
2225
+ blastFilteringCraftable: bool
2226
+ smokerGuiOpen: bool
2227
+ smokerFilteringCraftable: bool
2366
2228
  # MC: ClientboundRemoveEntitiesPacket
2367
2229
  packet_entity_destroy:
2368
2230
  entityIds: varint[]varint
@@ -2374,16 +2236,6 @@
2374
2236
  packet_reset_score:
2375
2237
  entity_name: string
2376
2238
  objective_name?: string
2377
- # MC: ClientboundResourcePackPopPacket
2378
- packet_remove_resource_pack:
2379
- uuid?: UUID
2380
- # MC: ClientboundResourcePackPushPacket
2381
- packet_add_resource_pack:
2382
- uuid: UUID
2383
- url: string
2384
- hash: string
2385
- forced: bool
2386
- promptMessage?: anonymousNbt
2387
2239
  # MC: ClientboundRespawnPacket
2388
2240
  packet_respawn:
2389
2241
  worldState: SpawnInfo
@@ -2432,9 +2284,6 @@
2432
2284
  # MC: ClientboundSetCameraPacket
2433
2285
  packet_camera:
2434
2286
  cameraId: varint
2435
- # MC: ClientboundSetCarriedItemPacket
2436
- packet_held_item_slot:
2437
- slot: i8
2438
2287
  # MC: ClientboundSetChunkCacheCenterPacket
2439
2288
  packet_update_view_position:
2440
2289
  chunkX: varint
@@ -2442,6 +2291,9 @@
2442
2291
  # MC: ClientboundSetChunkCacheRadiusPacket
2443
2292
  packet_update_view_distance:
2444
2293
  viewDistance: varint
2294
+ # MC: ClientboundSetCursorItemPacket
2295
+ packet_set_cursor_item:
2296
+ contents?: Slot
2445
2297
  # MC: ClientboundSetDefaultSpawnPositionPacket
2446
2298
  packet_spawn_position:
2447
2299
  location: position
@@ -2495,6 +2347,9 @@
2495
2347
  health: f32
2496
2348
  food: varint
2497
2349
  foodSaturation: f32
2350
+ # MC: ClientboundSetHeldSlotPacket
2351
+ packet_held_item_slot:
2352
+ slot: i8
2498
2353
  # MC: ClientboundSetObjectivePacket
2499
2354
  packet_scoreboard_objective:
2500
2355
  name: string
@@ -2531,6 +2386,10 @@
2531
2386
  packet_set_passengers:
2532
2387
  entityId: varint
2533
2388
  passengers: varint[]varint
2389
+ # MC: ClientboundSetPlayerInventoryPacket
2390
+ packet_set_player_inventory:
2391
+ slotId: varint
2392
+ contents?: Slot
2534
2393
  # MC: ClientboundSetPlayerTeamPacket
2535
2394
  packet_teams:
2536
2395
  team: string
@@ -2589,6 +2448,7 @@
2589
2448
  packet_update_time:
2590
2449
  age: i64
2591
2450
  time: i64
2451
+ tickDayTime: bool
2592
2452
  # MC: ClientboundSetTitleTextPacket
2593
2453
  packet_set_title_text:
2594
2454
  text: anonymousNbt
@@ -2757,77 +2617,11 @@
2757
2617
  packet_declare_recipes:
2758
2618
  recipes: []varint
2759
2619
  name: string
2760
- type: varint =>
2761
- - minecraft:crafting_shaped
2762
- - minecraft:crafting_shapeless
2763
- - minecraft:crafting_special_armordye
2764
- - minecraft:crafting_special_bookcloning
2765
- - minecraft:crafting_special_mapcloning
2766
- - minecraft:crafting_special_mapextending
2767
- - minecraft:crafting_special_firework_rocket
2768
- - minecraft:crafting_special_firework_star
2769
- - minecraft:crafting_special_firework_star_fade
2770
- - minecraft:crafting_special_tippedarrow
2771
- - minecraft:crafting_special_bannerduplicate
2772
- - minecraft:crafting_special_shielddecoration
2773
- - minecraft:crafting_special_shulkerboxcoloring
2774
- - minecraft:crafting_special_suspiciousstew
2775
- - minecraft:crafting_special_repairitem
2776
- - minecraft:smelting
2777
- - minecraft:blasting
2778
- - minecraft:smoking
2779
- - minecraft:campfire_cooking
2780
- - minecraft:stonecutting
2781
- - minecraft:smithing_transform
2782
- - minecraft:smithing_trim
2783
- - minecraft:crafting_decorated_pot
2784
- data: type ?
2785
- if minecraft:crafting_shapeless:
2786
- group: string
2787
- category: varint
2788
- ingredients: ingredient[]varint
2789
- result: Slot
2790
- if minecraft:crafting_shaped:
2791
- group: string
2792
- category: varint
2793
- width: varint
2794
- height: varint
2795
- ingredients: []$width
2796
- _: ingredient[]$height
2797
- result: Slot
2798
- showNotification: bool
2799
- if minecraft:crafting_special_armordye: minecraft_simple_recipe_format
2800
- if minecraft:crafting_special_bookcloning: minecraft_simple_recipe_format
2801
- if minecraft:crafting_special_mapcloning: minecraft_simple_recipe_format
2802
- if minecraft:crafting_special_mapextending: minecraft_simple_recipe_format
2803
- if minecraft:crafting_special_firework_rocket: minecraft_simple_recipe_format
2804
- if minecraft:crafting_special_firework_star: minecraft_simple_recipe_format
2805
- if minecraft:crafting_special_firework_star_fade: minecraft_simple_recipe_format
2806
- if minecraft:crafting_special_repairitem: minecraft_simple_recipe_format
2807
- if minecraft:crafting_special_tippedarrow: minecraft_simple_recipe_format
2808
- if minecraft:crafting_special_bannerduplicate: minecraft_simple_recipe_format
2809
- if minecraft:crafting_special_banneraddpattern: minecraft_simple_recipe_format
2810
- if minecraft:crafting_special_shielddecoration: minecraft_simple_recipe_format
2811
- if minecraft:crafting_special_shulkerboxcoloring: minecraft_simple_recipe_format
2812
- if minecraft:crafting_special_suspiciousstew: minecraft_simple_recipe_format
2813
- if minecraft:smelting: minecraft_smelting_format
2814
- if minecraft:blasting: minecraft_smelting_format
2815
- if minecraft:smoking: minecraft_smelting_format
2816
- if minecraft:campfire_cooking: minecraft_smelting_format
2817
- if minecraft:stonecutting:
2818
- group: string
2819
- ingredient: ingredient
2820
- result: Slot
2821
- if minecraft:smithing_transform:
2822
- template: ingredient
2823
- base: ingredient
2824
- addition: ingredient
2825
- result: Slot
2826
- if minecraft:smithing_trim:
2827
- template: ingredient
2828
- base: ingredient
2829
- addition: ingredient
2830
- if minecraft:crafting_decorated_pot: minecraft_simple_recipe_format
2620
+ items: varint[]varint
2621
+ stoneCutterRecipes: []varint
2622
+ input: IDSet
2623
+ slotDisplay: SlotDisplay
2624
+
2831
2625
  # MC: ClientboundUpdateTagsPacket
2832
2626
  packet_tags:
2833
2627
  tags: []varint
@@ -2837,6 +2631,7 @@
2837
2631
  packet_set_projectile_power:
2838
2632
  id: varint
2839
2633
  accelerationPower: f64
2634
+ ## (ClientboundCustomReportDetailsPacket, ClientboundServerLinksPacket is common)
2840
2635
 
2841
2636
  packet:
2842
2637
  name: varint =>
@@ -2872,6 +2667,7 @@
2872
2667
  - kick_disconnect
2873
2668
  - profileless_chat
2874
2669
  - entity_status
2670
+ - sync_entity_position
2875
2671
  - explosion
2876
2672
  - unload_chunk
2877
2673
  - game_state_change
@@ -2888,6 +2684,7 @@
2888
2684
  - trade_list
2889
2685
  - rel_entity_move
2890
2686
  - entity_move_look
2687
+ - move_minecart
2891
2688
  - entity_look
2892
2689
  - vehicle_move
2893
2690
  - open_book
@@ -2905,7 +2702,10 @@
2905
2702
  - player_info
2906
2703
  - face_player
2907
2704
  - position
2908
- - unlock_recipes
2705
+ - player_rotation
2706
+ - recipe_book_add
2707
+ - recipe_book_remove
2708
+ - recipe_book_settings
2909
2709
  - entity_destroy
2910
2710
  - remove_entity_effect
2911
2711
  - reset_score
@@ -2923,9 +2723,9 @@
2923
2723
  - world_border_warning_delay
2924
2724
  - world_border_warning_reach
2925
2725
  - camera
2926
- - held_item_slot
2927
2726
  - update_view_position
2928
2727
  - update_view_distance
2728
+ - set_cursor_item
2929
2729
  - spawn_position
2930
2730
  - scoreboard_display_objective
2931
2731
  - entity_metadata
@@ -2934,8 +2734,10 @@
2934
2734
  - entity_equipment
2935
2735
  - experience
2936
2736
  - update_health
2737
+ - held_item_slot
2937
2738
  - scoreboard_objective
2938
2739
  - set_passengers
2740
+ - set_player_inventory
2939
2741
  - teams
2940
2742
  - scoreboard_score
2941
2743
  - simulation_distance
@@ -2961,6 +2763,9 @@
2961
2763
  - entity_effect
2962
2764
  - declare_recipes
2963
2765
  - tags
2766
+ - set_projectile_power
2767
+ - custom_report_details
2768
+ - server_links
2964
2769
  params: name ?
2965
2770
  if bundle_delimiter: void
2966
2771
  if spawn_entity: packet_spawn_entity
@@ -2994,6 +2799,7 @@
2994
2799
  if kick_disconnect: packet_kick_disconnect
2995
2800
  if profileless_chat: packet_profileless_chat
2996
2801
  if entity_status: packet_entity_status
2802
+ if sync_entity_position: packet_sync_entity_position
2997
2803
  if explosion: packet_explosion
2998
2804
  if unload_chunk: packet_unload_chunk
2999
2805
  if game_state_change: packet_game_state_change
@@ -3010,6 +2816,7 @@
3010
2816
  if trade_list: packet_trade_list
3011
2817
  if rel_entity_move: packet_rel_entity_move
3012
2818
  if entity_move_look: packet_entity_move_look
2819
+ if move_minecart: packet_move_minecart
3013
2820
  if entity_look: packet_entity_look
3014
2821
  if vehicle_move: packet_vehicle_move
3015
2822
  if open_book: packet_open_book
@@ -3027,12 +2834,15 @@
3027
2834
  if player_info: packet_player_info
3028
2835
  if face_player: packet_face_player
3029
2836
  if position: packet_position
3030
- if unlock_recipes: packet_unlock_recipes
2837
+ if player_rotation: packet_player_rotation
2838
+ if recipe_book_add: packet_recipe_book_add
2839
+ if recipe_book_remove: packet_recipe_book_remove
2840
+ if recipe_book_settings: packet_recipe_book_settings
3031
2841
  if entity_destroy: packet_entity_destroy
3032
2842
  if remove_entity_effect: packet_remove_entity_effect
3033
2843
  if reset_score: packet_reset_score
3034
- if remove_resource_pack: packet_remove_resource_pack
3035
- if add_resource_pack: packet_add_resource_pack
2844
+ if remove_resource_pack: packet_common_remove_resource_pack
2845
+ if add_resource_pack: packet_common_add_resource_pack
3036
2846
  if respawn: packet_respawn
3037
2847
  if entity_head_rotation: packet_entity_head_rotation
3038
2848
  if multi_block_change: packet_multi_block_change
@@ -3045,9 +2855,10 @@
3045
2855
  if world_border_warning_delay: packet_world_border_warning_delay
3046
2856
  if world_border_warning_reach: packet_world_border_warning_reach
3047
2857
  if camera: packet_camera
3048
- if held_item_slot: packet_held_item_slot
3049
2858
  if update_view_position: packet_update_view_position
3050
2859
  if update_view_distance: packet_update_view_distance
2860
+ if set_cursor_item: packet_set_cursor_item
2861
+ if held_item_slot: packet_held_item_slot
3051
2862
  if spawn_position: packet_spawn_position
3052
2863
  if scoreboard_display_objective: packet_scoreboard_display_objective
3053
2864
  if entity_metadata: packet_entity_metadata
@@ -3058,6 +2869,7 @@
3058
2869
  if update_health: packet_update_health
3059
2870
  if scoreboard_objective: packet_scoreboard_objective
3060
2871
  if set_passengers: packet_set_passengers
2872
+ if set_player_inventory: packet_set_player_inventory
3061
2873
  if teams: packet_teams
3062
2874
  if scoreboard_score: packet_scoreboard_score
3063
2875
  if simulation_distance: packet_simulation_distance
@@ -3083,6 +2895,9 @@
3083
2895
  if entity_effect: packet_entity_effect
3084
2896
  if declare_recipes: packet_declare_recipes
3085
2897
  if tags: packet_tags
2898
+ if set_projectile_power: packet_set_projectile_power
2899
+ if custom_report_details: packet_common_custom_report_details
2900
+ if server_links: packet_common_server_links
3086
2901
 
3087
2902
  ^play.toServer.types:
3088
2903
  # MC: ServerboundAcceptTeleportationPacket
@@ -3092,6 +2907,10 @@
3092
2907
  packet_query_block_nbt:
3093
2908
  transactionId: varint
3094
2909
  location: position
2910
+ # MC: ServerboundSelectBundleItemPacket
2911
+ packet_select_bundle_item:
2912
+ slotId: varint
2913
+ selectedItemIndex: varint
3095
2914
  # MC: ServerboundChangeDifficultyPacket
3096
2915
  packet_set_difficulty:
3097
2916
  newDifficulty: u8
@@ -3151,6 +2970,9 @@
3151
2970
  # MC: ServerboundClientCommandPacket
3152
2971
  packet_client_command:
3153
2972
  actionId: varint
2973
+ # MC: ServerboundClientTickEndPacket
2974
+ packet_tick_end:
2975
+ # Empty
3154
2976
  # MC: ServerboundClientInformationPacket
3155
2977
  packet_settings:
3156
2978
  locale: string
@@ -3161,6 +2983,10 @@
3161
2983
  mainHand: varint
3162
2984
  enableTextFiltering: bool
3163
2985
  enableServerListing: bool
2986
+ particleStatus: varint =>
2987
+ - all
2988
+ - decreased
2989
+ - minimal
3164
2990
  # MC: ServerboundCommandSuggestionPacket
3165
2991
  packet_tab_complete:
3166
2992
  transactionId: varint
@@ -3170,11 +2996,11 @@
3170
2996
  # Empty
3171
2997
  # MC: ServerboundContainerButtonClickPacket
3172
2998
  packet_enchant_item:
3173
- windowId: i8
2999
+ windowId: ContainerID
3174
3000
  enchantment: i8
3175
3001
  # MC: ServerboundContainerClickPacket
3176
3002
  packet_window_click:
3177
- windowId: u8
3003
+ windowId: ContainerID
3178
3004
  stateId: varint
3179
3005
  slot: i16
3180
3006
  mouseButton: i8
@@ -3185,12 +3011,13 @@
3185
3011
  cursorItem: Slot
3186
3012
  # MC: ServerboundContainerClosePacket
3187
3013
  packet_close_window:
3188
- windowId: u8
3014
+ windowId: ContainerID
3189
3015
  # MC: ServerboundContainerSlotStateChangedPacket
3190
3016
  packet_set_slot_state:
3191
3017
  slot_id: varint
3192
- window_id: varint
3018
+ window_id: ContainerID
3193
3019
  state: bool
3020
+ ## (ServerboundCookieResponsePacket is common)
3194
3021
  # MC: ServerboundCustomPayloadPacket
3195
3022
  packet_custom_payload:
3196
3023
  channel: string
@@ -3236,12 +3063,17 @@
3236
3063
  # MC: ServerboundLockDifficultyPacket
3237
3064
  packet_lock_difficulty:
3238
3065
  locked: bool
3066
+
3067
+ MovementFlags: ["bitflags", {
3068
+ "type": "u8",
3069
+ "flags": ["onGround", "hasHorizontalCollision"]
3070
+ }]
3239
3071
  # MC: ServerboundMovePlayerPacket.Pos
3240
3072
  packet_position:
3241
3073
  x: f64
3242
3074
  y: f64
3243
3075
  z: f64
3244
- onGround: bool
3076
+ flags: MovementFlags
3245
3077
  # MC: ServerboundMovePlayerPacket.PosRot
3246
3078
  packet_position_look:
3247
3079
  x: f64
@@ -3249,15 +3081,15 @@
3249
3081
  z: f64
3250
3082
  yaw: f32
3251
3083
  pitch: f32
3252
- onGround: bool
3084
+ flags: MovementFlags
3253
3085
  # MC: ServerboundMovePlayerPacket.Rot
3254
3086
  packet_look:
3255
3087
  yaw: f32
3256
3088
  pitch: f32
3257
- onGround: bool
3089
+ flags: MovementFlags
3258
3090
  # MC: ServerboundMovePlayerPacket.StatusOnly
3259
3091
  packet_flying:
3260
- onGround: bool
3092
+ flags: MovementFlags
3261
3093
  # MC: ServerboundMoveVehiclePacket
3262
3094
  packet_vehicle_move:
3263
3095
  x: f64
@@ -3277,8 +3109,8 @@
3277
3109
  id: i64
3278
3110
  # MC: ServerboundPlaceRecipePacket
3279
3111
  packet_craft_recipe_request:
3280
- windowId: i8
3281
- recipe: string
3112
+ windowId: ContainerID
3113
+ recipeId: varint
3282
3114
  makeAll: bool
3283
3115
  # MC: ServerboundPlayerAbilitiesPacket
3284
3116
  packet_abilities:
@@ -3295,10 +3127,13 @@
3295
3127
  actionId: varint
3296
3128
  jumpBoost: varint
3297
3129
  # MC: ServerboundPlayerInputPacket
3298
- packet_steer_vehicle:
3299
- sideways: f32
3300
- forward: f32
3301
- jump: u8
3130
+ # previously: packet_steer_vehicle
3131
+ packet_player_input:
3132
+ ## client/net/minecraft/world/entity/player/Input.java
3133
+ inputs: ["bitflags", {
3134
+ "type": "u8",
3135
+ "flags": ["forward", "backward", "left", "right", "jump", "shift", "sprint"]
3136
+ }]
3302
3137
  # MC: ServerboundPongPacket
3303
3138
  packet_pong:
3304
3139
  id: i32
@@ -3309,7 +3144,7 @@
3309
3144
  filterActive: bool
3310
3145
  # MC: ServerboundRecipeBookSeenRecipePacket
3311
3146
  packet_displayed_recipe:
3312
- recipeId: string
3147
+ recipeId: varint
3313
3148
  # MC: ServerboundRenameItemPacket
3314
3149
  packet_name_item:
3315
3150
  name: string
@@ -3399,6 +3234,7 @@
3399
3234
  cursorY: f32
3400
3235
  cursorZ: f32
3401
3236
  insideBlock: bool
3237
+ worldBorderHit: bool
3402
3238
  sequence: varint
3403
3239
  # MC: ServerboundUseItemPacket
3404
3240
  packet_use_item:
@@ -3410,6 +3246,7 @@
3410
3246
  name: varint =>
3411
3247
  - teleport_confirm
3412
3248
  - query_block_nbt
3249
+ - select_bundle_item
3413
3250
  - set_difficulty
3414
3251
  - message_acknowledgement
3415
3252
  - chat_command
@@ -3418,9 +3255,11 @@
3418
3255
  - chat_session_update
3419
3256
  - chunk_batch_received
3420
3257
  - client_command
3258
+ - tick_end
3421
3259
  - settings
3422
3260
  - tab_complete
3423
3261
  - configuration_acknowledged
3262
+ # Maybe rename enchant_item if it is used for other things too
3424
3263
  - enchant_item
3425
3264
  - window_click
3426
3265
  - close_window
@@ -3446,7 +3285,7 @@
3446
3285
  - abilities
3447
3286
  - block_dig
3448
3287
  - entity_action
3449
- - steer_vehicle
3288
+ - player_input
3450
3289
  - pong
3451
3290
  - recipe_book
3452
3291
  - displayed_recipe
@@ -3469,6 +3308,7 @@
3469
3308
  params: name ?
3470
3309
  if teleport_confirm: packet_teleport_confirm
3471
3310
  if query_block_nbt: packet_query_block_nbt
3311
+ if select_bundle_item: packet_select_bundle_item
3472
3312
  if set_difficulty: packet_set_difficulty
3473
3313
  if message_acknowledgement: packet_message_acknowledgement
3474
3314
  if chat_command: packet_chat_command
@@ -3477,6 +3317,7 @@
3477
3317
  if chat_session_update: packet_chat_session_update
3478
3318
  if chunk_batch_received: packet_chunk_batch_received
3479
3319
  if client_command: packet_client_command
3320
+ if tick_end: packet_tick_end
3480
3321
  if settings: packet_settings
3481
3322
  if tab_complete: packet_tab_complete
3482
3323
  if configuration_acknowledged: packet_configuration_acknowledged
@@ -3504,7 +3345,7 @@
3504
3345
  if abilities: packet_abilities
3505
3346
  if block_dig: packet_block_dig
3506
3347
  if entity_action: packet_entity_action
3507
- if steer_vehicle: packet_steer_vehicle
3348
+ if player_input: packet_player_input
3508
3349
  if pong: packet_pong
3509
3350
  if recipe_book: packet_recipe_book
3510
3351
  if displayed_recipe: packet_displayed_recipe