!version: 26.2 !StartDocs: true ^types: varint: native varlong: native optvarint: varint pstring: native buffer: native u8: native u16: native u32: native u64: native i8: native i16: native i32: native i64: native bool: native f32: native f64: native UUID: native option: native entityMetadataLoop: native topBitSetTerminatedArray: native bitfield: native bitflags: native container: native switch: native void: native array: native restBuffer: native anonymousNbt: native anonOptionalNbt: native registryEntryHolder: native registryEntryHolderSet: native lpVec3: native ByteArray: ["buffer", { "countType": "varint" }] string: ["pstring", { "countType": "varint" }] vec2f: x: f32 y: f32 vec3f: x: f32 y: f32 z: f32 vec4f: x: f32 y: f32 z: f32 w: f32 vec3f64: x: f64 y: f64 z: f64 vec3i: x: varint y: varint z: varint vec3i32: x: i32 y: i32 z: i32 IDSet: ["registryEntryHolderSet", { "base": { name: "name", type: "string" }, "otherwise": { name: "ids", type: "varint" } }] ContainerID: varint SlotComponentType: varint => - custom_data - max_stack_size - max_damage - damage - unbreakable - use_effects - custom_name - minimum_attack_charge - damage_type - item_name - item_model - lore - rarity - enchantments - can_place_on - can_break - attribute_modifiers - custom_model_data - tooltip_display - repair_cost - creative_slot_lock - enchantment_glint_override - intangible_projectile - food - consumable - use_remainder - use_cooldown - damage_resistant - tool - weapon - attack_range - enchantable - equippable - repairable - glider - tooltip_style - death_protection - blocks_attacks - piercing_weapon - kinetic_weapon - swing_animation - stored_enchantments - dyed_color - map_color - map_id - map_decorations - map_post_processing - charged_projectiles - bundle_contents - potion_contents - potion_duration_scale - suspicious_stew_effects - writable_book_content - written_book_content - trim - debug_stick_state - entity_data - bucket_entity_data - block_entity_data - instrument - provides_trim_material - ominous_bottle_amplifier - jukebox_playable - provides_banner_patterns - recipes - lodestone_tracker - firework_explosion - fireworks - profile - note_block_sound - banner_patterns - base_color - pot_decorations - container - block_state - bees - lock - container_loot - break_sound - villager/variant - wolf/variant - wolf/sound_variant - wolf/collar - fox/variant - salmon/size - parrot/variant - tropical_fish/pattern - tropical_fish/base_color - tropical_fish/pattern_color - mooshroom/variant - rabbit/variant - pig/variant - cow/variant - chicken/variant - zombie_nautilus/variant - frog/variant - horse/variant - painting/variant - llama/variant - axolotl/variant - cat/variant - cat/collar - sheep/color - shulker/color # Instead of sending NBT for items over the network, Minecraft since 1.20.5 sends a # list of components that make up the item. This saves bandwidth by not encoding tag names. SlotComponent: type: SlotComponentType ## Ref: client/net/minecraft/core/component/DataComponents.java data: type ? ## 'Unit' MC type is functionally void if custom_data: anonymousNbt if max_stack_size: varint if max_damage: varint if damage: varint if unbreakable: void if use_effects: can_sprint: bool interact_vibrations: bool speed_multiplier: f32 if custom_name: anonymousNbt if minimum_attack_charge: f32 if damage_type: hasHolder: bool damageType: hasHolder ? if true: ["registryEntryHolder", { "baseName": "damageTypeId", "otherwise": { "name": "data", "type": "DamageTypeData" } }] if false: string if item_name: anonymousNbt if item_model: string if lore: anonymousNbt[]varint if rarity: varint => - common - uncommon - rare - epic if enchantments or stored_enchantments: enchantments: []varint id: varint level: varint if can_place_on or can_break: predicates: ItemBlockPredicate[]varint if attribute_modifiers: []varint typeId: varint name: string value: f64 operation: varint => - add - multiply_base - multiply_total slot: varint => - any - main_hand - off_hand - hand - feet - legs - chest - head - armor - body - saddle display: type: varint => - default - hidden - override component: type ? if override: anonymousNbt if custom_model_data: floats: f32[]varint flags: bool[]varint strings: string[]varint colors: i32[]varint if tooltip_display: hideTooltip: bool hiddenComponents: varint[]varint if repair_cost: varint if creative_slot_lock: void if enchantment_glint_override: bool if intangible_projectile: void if blocks_attacks: blockDelaySeconds: f32 disableCooldownScale: f32 damageReductions: []varint horizontalBlockingAngle: f32 type?: IDSet base: f32 factor: f32 itemDamage: threshold: f32 base: f32 factor: f32 bypassedBy?: string blockSound?: ItemSoundHolder disableSound?: ItemSoundHolder if food: nutrition: varint # How much saturation will be given after consuming the item. saturationModifier: f32 # Whether the item can always be eaten, even at full hunger. canAlwaysEat: bool if consumable: consume_seconds: f32 animation: varint => - none - eat - drink - block - bow - spear - crossbow - spyglass - toot_horn - brush - bundle sound: ItemSoundHolder makes_particles: bool effects: ItemConsumeEffect[]varint if use_remainder: Slot if use_cooldown: seconds: f32 cooldownGroup?: string if damage_resistant: string if tool: rules: []varint blocks: IDSet # The speed at which the tool breaks this rules' blocks. speed?: f32 # Whether items should drop only if this is the correct tool. correctDropForBlocks?: bool # The mining speed in case none of the previous rule were matched. defaultMiningSpeed: f32 damagePerBlock: varint canDestroyBlocksInCreative: bool if weapon: itemDamagePerAttack: varint disableBlockingForSeconds: f32 if attack_range: minRange: f32 maxRange: f32 minCreativeRange: f32 maxCreativeRange: f32 hitboxMargin: f32 mobFactor: f32 # Enchantment cost up to which the item can be enchanted if enchantable: varint if equippable: slot: varint => - main_hand - off_hand - feet - legs - chest - head - body - saddle sound: ItemSoundHolder model?: string cameraOverlay?: string allowedEntities?: IDSet dispensable: bool swappable: bool damageable: bool equipOnInteract: bool shearable: bool shearingSound: ItemSoundHolder if repairable: items: IDSet if glider: void if tooltip_style: string if death_protection: effects: ItemConsumeEffect[]varint if piercing_weapon: dealsKnockback: bool dismounts: bool sound?: ItemSoundHolder hitSound?: ItemSoundHolder if kinetic_weapon: contactCooldownTicks: varint delayTicks: varint dismountConditions?: KineticWeaponCondition knockbackConditions?: KineticWeaponCondition damageConditions?: KineticWeaponCondition forwardMovement: f32 damageMultiplier: f32 sound?: ItemSoundHolder hitSound?: ItemSoundHolder if swing_animation: type: varint => - none - whack - stab duration: varint if dyed_color: i32 if map_color: i32 if map_id: varint if map_decorations: anonymousNbt if map_post_processing: varint if potion_duration_scale: f32 if charged_projectiles: projectiles: Slot[]varint if bundle_contents: contents: Slot[]varint if potion_contents: # True if this potion has an ID in the potion registry--it has the default effects associated with the potion type. potionId?: varint # The RGB components of the color, encoded as an integer. customColor?: i32 customEffects: ItemPotionEffect[]varint customName?: string if suspicious_stew_effects: effects: []varint # The ID of the effect in the potion effect type registry. effect: varint # The duration of the effect. duration: varint if writable_book_content: # Max 100 pages pages: ItemBookPage[]varint if written_book_content: rawTitle: string filteredTitle?: string author: string generation: varint pages: ItemWrittenBookPage[]varint resolved: bool if trim: material: ["registryEntryHolder", { "baseName": "materialId", "otherwise": { "name": "data", "type": "ArmorTrimMaterial" } }] pattern: ["registryEntryHolder", { "baseName": "patternId", "otherwise": { "name": "data", "type": "ArmorTrimPattern" } }] if debug_stick_state: anonymousNbt if entity_data or block_entity_data: type: varint data: anonymousNbt if bucket_entity_data: anonymousNbt if instrument: hasHolder: bool data: hasHolder ? if true: ["registryEntryHolder", { "baseName": "instrumentId", "otherwise": { "name": "data", "type": "InstrumentData" } }] if false: string if provides_trim_material: hasHolder: bool material: hasHolder ? if true: ["registryEntryHolder", { "baseName": "materialId", "otherwise": { "name": "data", "type": "ArmorTrimMaterial" } }] if false: string if ominous_bottle_amplifier: varint if jukebox_playable: hasHolder: bool song: hasHolder ? if true: ["registryEntryHolder", { "baseName": "songId", "otherwise": { "name": "data", "type": "JukeboxSongData" } }] if false: string if provides_banner_patterns: string if recipes: anonymousNbt if lodestone_tracker: # Specified if this lodestone points to a position; otherwise it spins randomly. globalPosition?: GlobalPos # Whether the component is removed when the associated lodestone is broken. tracked: bool if firework_explosion: ItemFireworkExplosion if fireworks: flightDuration: varint explosions: ItemFireworkExplosion[]varint if profile: ResolvableProfile if note_block_sound: string if banner_patterns: layers: BannerPatternLayer[]varint if base_color: varint if pot_decorations: # The ID of the items in the item registry. decorations: varint[]varint if container: contents: Slot[]varint if block_state: properties: []varint name: string value: string if bees: bees: []varint # Custom data for the entity, always a Compound Tag. Same structure as the minecraft:custom_data component. nbtData: anonymousNbt ticksInHive: varint minTicksInHive: varint if lock: anonymousNbt if container_loot: anonymousNbt if break_sound: ItemSoundHolder if villager/variant: varint if wolf/variant: varint if wolf/sound_variant: varint if wolf/collar: varint if fox/variant: varint if salmon/size: varint if parrot/variant: varint if tropical_fish/pattern: varint if tropical_fish/base_color: varint if tropical_fish/pattern_color: varint if mooshroom/variant: varint if rabbit/variant: varint if pig/variant: varint if cow/variant: varint if chicken/variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { "name": "variantData", "type": "string" } }] if zombie_nautilus/variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { "name": "variantData", "type": "string" } }] if frog/variant: varint if horse/variant: varint if painting/variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { "name": "data", "type": "EntityMetadataPaintingVariant" } }] if llama/variant: varint if axolotl/variant: varint if cat/variant: varint if cat/collar: varint if sheep/color: varint if shulker/color: varint ItemSoundEvent: soundName: string fixedRange?: f32 ItemSoundHolder: ["registryEntryHolder", { "baseName": "soundId", "otherwise": { name: "data", type: "ItemSoundEvent" } }] ItemFireworkExplosion: shape: varint => - small_ball - large_ball - star - creeper - burst # The RGB components of the color, encoded as an integer. colors: i32[]varint # The RGB components of the color, encoded as an integer. fadeColors: i32[]varint # Whether the firework has a trail. hasTrail: bool # Whether the firework has a twinkle effect. hasTwinkle: bool ItemEffectDetail: amplifier: varint duration: varint ambient: bool showParticles: bool showIcon: bool hiddenEffect?: ItemEffectDetail ItemPotionEffect: id: varint details: ItemEffectDetail ItemBlockProperty: name: string isExactMatch: bool value: isExactMatch ? if true: exactValue: string if false: minValue: string maxValue: string ExactComponentMatcher: SlotComponent[]varint DataComponentMatchers: exactMatchers: ExactComponentMatcher partialMatchers: varint[]varint ItemBlockPredicate: blockSet?: ["registryEntryHolderSet", { "base": { name: "name", type: "string" }, "otherwise": { name: "blockIds", "type": "varint" } }] properties?: ItemBlockProperty[]varint nbt: anonOptionalNbt components: DataComponentMatchers ItemBookPage: # The raw text of the page. TextComponent, max 1024 characters. content: string filteredContent?: string ItemWrittenBookPage: content: anonymousNbt filteredContent: anonOptionalNbt ItemConsumeEffect: # 1.21.3 type: varint => - apply_effects - remove_effects - clear_all_effects - teleport_randomly - play_sound _: type ? if apply_effects: effects: ItemPotionEffect[]varint probability: f32 if remove_effects: effects: IDSet if clear_all_effects: void if teleport_randomly: diameter: f32 if play_sound: sound: ItemSoundHolder ArmorTrimMaterial: assetBase: string overrideArmorAssets: []varint key: string value: string description: anonymousNbt ArmorTrimPattern: assetId: string description: anonymousNbt decal: bool InstrumentData: soundEvent: ItemSoundHolder useDuration: f32 range: f32 description: anonymousNbt JukeboxSongData: soundEvent: ItemSoundHolder description: anonymousNbt lengthInSeconds: f32 comparatorOutput: varint BannerPattern: assetId: string translationKey: string BannerPatternLayer: pattern: ["registryEntryHolder", { "baseName": "patternId", "otherwise": { "name": "data", "type": "BannerPattern" } }] colorId: varint DamageTypeData: msgId: string scaling: varint => - never - when_caused_by_living_non_player - always exhaustion: f32 effects: varint => - hurt - thorns - drowning - burning - poking - freezing deathMessageType: varint => - default - fall_variants - intentional_game_design KineticWeaponCondition: maxDurationTicks: varint minSpeed: f32 minRelativeSpeed: f32 # This represents a single component within an UntrustedSlot. # The 'data' field is a varint-prefixed byte array that contains the actual component data. # The code generator will need to know that it should read a varint for length, then the bytes. UntrustedSlotComponent: type: SlotComponentType data: ByteArray # An UntrustedSlot is structurally identical to a regular Slot, # but it uses the special UntrustedSlotComponent type for its component list. # It's optional because the player might be clearing the slot. UntrustedSlot: itemCount: varint _: itemCount ? if 0: void default: itemId: varint addedComponentCount: varint removedComponentCount: varint components: UntrustedSlotComponent[]$addedComponentCount removeComponents: []$removedComponentCount type: SlotComponentType if false: void Slot: itemCount: varint _: itemCount ? if 0: void default: itemId: varint # https://wiki.vg/Slot_Data#Structured_components addedComponentCount: varint removedComponentCount: varint components: SlotComponent[]$addedComponentCount removeComponents: []$removedComponentCount type: SlotComponentType HashedSlot: itemId: varint itemCount: varint components: []varint type: SlotComponentType hash: i32 removeComponents: []varint type: SlotComponentType RespawnData: globalPos: GlobalPos yaw: f32 pitch: f32 GlobalPos: dimensionName: string location: position DebugStructureInfo: boundingBoxMin: position boundingBoxMax: position pieces: []varint boundingBoxMin: position boundingBoxMax: position isStart: bool Node: position: vec3i32 walkedDistance: f32 costMalus: f32 closed: bool type: varint => - blocked - open - walkable - walkable_door - trapdoor - powder_snow - danger_powder_snow - fence - lava - water - water_border - rail - unpassable_rail - danger_fire - damage_fire - danger_other - damage_other - door_open - door_wood_closed - door_iron_closed - breach - leaves - sticky_honey - cocoa - damage_cautious - danger_trapdoor f: f32 PathDebugData: openSet: Node[]varint closedSet: Node[]varint targetNodes: Node[]varint Path: reached: bool nextNodeIndex: i32 target: position nodes: Node[]varint debugData: PathDebugData DebugSubscriptionDataType: varint => - DedicatedServerTickTime - Bees - Brains - Breezes - GoalSelectors - EntityPaths - EntityBlockIntersections - BeeHives - Pois - RedstoneWireOrientations - VillageSections - Raids - Structures - GameEventListeners - NeighborUpdates - GameEvents DebugSubscriptionUpdate: type: DebugSubscriptionDataType _: type ? if DedicatedServerTickTime: void default: payload?: type ? if DedicatedServerTickTime or VillageSections: void if Bees: # DebugSubscriptionDataBeeInfo hivePos?: position flowerPos?: position travelTicks: varint blacklistedHives: position[]varint if Brains: # DebugSubscriptionDataBrainDump name: string profession: string xp: i32 health: f32 maxHealth: f32 inventory: string wantsGolem: bool angerLevel: i32 activities: string[]varint behaviors: string[]varint memories: string[]varint gossips: string[]varint pois: position[]varint potentialPois: position[]varint if Breezes: # DebugSubscriptionDataBreezeInfo attackTarget?: varint jumpTarget?: position if GoalSelectors: # DebugSubscriptionDataGoalInfo goals: []varint priority: varint running: bool name: string if EntityPaths: # DebugSubscriptionDataPathInfo path: Path maxNodeDistance: f32 if EntityBlockIntersections: # DebugSubscriptionDataEntityBlockIntersection id: varint if BeeHives: # DebugSubscriptionDataHiveInfo type: varint occupantCount: varint honeyLevel: varint sedated: bool if Pois: # DebugSubscriptionDataPoiInfo pos: position poiType: varint freeTicketCount: varint if RedstoneWireOrientations: # DebugSubscriptionDataOrientation index: varint if Raids: # DebugSubscriptionDataRaids positions: position[]varint if Structures: # DebugSubscriptionDataStructures structures: DebugStructureInfo[]varint if GameEventListeners: # DebugSubscriptionDataGameEventListenerInfo listenerRadius: varint if NeighborUpdates: # DebugSubscriptionDataNeighbor pos: position if GameEvents: # DebugSubscriptionDataGameEventInfo event: varint pos: vec3f64 DebugSubscriptionEvent: type: DebugSubscriptionDataType value: type ? if DedicatedServerTickTime or VillageSections: void if Bees: # DebugSubscriptionDataBeeInfo hivePos?: position flowerPos?: position travelTicks: varint blacklistedHives: position[]varint if Brains: # DebugSubscriptionDataBrainDump name: string profession: string xp: i32 health: f32 maxHealth: f32 inventory: string wantsGolem: bool angerLevel: i32 activities: string[]varint behaviors: string[]varint memories: string[]varint gossips: string[]varint pois: position[]varint potentialPois: position[]varint if Breezes: # DebugSubscriptionDataBreezeInfo attackTarget?: varint jumpTarget?: position if GoalSelectors: # DebugSubscriptionDataGoalInfo priority: varint running: bool name: string if EntityPaths: # DebugSubscriptionDataPathInfo path: Path maxNodeDistance: f32 if EntityBlockIntersections: # DebugSubscriptionDataEntityBlockIntersection id: varint if BeeHives: # DebugSubscriptionDataHiveInfo type: varint occupantCount: varint honeyLevel: varint sedated: bool if Pois: # DebugSubscriptionDataPoiInfo pos: position poiType: varint freeTicketCount: varint if RedstoneWireOrientations: # DebugSubscriptionDataOrientation index: varint if Raids: # DebugSubscriptionDataRaids positions: position[]varint if Structures: # DebugSubscriptionDataStructures structures: DebugStructureInfo[]varint if GameEventListeners: # DebugSubscriptionDataGameEventListenerInfo listenerRadius: varint if NeighborUpdates: # DebugSubscriptionDataNeighbor pos: position if GameEvents: # DebugSubscriptionDataGameEventInfo event: varint pos: vec3f64 Particle: # See client/net/minecraft/core/particles/ParticleTypes.java type: varint => - angry_villager - block - block_marker - bubble - cloud - copper_fire_flame - crit - damage_indicator - dragon_breath - dripping_lava - falling_lava - landing_lava - dripping_water - falling_water - dust - dust_color_transition - effect - elder_guardian - enchanted_hit - enchant - end_rod - entity_effect - explosion_emitter - explosion - gust - small_gust - gust_emitter_large - gust_emitter_small - sonic_boom - falling_dust - firework - fishing - flame - infested - cherry_leaves - pale_oak_leaves - tinted_leaves - sculk_soul - sculk_charge - sculk_charge_pop - soul_fire_flame - soul - flash - happy_villager - composter - heart - instant_effect - item - vibration - trail - item_slime - item_cobweb - item_snowball - large_smoke - lava - mycelium - note - poof - portal - rain - smoke - white_smoke - sneeze - spit - squid_ink - sweep_attack - totem_of_undying - underwater - splash - witch - bubble_pop - current_down - bubble_column_up - nautilus - dolphin - campfire_cosy_smoke - campfire_signal_smoke - dripping_honey - falling_honey - landing_honey - falling_nectar - falling_spore_blossom - ash - crimson_spore - warped_spore - spore_blossom_air - dripping_obsidian_tear - falling_obsidian_tear - landing_obsidian_tear - reverse_portal - white_ash - small_flame - snowflake - dripping_dripstone_lava - falling_dripstone_lava - dripping_dripstone_water - falling_dripstone_water - glow_squid_ink - glow - wax_on - wax_off - electric_spark - scrape - shriek - egg_crack - dust_plume - trial_spawner_detected_player - trial_spawner_detected_player_ominous - vault_connection - dust_pillar - ominous_spawning - raid_omen - trial_omen - block_crumble - firefly ## ## Tips for reviewing particle data (as of 1.20.5) ## Inside the registry code, each particle can have an associated "options" type and ## each options type can add additional data to be encoded. ## For example, this line ## public static final ParticleType BLOCK = register("block", false, BlockParticleOption::codec, BlockParticleOption::streamCodec); ## will read the stream codec from BlockParticleOption.java's streamCodec member; then we see ## return ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY).map(var1 -> new BlockParticleOption(var0, var1), var0x -> var0x.state); ## this encodes with the ByteBufCodecs.idMapper function. Inside this function we find ## public void encode(ByteBuf var1x, T var2) { ## int var3 = var1.applyAsInt(var2); ## VarInt.write(var1x, var3); ## } ## which as we can see writes the varint to the buffer. ## If you want to see all the serializers try regexp searching "StreamCodec.*Particle" data: type ? if block or block_marker or falling_dust or dust_pillar or block_crumble: varint if dust: red: f32 green: f32 blue: f32 scale: f32 if dust_color_transition: fromRed: f32 fromGreen: f32 fromBlue: f32 scale: f32 toRed: f32 toGreen: f32 toBlue: f32 if entity_effect: i32 if item: Slot if sculk_charge: f32 if shriek: varint if vibration: positionType: varint => - block - entity position: positionType ? if block: position if entity: entityId: varint entityEyeHeight: f32 ticks: varint if trail: target: vec3f64 color: u8 if tinted_leaves: i32 if firefly: void if dragon_breath: power: f32 if effect or instant_effect: color: i32 power: f32 if flash: i32 ingredient: Slot[]varint position: [ "bitfield", [ { "name": "x", "size": 26, "signed": true }, { "name": "z", "size": 26, "signed": true }, { "name": "y", "size": 12, "signed": true } ] ] soundSource: varint => 0: master 1: music 2: record 3: weather 4: block 5: hostile 6: neutral 7: player 8: ambient 9: voice 10: ui packedChunkPos: z: i32 x: i32 previousMessages: []varint id: varint signature: id ? if 0: [ "buffer", { "count": 256 } ] default: void entityMetadataEntry: key: u8 type: varint => - byte - int - long - float - string - component - optional_component - item_stack - boolean - rotations - block_pos - optional_block_pos - direction - optional_uuid - block_state - optional_block_state - particle - particles - villager_data - optional_unsigned_int - pose - cat_variant - cow_variant - wolf_variant - wolf_sound_variant - frog_variant - pig_variant - chicken_variant - zombie_nautilus_variant - optional_global_pos - painting_variant - sniffer_state - armadillo_state - copper_golem_state - weathering_copper_golem_state - vector3 - quaternion - resolvable_profile - humanoid_arm value: type ? if byte: i8 if int: varint if long: varlong if float: f32 if string: string if component: anonymousNbt if optional_component: ["option", "anonymousNbt"] if item_stack: Slot if boolean: bool if rotations: pitch: f32 yaw: f32 roll: f32 if block_pos: position if optional_block_pos: ["option", "position"] if direction: varint if optional_uuid: ["option", "UUID"] if block_state: varint if optional_block_state: optvarint if particle: Particle if particles: Particle[]varint if villager_data: villagerType: varint villagerProfession: varint level: varint if optional_unsigned_int: optvarint if pose: varint if cat_variant: varint if cow_variant: varint if wolf_variant: varint if wolf_sound_variant: varint if frog_variant: varint if pig_variant: varint if chicken_variant: varint if zombie_nautilus_variant: varint if optional_global_pos: ["option", "GlobalPos"] if painting_variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { name: "variantData", type: "EntityMetadataPaintingVariant" } }] if sniffer_state: varint if armadillo_state: varint if copper_golem_state: varint if weathering_copper_golem_state: varint if vector3: vec3f if quaternion: vec4f if resolvable_profile: ResolvableProfile if humanoid_arm: varint => - left - right EntityMetadataPaintingVariant: width: i32 height: i32 assetId: string title?: anonymousNbt author?: anonymousNbt entityMetadata: ["entityMetadataLoop", { "endVal": 255, "type": "entityMetadataEntry" }] tags: []varint tagName: string entries: varint[]varint chunkBlockEntity: _: [ "bitfield", [ { "name": "x", "size": 4, "signed": false }, { "name": "z", "size": 4, "signed": false } ] ] y: i16 type: varint nbtData: anonOptionalNbt chat_session?: uuid: UUID publicKey: expireTime: i64 keyBytes: [ "buffer", { "countType": "varint" } ] keySignature: [ "buffer", { "countType": "varint" } ] # No UUID game_profile_name_prop: name: string properties: GameProfileProperty[]varint # With UUID GameProfile: uuid: UUID name: string properties: GameProfileProperty[]varint PartialResolvableProfile: name?: string uuid?: UUID properties: GameProfileProperty[]varint GameProfileProperty: name: string value: string signature?: string ResolvableProfile: type: varint => - partial - complete _: type ? if partial: PartialResolvableProfile if complete: GameProfile skinPatch: PlayerSkinPatch PlayerSkinPatch: body?: string cape?: string elytra?: string model?: varint => - wide - slim command_node: flags: [ "bitfield", [ { "name": "unused", "size": 2, "signed": false }, { "name": "allows_restricted", "size": 1, "signed": false }, { "name": "has_custom_suggestions", "size": 1, "signed": false }, { "name": "has_redirect_node", "size": 1, "signed": false }, { "name": "has_command", "size": 1, "signed": false }, { "name": "command_node_type", "size": 2, "signed": false } ] ] children: varint[]varint redirectNode: flags/has_redirect_node ? if 1: varint default: void extraNodeData: flags/command_node_type ? if 0: void if 1: name: string if 2: name: string parser: varint => - brigadier:bool - brigadier:float - brigadier:double - brigadier:integer - brigadier:long - brigadier:string - minecraft:entity - minecraft:game_profile - minecraft:block_pos - minecraft:column_pos - minecraft:vec3 - minecraft:vec2 - minecraft:block_state - minecraft:block_predicate - minecraft:item_stack - minecraft:item_predicate - minecraft:color - minecraft:hex_color # 1.21.6 - minecraft:component - minecraft:style - minecraft:message - minecraft:nbt - minecraft:nbt_tag - minecraft:nbt_path - minecraft:objective - minecraft:objective_criteria - minecraft:operation - minecraft:particle - minecraft:angle - minecraft:rotation - minecraft:scoreboard_slot - minecraft:score_holder - minecraft:swizzle - minecraft:team - minecraft:item_slot - minecraft:item_slots # 1.20.5 - minecraft:resource_location - minecraft:function - minecraft:entity_anchor - minecraft:int_range - minecraft:float_range - minecraft:dimension - minecraft:gamemode - minecraft:time - minecraft:resource_or_tag - minecraft:resource_or_tag_key - minecraft:resource - minecraft:resource_key - minecraft:resource_selector - minecraft:template_mirror - minecraft:template_rotation - minecraft:heightmap - minecraft:loot_table # 1.20.5 - minecraft:loot_predicate # 1.20.5 - minecraft:loot_modifier # 1.20.5 - minecraft:dialog # 1.21.6 - minecraft:uuid properties: parser ? if brigadier:bool: void if brigadier:float: flags: [ "bitfield", [ { "name": "unused", "size": 6, "signed": false }, { "name": "max_present", "size": 1, "signed": false }, { "name": "min_present", "size": 1, "signed": false } ] ] min: flags/min_present ? if 1: f32 default: void max: flags/max_present ? if 1: f32 default: void if brigadier:double: flags: [ "bitfield", [ { "name": "unused", "size": 6, "signed": false }, { "name": "max_present", "size": 1, "signed": false }, { "name": "min_present", "size": 1, "signed": false } ] ] min: flags/min_present ? if 1: f64 default: void max: flags/max_present ? if 1: f64 default: void if brigadier:integer: flags: [ "bitfield", [ { "name": "unused", "size": 6, "signed": false }, { "name": "max_present", "size": 1, "signed": false }, { "name": "min_present", "size": 1, "signed": false } ] ] min: flags/min_present ? if 1: i32 default: void max: flags/max_present ? if 1: i32 default: void if brigadier:long: flags: [ "bitfield", [ { "name": "unused", "size": 6, "signed": false }, { "name": "max_present", "size": 1, "signed": false }, { "name": "min_present", "size": 1, "signed": false } ] ] min: flags/min_present ? if 1: i64 default: void max: flags/max_present ? if 1: i64 default: void if brigadier:string: varint => 0: SINGLE_WORD 1: QUOTABLE_PHRASE 2: GREEDY_PHRASE if minecraft:entity: [ "bitfield", [ { "name": "unused", "size": 6, "signed": false }, { "name": "onlyAllowPlayers", "size": 1, "signed": false }, { "name": "onlyAllowEntities", "size": 1, "signed": false } ] ] if minecraft:game_profile: void if minecraft:block_pos: void if minecraft:column_pos: void if minecraft:vec3: void if minecraft:vec2: void if minecraft:block_state: void if minecraft:block_predicate: void if minecraft:item_stack: void if minecraft:item_predicate: void if minecraft:color: void if minecraft:hex_color: void if minecraft:component: void if minecraft:message: void if minecraft:nbt: void if minecraft:nbt_path: void if minecraft:objective: void if minecraft:objective_criteria: void if minecraft:operation: void if minecraft:particle: void if minecraft:angle: void if minecraft:rotation: void if minecraft:scoreboard_slot: void if minecraft:score_holder: [ "bitfield", [ { "name": "unused", "size": 7, "signed": false }, { "name": "allowMultiple", "size": 1, "signed": false } ] ] if minecraft:swizzle: void if minecraft:team: void if minecraft:item_slot: void if minecraft:resource_location: void if minecraft:function: void if minecraft:entity_anchor: void if minecraft:int_range: void if minecraft:float_range: void if minecraft:dimension: void if minecraft:gamemode: void if minecraft:time: min: i32 if minecraft:resource_or_tag or minecraft:resource_or_tag_key or minecraft:resource or minecraft:resource_key or minecraft:resource_selector: registry: string if minecraft:template_mirror: void if minecraft:template_rotation: void if minecraft:heightmap: void if minecraft:dialog: void if minecraft:uuid: void suggestionType: ../flags/has_custom_suggestions ? if 1: string default: void # # Shared Packets # These are packets that are shared between multiple states. # They are defined here to avoid duplication. # ===== # MC: ServerboundClientInformationPacket packet_common_settings: locale: string viewDistance: i8 chatFlags: varint chatColors: bool skinParts: u8 mainHand: varint enableTextFiltering: bool enableServerListing: bool particleStatus: varint => - all - decreased - minimal # MC: ClientboundCookieRequestPacket packet_common_cookie_request: cookie: string # MC: ClientboundStoreCookiePacket packet_common_store_cookie: key: string value: ByteArray # MC: ClientboundTransferPacket packet_common_transfer: host: string port: varint # MC: ServerboundCookieResponsePacket packet_common_cookie_response: key: string value?: ByteArray # MC: ServerboundSelectKnownPacks # MC: ClientboundSelectKnownPacks packet_common_select_known_packs: packs: []varint namespace: string id: string version: string # MC: ClientboundCustomReportDetailsPacket packet_common_custom_report_details: details: []varint key: string value: string # MC: ClientboundResourcePackPopPacket packet_common_remove_resource_pack: uuid?: UUID # MC: ClientboundResourcePackPushPacket packet_common_add_resource_pack: uuid: UUID url: string hash: string forced: bool promptMessage?: anonymousNbt ServerLinkType: varint => - bug_report - community_guidelines - support - status - feedback - community - website - forums - news - announcements # MC: ClientboundServerLinksPacket # This packet contains a list of links that the Notchian client will display in the menu # available from the pause menu. Link labels can be built-in or custom (i.e., any text). packet_common_server_links: links: []varint hasKnownType: bool knownType: hasKnownType ? if true: ServerLinkType unknownType: hasKnownType ? if false: anonymousNbt link: string # MC: ClientboundClearDialogPacket packet_common_clear_dialog: # empty # MC: ServerboundCustomClickActionPacket packet_common_custom_click_action: id: string nbt?: anonymousNbt ^handshaking.toClient.types: packet: name: varint => params: ["switch",{"compareTo":"name","fields":{}}] ^handshaking.toServer.types: packet_set_protocol: protocolVersion: varint serverHost: string serverPort: u16 nextState: varint packet_legacy_server_list_ping: payload: u8 packet: name: varint => 0x00: set_protocol 0xfe: legacy_server_list_ping params: name ? if set_protocol: packet_set_protocol if legacy_server_list_ping: packet_legacy_server_list_ping ^status.toClient.types: # MC: ClientboundStatusResponsePacket packet_server_info: response: string # MC: ClientboundPongResponsePacket packet_ping: time: i64 packet: name: varint => 0x00: server_info 0x01: ping params: name ? if server_info: packet_server_info if ping: packet_ping ^status.toServer.types: # MC: ServerboundStatusRequestPacket packet_ping_start: # Empty # MC: ServerboundPingRequestPacket packet_ping: time: i64 packet: name: varint => 0x00: ping_start 0x01: ping params: name ? if ping_start: packet_ping_start if ping: packet_ping ^login.toClient.types: # MC: ClientboundLoginDisconnectPacket packet_disconnect: reason: string # MC: ClientboundHelloPacket packet_encryption_begin: serverId: string publicKey: [ "buffer", { "countType": "varint" } ] verifyToken: [ "buffer", { "countType": "varint" } ] shouldAuthenticate: bool # MC: ClientboundLoginFinishedPacket packet_success: uuid: UUID username: string properties: []varint name: string value: string signature?: string sessionId: UUID # MC: ClientboundLoginCompressionPacket packet_compress: threshold: varint # MC: ClientboundCustomQueryPacket packet_login_plugin_request: messageId: varint channel: string data: restBuffer ## (Cookie Request is Common) ## packet: name: varint => - disconnect - encryption_begin - success - compress - login_plugin_request - cookie_request params: name ? if disconnect: packet_disconnect if encryption_begin: packet_encryption_begin if success: packet_success if compress: packet_compress if login_plugin_request: packet_login_plugin_request if cookie_request: packet_common_cookie_request ^login.toServer.types: # MC: ServerboundHelloPacket packet_login_start: username: string playerUUID: UUID # MC: ServerboundKeyPacket packet_encryption_begin: sharedSecret: [ "buffer", { "countType": "varint" } ] verifyToken: [ "buffer", { "countType": "varint" } ] # MC: ServerboundCustomQueryAnswerPacket packet_login_plugin_response: messageId: varint data?: restBuffer # MC: ServerboundLoginAcknowledgedPacket packet_login_acknowledged: # Empty ## (Cookie Response is Common) ## packet: name: varint => - login_start - encryption_begin - login_plugin_response - login_acknowledged - cookie_response params: name ? if login_start: packet_login_start if encryption_begin: packet_encryption_begin if login_plugin_response: packet_login_plugin_response if login_acknowledged: packet_login_acknowledged if cookie_response: packet_common_cookie_response ^configuration.toClient.types: ## (Cookie Request is common) # MC: ClientboundCodeOfConductPacket packet_code_of_conduct: contents: string # MC: ClientboundCustomPayloadPacket packet_custom_payload: channel: string data: restBuffer # MC: ClientboundDisconnectPacket packet_disconnect: reason: anonymousNbt # MC: ClientboundFinishConfigurationPacket packet_finish_configuration: # Empty # MC: ClientboundKeepAlivePacket packet_keep_alive: keepAliveId: i64 # MC: ClientboundPingPacket packet_ping: id: i32 # MC: ClientboundResetChatPacket packet_reset_chat: # Empty # MC: ClientboundRegistryDataPacket packet_registry_data: # The server can send multiple registries id: string entries: []varint key: string value?: anonymousNbt ## (Store cookie and Transfer are Common) ## # MC: ClientboundUpdateEnabledFeaturesPacket packet_feature_flags: features: string[]varint # MC: ClientboundUpdateTagsPacket packet_tags: tags: []varint tagType: string tags: tags ## (Select known packs is common) # MC: ClientboundShowDialogConfigurationPacket packet_show_dialog: dialog: anonymousNbt packet: name: varint => - cookie_request - custom_payload - disconnect - finish_configuration - keep_alive - ping - reset_chat - registry_data - remove_resource_pack - add_resource_pack - store_cookie - transfer - feature_flags - tags - select_known_packs - custom_report_details - server_links - clear_dialog - show_dialog - code_of_conduct params: name ? if cookie_request: packet_common_cookie_request if custom_payload: packet_custom_payload if disconnect: packet_disconnect if finish_configuration: packet_finish_configuration if keep_alive: packet_keep_alive if ping: packet_ping if reset_chat: packet_reset_chat if registry_data: packet_registry_data if remove_resource_pack: packet_common_remove_resource_pack if add_resource_pack: packet_common_add_resource_pack if store_cookie: packet_common_store_cookie if transfer: packet_common_transfer if feature_flags: packet_feature_flags if tags: packet_tags if select_known_packs: packet_common_select_known_packs if custom_report_details: packet_common_custom_report_details if server_links: packet_common_server_links if clear_dialog: packet_common_clear_dialog if show_dialog: packet_show_dialog if code_of_conduct: packet_code_of_conduct ^configuration.toServer.types: ## (Settings is Common) ## ## (Cookie Response is Common) ## # MC: ServerboundAcceptCodeOfConductPacket packet_accept_code_of_conduct: # Empty # MC: ServerboundCustomPayloadPacket packet_custom_payload: channel: string data: restBuffer # MC: ServerboundFinishConfigurationPacket packet_finish_configuration: # Empty # MC: ServerboundKeepAlivePacket packet_keep_alive: keepAliveId: i64 # MC: ServerboundPongPacket packet_pong: id: i32 # MC: ServerboundResourcePackPacket packet_resource_pack_receive: uuid: UUID result: varint packet: name: varint => - settings - cookie_response - custom_payload - finish_configuration - keep_alive - pong - resource_pack_receive - select_known_packs - custom_click_action - accept_code_of_conduct params: name ? if settings: packet_common_settings if cookie_response: packet_common_cookie_response if custom_payload: packet_custom_payload if finish_configuration: packet_finish_configuration if keep_alive: packet_keep_alive if pong: packet_pong if resource_pack_receive: packet_resource_pack_receive if select_known_packs: packet_common_select_known_packs if custom_click_action: packet_common_custom_click_action if accept_code_of_conduct: packet_accept_code_of_conduct ^play.toClient.types: # MC: ClientboundBundleDelimiterPacket packet_bundle_delimiter: # empty SlotDisplay: type: varint => - empty - any_fuel - item - item_stack - tag - smithing_trim - with_remainder - composite data: type ? if empty or any_fuel: void if item: varint if item_stack: Slot if tag: string if smithing_trim: base: SlotDisplay material: SlotDisplay pattern: ["registryEntryHolder", { "baseName": "patternId", "otherwise": { "name": "data", "type": "ArmorTrimPattern" } }] if with_remainder: input: SlotDisplay remainder: SlotDisplay if composite: SlotDisplay[]varint RecipeDisplay: type: varint => - crafting_shapeless - crafting_shaped - furnace - stonecutter - smithing data: type ? if crafting_shapeless: ingredients: SlotDisplay[]varint result: SlotDisplay craftingStation: SlotDisplay if crafting_shaped: width: varint height: varint ingredients: SlotDisplay[]varint result: SlotDisplay craftingStation: SlotDisplay if furnace: ingredient: SlotDisplay fuel: SlotDisplay result: SlotDisplay craftingStation: SlotDisplay duration: varint experience: f32 if stonecutter: ingredient: SlotDisplay result: SlotDisplay craftingStation: SlotDisplay if smithing: template: SlotDisplay base: SlotDisplay addition: SlotDisplay result: SlotDisplay craftingStation: SlotDisplay # World state information for spawn and respawn packets SpawnInfo: dimension: varint name: string hashedSeed: i64 gamemode: i8 => - survival - creative - adventure - spectator previousGamemode: u8 isDebug: bool isFlat: bool death?: GlobalPos portalCooldown: varint seaLevel: varint # MC: ClientboundAddEntityPacket packet_spawn_entity: entityId: varint objectUUID: UUID type: varint x: f64 y: f64 z: f64 velocity: lpVec3 pitch: i8 yaw: i8 headPitch: i8 objectData: varint # MC: ClientboundAnimatePacket packet_animation: entityId: varint animation: u8 # MC: ClientboundAwardStatsPacket packet_statistics: entries: []varint categoryId: varint statisticId: varint value: varint # MC: ClientboundBlockChangedAckPacket packet_acknowledge_player_digging: sequenceId: varint # MC: ClientboundBlockDestructionPacket packet_block_break_animation: entityId: varint location: position destroyStage: i8 # MC: ClientboundBlockEntityDataPacket packet_tile_entity_data: location: position action: varint nbtData: anonOptionalNbt # MC: ClientboundBlockEventPacket packet_block_action: location: position byte1: u8 byte2: u8 blockId: varint # MC: ClientboundBlockUpdatePacket packet_block_change: location: position type: varint # MC: ClientboundBossEventPacket packet_boss_bar: entityUUID: UUID action: varint title: action ? if 0: anonymousNbt if 3: anonymousNbt default: void health: action ? if 0: f32 if 2: f32 default: void color: action ? if 0: varint if 4: varint default: void dividers: action ? if 0: varint if 4: varint default: void flags: action ? if 0: u8 if 5: u8 default: void # MC: ClientboundChangeDifficultyPacket packet_difficulty: difficulty: varint => 0: peaceful 1: easy 2: normal 3: hard difficultyLocked: bool # MC: ClientboundChunkBatchFinishedPacket packet_chunk_batch_finished: batchSize: varint # MC: ClientboundChunkBatchStartPacket packet_chunk_batch_start: # Empty # MC: ClientboundChunksBiomesPacket packet_chunk_biomes: biomes: []varint position: packedChunkPos data: ByteArray # MC: ClientboundClearTitlesPacket packet_clear_titles: reset: bool # MC: ClientboundCommandSuggestionsPacket packet_tab_complete: transactionId: varint start: varint length: varint matches: []varint match: string tooltip?: anonymousNbt # MC: ClientboundCommandsPacket packet_declare_commands: nodes: command_node[]varint rootIndex: varint # MC: ClientboundContainerClosePacket packet_close_window: windowId: ContainerID # MC: ClientboundContainerSetContentPacket packet_window_items: windowId: ContainerID stateId: varint items: Slot[]varint carriedItem: Slot # MC: ClientboundContainerSetDataPacket packet_craft_progress_bar: windowId: ContainerID property: i16 value: i16 # MC: ClientboundContainerSetSlotPacket packet_set_slot: windowId: ContainerID stateId: varint slot: i16 item: Slot ## (Cookie Request is Common) # MC: ClientboundCooldownPacket packet_set_cooldown: # TODO: figure out what this is cooldownGroup: string cooldownTicks: varint # MC: ClientboundCustomChatCompletionsPacket packet_chat_suggestions: action: varint entries: string[]varint # MC: ClientboundCustomPayloadPacket packet_custom_payload: channel: string data: restBuffer # MC: ClientboundDamageEventPacket packet_damage_event: entityId: varint sourceTypeId: varint sourceCauseId: varint sourceDirectId: varint sourcePosition?: vec3f64 # MC: ClientboundDebugBlockValuePacket packet_debug_block_value: blockPos: position update: DebugSubscriptionUpdate # MC: ClientboundDebugChunkValuePacket packet_debug_chunk_value: chunkPos: packedChunkPos update: DebugSubscriptionUpdate # MC: ClientboundEntityEntityValuePacket packet_debug_entity_value: entityId: varint update: DebugSubscriptionUpdate # MC: ClientboundDebugEventPacket packet_debug_event: event: DebugSubscriptionEvent # MC: ClientboundDebugSamplePacket packet_debug_sample: sample: i64[]varint type: varint # MC: ClientboundDeleteChatPacket packet_hide_message: id: varint signature: id ? if 0: [ "buffer", { "count": 256 } ] default: void # MC: ClientboundDisconnectPacket packet_kick_disconnect: reason: anonymousNbt ## client\net\minecraft\network\chat\ChatTypeDecoration.java ## via client\net\minecraft\network\chat\ChatType.java ChatTypeParameterType: varint => - content - sender - target ChatType: translationKey: string parameters: ChatTypeParameterType[]varint style: anonymousNbt ChatTypes: chat: ChatType narration: ChatType ChatTypesHolder: ["registryEntryHolder", { "baseName": "chatType", "otherwise": { name: "data", type: "ChatTypes" } }] # MC: ClientboundDisguisedChatPacket packet_profileless_chat: message: anonymousNbt type: ChatTypesHolder name: anonymousNbt target?: anonymousNbt # MC: ClientboundEntityEventPacket packet_entity_status: entityId: i32 entityStatus: i8 # MC: ClientboundEntityPositionSyncPacket packet_sync_entity_position: entityId: varint x: f64 y: f64 z: f64 dx: f64 dy: f64 dz: f64 yaw: f32 pitch: f32 onGround: bool ExplosionParticleInfo: particle: Particle scaling: f32 speed: f32 ExplosionParticleEntry: data: ExplosionParticleInfo weight: varint # MC: ClientboundExplodePacket packet_explosion: center: vec3f64 radius: f32 blockCount: i32 playerKnockback?: vec3f64 explosionParticle: Particle sound: ItemSoundHolder blockParticles: ExplosionParticleEntry[]varint # MC: ClientboundForgetLevelChunkPacket packet_unload_chunk: chunkZ: i32 chunkX: i32 # MC: ClientboundGameEventPacket packet_game_state_change: reason: u8 => 0: no_respawn_block_available 1: start_raining 2: stop_raining 3: change_game_mode 4: win_game 5: demo_event 6: play_arrow_hit_sound 7: rain_level_change 8: thunder_level_change 9: puffer_fish_sting 10: guardian_elder_effect 11: immediate_respawn 12: limited_crafting 13: level_chunks_load_start gameMode: f32 # MC: ClientboundGameRuleValuesPacket packet_game_rule_values: values: []varint key: string value: string # MC: ClientboundGameTestHighlightPosPacket packet_game_test_highlight_pos: absolutePos: position relativePos: position # MC: ClientboundHorseScreenOpenPacket packet_open_horse_window: windowId: ContainerID nbSlots: varint entityId: i32 # MC: ClientboundHurtAnimationPacket packet_hurt_animation: entityId: varint yaw: f32 # MC: ClientboundInitializeBorderPacket packet_initialize_world_border: x: f64 z: f64 oldDiameter: f64 newDiameter: f64 speed: varint portalTeleportBoundary: varint warningBlocks: varint warningTime: varint # MC: ClientboundKeepAlivePacket packet_keep_alive: keepAliveId: i64 # MC: ClientboundLevelChunkWithLightPacket packet_map_chunk: x: i32 z: i32 heightmaps: []varint type: varint => 0: world_surface_wg 1: world_surface 2: ocean_floor_wg 3: ocean_floor 4: motion_blocking 5: motion_blocking_no_leaves data: i64[]varint chunkData: ByteArray blockEntities: chunkBlockEntity[]varint skyLightMask: i64[]varint blockLightMask: i64[]varint emptySkyLightMask: i64[]varint emptyBlockLightMask: i64[]varint skyLight: []varint _: u8[]varint blockLight: []varint _: u8[]varint # MC: ClientboundLevelEventPacket packet_world_event: effectId: i32 location: position data: i32 global: bool # MC: ClientboundLevelParticlesPacket packet_world_particles: longDistance: bool alwaysShow: bool x: f64 y: f64 z: f64 offsetX: f32 offsetY: f32 offsetZ: f32 velocityOffset: f32 amount: i32 particle: Particle # MC: ClientboundLightUpdatePacket packet_update_light: chunkX: varint chunkZ: varint skyLightMask: i64[]varint blockLightMask: i64[]varint emptySkyLightMask: i64[]varint emptyBlockLightMask: i64[]varint skyLight: []varint _: u8[]varint blockLight: []varint _: u8[]varint # MC: ClientboundLoginPacket packet_login: entityId: i32 isHardcore: bool worldNames: string[]varint maxPlayers: varint viewDistance: varint simulationDistance: varint reducedDebugInfo: bool enableRespawnScreen: bool doLimitedCrafting: bool worldState: SpawnInfo enforcesSecureChat: bool # MC: ClientboundMapItemDataPacket packet_map: itemDamage: varint scale: i8 locked: bool icons?: []varint type: varint x: i8 z: i8 direction: u8 displayName?: anonymousNbt columns: u8 rows: columns ? if 0: void default: u8 x: columns ? if 0: void default: u8 y: columns ? if 0: void default: u8 data: columns ? if 0: void default: [ "buffer", { "countType": "varint" } ] # MC: ClientboundMerchantOffersPacket packet_trade_list: windowId: ContainerID ## https://github.com/extremeheat/extracted_minecraft_data/blob/client1.20.5/client/net/minecraft/world/item/trading/MerchantOffer.java#L210 trades: []varint inputItem1: itemId: varint itemCount: varint components: ExactComponentMatcher outputItem: Slot inputItem2?: itemId: varint itemCount: varint components: ExactComponentMatcher tradeDisabled: bool nbTradeUses: i32 maximumNbTradeUses: i32 xp: i32 specialPrice: i32 priceMultiplier: f32 demand: i32 villagerLevel: varint experience: varint isRegularVillager: bool canRestock: bool # MC: ClientboundMoveEntityPacket.Pos packet_rel_entity_move: entityId: varint dX: i16 dY: i16 dZ: i16 onGround: bool # MC: ClientboundMoveEntityPacket.PosRot packet_entity_move_look: entityId: varint dX: i16 dY: i16 dZ: i16 yaw: i8 pitch: i8 onGround: bool # MC: ClientboundMoveMinecartPacket packet_move_minecart: # 1.21.3 entityId: varint steps: []varint position: vec3f velocity: vec3f yaw: f32 pitch: f32 weight: f32 # MC: ClientboundMoveEntityPacket.Rot packet_entity_look: entityId: varint yaw: i8 pitch: i8 onGround: bool # MC: ClientboundMoveVehiclePacket packet_vehicle_move: x: f64 y: f64 z: f64 yaw: f32 pitch: f32 # MC: ClientboundOpenBookPacket packet_open_book: hand: varint # MC: ClientboundOpenScreenPacket packet_open_window: windowId: varint inventoryType: varint windowTitle: anonymousNbt # MC: ClientboundOpenSignEditorPacket packet_open_sign_entity: location: position isFrontText: bool # MC: ClientboundPingPacket packet_ping: id: i32 # MC: ClientboundPongResponsePacket packet_ping_response: id: i64 # MC: ClientboundPlaceGhostRecipePacket packet_craft_recipe_response: windowId: ContainerID recipeDisplay: RecipeDisplay # MC: ClientboundPlayerAbilitiesPacket packet_abilities: flags: i8 flyingSpeed: f32 walkingSpeed: f32 # MC: ClientboundPlayerChatPacket packet_player_chat: globalIndex: varint senderUuid: UUID index: varint signature?: [ "buffer", { "count": 256 } ] plainMessage: string timestamp: i64 salt: i64 previousMessages: previousMessages unsignedChatContent?: anonymousNbt filterType: varint filterTypeMask: filterType ? if 2: i64[]varint default: void type: ChatTypesHolder networkName: anonymousNbt networkTargetName?: anonymousNbt # MC: ClientboundPlayerCombatEndPacket packet_end_combat_event: duration: varint # MC: ClientboundPlayerCombatEnterPacket packet_enter_combat_event: # Empty # MC: ClientboundPlayerCombatKillPacket packet_death_combat_event: playerId: varint message: anonymousNbt # MC: ClientboundPlayerInfoRemovePacket packet_player_remove: players: UUID[]varint # MC: ClientboundPlayerInfoUpdatePacket packet_player_info: ## ClientboundPlayerInfoUpdatePacket.java#L160 action: ["bitflags", { "type": "u8", "flags": [ "add_player", "initialize_chat", "update_game_mode", "update_listed", "update_latency", "update_display_name", "update_hat", "update_list_order" ] }] data: []varint uuid: UUID player: ../action/add_player ? if true: game_profile_name_prop default: void chatSession: ../action/initialize_chat ? if true: chat_session default: void gamemode: ../action/update_game_mode ? if true: varint default: void listed: ../action/update_listed ? if true: varint default: void latency: ../action/update_latency ? if true: varint default: void displayName: ../action/update_display_name ? if true: ["option", "anonymousNbt"] default: void listPriority: ../action/update_list_order ? if true: varint default: void showHat: ../action/update_hat ? if true: bool default: void # MC: ClientboundPlayerLookAtPacket packet_face_player: feet_eyes: varint x: f64 y: f64 z: f64 isEntity: bool entityId: isEntity ? if true: varint default: void entity_feet_eyes: isEntity ? if true: varint default: void # https://github.com/extremeheat/extracted_minecraft_data/blob/client1.21.2/client/net/minecraft/world/entity/Relative.java#L82 PositionUpdateRelatives: ["bitflags", { "type": "u32", "flags": ["x", "y", "z", "yaw", "pitch", "dx", "dy", "dz", "yawDelta"] }] # MC: ClientboundPlayerPositionPacket packet_position: teleportId: varint x: f64 y: f64 z: f64 dx: f64 dy: f64 dz: f64 yaw: f32 pitch: f32 flags: PositionUpdateRelatives # MC: ClientboundPlayerRotationPacket packet_player_rotation: yaw: f32 relativeYaw: bool pitch: f32 relativePitch: bool # MC: ClientboundRecipeBookAddPacket packet_recipe_book_add: entries: []varint # RecipeDisplayEntry recipe: displayId: varint display: RecipeDisplay group: optvarint # This ID corresponds to the "recipe_book_category" registry category: varint => - crafting_building_blocks - crafting_redstone - crafting_equipment - crafting_misc - furnace_food - furnace_blocks - furnace_misc - blast_furnace_blocks - blast_furnace_misc - smoker_food - stonecutter - smithing - campfire craftingRequirements?: IDSet[]varint flags: ["bitflags", { "type": "u8", "flags": ["notification", "highlight"] }] replace: bool # MC: ClientboundRecipeBookRemovePacket packet_recipe_book_remove: recipeIds: varint[]varint # MC: ClientboundRecipeBookSettingsPacket RecipeBookSetting: open: bool filtering: bool packet_recipe_book_settings: crafting: RecipeBookSetting furnace: RecipeBookSetting blast: RecipeBookSetting smoker: RecipeBookSetting # MC: ClientboundLowDiskSpaceWarningPacket packet_low_disk_space_warning: # Empty # MC: ClientboundRemoveEntitiesPacket packet_entity_destroy: entityIds: varint[]varint # MC: ClientboundRemoveMobEffectPacket packet_remove_entity_effect: entityId: varint effectId: varint # MC: ClientboundResetScorePacket packet_reset_score: entity_name: string objective_name?: string ## (remove_resource_pack is common) # MC: ClientboundRespawnPacket packet_respawn: worldState: SpawnInfo # Bit field: 0b1 - KEEP_ATTRIBUTE_MODIFIERS, 0b10 - KEEP_ENTITY_DATA copyMetadata: u8 # MC: ClientboundRotateHeadPacket packet_entity_head_rotation: entityId: varint headYaw: i8 # MC: ClientboundSectionBlocksUpdatePacket packet_multi_block_change: chunkCoordinates: [ "bitfield", [ { "name": "x", "size": 22, "signed": true }, { "name": "z", "size": 22, "signed": true }, { "name": "y", "size": 20, "signed": true } ]] records: varint[]varint # MC: ClientboundSelectAdvancementsTabPacket packet_select_advancement_tab: id?: string # MC: ClientboundServerDataPacket packet_server_data: motd: anonymousNbt iconBytes?: ByteArray # MC: ClientboundSetActionBarTextPacket packet_action_bar: text: anonymousNbt # MC: ClientboundSetBorderCenterPacket packet_world_border_center: x: f64 z: f64 # MC: ClientboundSetBorderLerpSizePacket packet_world_border_lerp_size: oldDiameter: f64 newDiameter: f64 speed: varint # MC: ClientboundSetBorderSizePacket packet_world_border_size: diameter: f64 # MC: ClientboundSetBorderWarningDelayPacket packet_world_border_warning_delay: warningTime: varint # MC: ClientboundSetBorderWarningDistancePacket packet_world_border_warning_reach: warningBlocks: varint # MC: ClientboundSetCameraPacket packet_camera: cameraId: varint # MC: ClientboundSetChunkCacheCenterPacket packet_update_view_position: chunkX: varint chunkZ: varint # MC: ClientboundSetChunkCacheRadiusPacket packet_update_view_distance: viewDistance: varint # MC: ClientboundSetCursorItemPacket packet_set_cursor_item: contents: Slot # MC: ClientboundSetDefaultSpawnPositionPacket packet_spawn_position: RespawnData # MC: ClientboundSetDisplayObjectivePacket packet_scoreboard_display_objective: position: varint name: string # MC: ClientboundSetEntityDataPacket packet_entity_metadata: entityId: varint metadata: entityMetadata # MC: ClientboundSetEntityLinkPacket packet_attach_entity: entityId: i32 vehicleId: i32 # MC: ClientboundSetEntityMotionPacket packet_entity_velocity: entityId: varint velocity: lpVec3 # MC: ClientboundSetEquipmentPacket packet_entity_equipment: entityId: varint equipments: [ "topBitSetTerminatedArray", { "type": [ "container", [ { "name": "slot", "type": "i8" }, { "name": "item", "type": "Slot" } ] ] } ] # MC: ClientboundSetExperiencePacket packet_experience: experienceBar: f32 level: varint totalExperience: varint # MC: ClientboundSetHealthPacket packet_update_health: health: f32 food: varint foodSaturation: f32 # MC: ClientboundSetHeldSlotPacket packet_held_item_slot: slot: varint # MC: ClientboundSetObjectivePacket packet_scoreboard_objective: name: string action: i8 displayText: action ? if 0: anonymousNbt if 2: anonymousNbt default: void type: action ? if 0: varint if 2: varint default: void number_format: action ? if 0: [ "option", "varint" ] if 2: [ "option", "varint" ] default: void styling: action ? if 0: number_format ? if 1: anonymousNbt if 2: anonymousNbt default: void if 2: number_format ? if 1: anonymousNbt if 2: anonymousNbt default: void default: void # MC: ClientboundSetPassengersPacket packet_set_passengers: entityId: varint passengers: varint[]varint # MC: ClientboundSetPlayerInventoryPacket packet_set_player_inventory: slotId: varint contents: Slot # MC: ClientboundSetPlayerTeamPacket packet_teams: team: string mode: i8 => - add - remove - change - join - leave _: mode ? if add or change: name: anonymousNbt flags: ["bitflags", { "type": "u8", "flags": ["friendly_fire", "see_friendly_invisible"] }] nameTagVisibility: varint => - always - never - hide_for_other_teams - hide_for_own_team collisionRule: varint => - always - never - push_other_teams - push_own_team formatting: varint prefix: anonymousNbt suffix: anonymousNbt default: void players: mode ? if add or join or leave: string[]varint default: void # MC: ClientboundSetScorePacket packet_scoreboard_score: itemName: string scoreName: string value: varint display_name?: anonymousNbt number_format?: varint styling: number_format ? if 1: anonymousNbt if 2: anonymousNbt default: void # MC: ClientboundSetSimulationDistancePacket packet_simulation_distance: distance: varint # MC: ClientboundSetSubtitleTextPacket packet_set_title_subtitle: text: anonymousNbt # MC: ClientboundSetTimePacket packet_update_time: age: i64 time: i64 tickDayTime: bool # MC: ClientboundSetTitleTextPacket packet_set_title_text: text: anonymousNbt # MC: ClientboundSetTitlesAnimationPacket packet_set_title_time: fadeIn: i32 stay: i32 fadeOut: i32 # MC: ClientboundSoundEntityPacket packet_entity_sound_effect: sound: ItemSoundHolder soundCategory: soundSource entityId: varint volume: f32 pitch: f32 seed: i64 # MC: ClientboundSoundPacket packet_sound_effect: sound: ItemSoundHolder soundCategory: soundSource x: i32 y: i32 z: i32 volume: f32 pitch: f32 seed: i64 # MC: ClientboundStartConfigurationPacket packet_start_configuration: # Empty # MC: ClientboundStopSoundPacket packet_stop_sound: flags: i8 source: flags ? if 1: varint if 3: varint default: void sound: flags ? if 2: string if 3: string default: void ## (Store Cookie is Common) # MC: ClientboundSystemChatPacket packet_system_chat: content: anonymousNbt isActionBar: bool # MC: ClientboundTabListPacket packet_playerlist_header: header: anonymousNbt footer: anonymousNbt # MC: ClientboundTagQueryPacket packet_nbt_query_response: transactionId: varint nbt: anonOptionalNbt # MC: ClientboundTakeItemEntityPacket packet_collect: collectedEntityId: varint collectorEntityId: varint pickupItemCount: varint # MC: ClientboundTeleportEntityPacket packet_entity_teleport: entityId: varint x: f64 y: f64 z: f64 yaw: i8 pitch: i8 onGround: bool # MC: ClientboundTestInstanceBlockStatusPacket packet_test_instance_block_status: status: anonymousNbt size?: vec3i # MC: ClientboundTickingStatePacket packet_set_ticking_state: tick_rate: f32 is_frozen: bool # MC: ClientboundTickingStepPacket packet_step_tick: tick_steps: varint ## (Transfer is common) # MC: ClientboundUpdateAdvancementsPacket packet_advancements: reset: bool advancementMapping: []varint key: string value: parentId?: string displayData?: title: anonymousNbt description: anonymousNbt icon: Slot frameType: varint flags: ["bitfield", [ { "name": "unused", "size": 29, "signed": false }, { "name": "hidden", "size": 1, "signed": false }, { "name": "show_toast", "size": 1, "signed": false }, { "name": "has_background_texture", "size": 1, "signed": false } ]] backgroundTexture: flags/has_background_texture ? if 1: string default: void xCord: f32 yCord: f32 requirements: []varint _: string[]varint sendsTelemtryData: bool identifiers: string[]varint progressMapping: []varint key: string value: []varint criterionIdentifier: string criterionProgress?: i64 showAdvancements: bool # MC: ClientboundUpdateAttributesPacket packet_entity_update_attributes: entityId: varint properties: []varint key: varint => - generic.armor - generic.armor_toughness - generic.attack_damage - generic.attack_knockback - generic.attack_speed - player.block_break_speed - player.block_interaction_range - burning_time - camera_distance - explosion_knockback_resistance - player.entity_interaction_range - generic.fall_damage_multiplier - generic.flying_speed - generic.follow_range - generic.gravity - generic.jump_strength - generic.knockback_resistance - generic.luck - generic.max_absorption - generic.max_health - generic.movement_speed - generic.safe_fall_distance - generic.scale - zombie.spawn_reinforcements - generic.step_height - submerged_mining_speed - sweeping_damage_ratio - tempt_range - water_movement_efficiency - waypoint_transmit_range - waypoint_receive_range value: f64 modifiers: []varint uuid: string amount: f64 operation: i8 # MC: ClientboundUpdateMobEffectPacket packet_entity_effect: entityId: varint effectId: varint amplifier: varint duration: varint # a bitfield of 0x01 for ambient, 0x02 for show particles # flags: ["bitfield", [ # { "name": "unused", "size": 4 }, # { "name": "ambient", "size": 1 }, # { "name": "showParticles", "size": 1 }, # { "name": "showIcon", "size": 1 }, # { "name": "blend", "size": 1 } # ]] flags: u8 # MC: ClientboundUpdateRecipesPacket packet_declare_recipes: recipes: []varint name: string items: varint[]varint stoneCutterRecipes: []varint input: IDSet slotDisplay: SlotDisplay # MC: ClientboundUpdateTagsPacket packet_tags: tags: []varint tagType: string tags: tags # MC: ClientboundProjectilePowerPacket packet_set_projectile_power: id: varint accelerationPower: f64 ## (ClientboundCustomReportDetailsPacket, ClientboundServerLinksPacket is common) # MC: ClientboundTrackedWaypointPacket packet_tracked_waypoint: operation: varint => 0: track 1: untrack 2: update waypoint: hasUUID: bool _: hasUUID ? if true: uuid: UUID if false: id: string icon: style: string color?: red: u8 green: u8 blue: u8 type: varint => 0: empty 1: vec3i 2: chunk 3: azimuth data: type ? if vec3i: vec3i if chunk: chunkX: varint chunkZ: varint if azimuth: f32 ## (clear_dialog is common) # MC: ClientboundShowDialogGamePacket packet_show_dialog: dialog: ["registryEntryHolder", { "baseName": "dialog", "otherwise": { "name": "data", "type": "anonymousNbt" } }] packet: name: varint => - bundle_delimiter - spawn_entity - animation - statistics - acknowledge_player_digging - block_break_animation - tile_entity_data - block_action - block_change - boss_bar - difficulty - chunk_batch_finished - chunk_batch_start - chunk_biomes - clear_titles - tab_complete - declare_commands - close_window - window_items - craft_progress_bar - set_slot - cookie_request - set_cooldown - chat_suggestions - custom_payload - damage_event - debug_block_value - debug_chunk_value - debug_entity_value - debug_event - debug_sample - hide_message - kick_disconnect - profileless_chat - entity_status - sync_entity_position - explosion - unload_chunk - game_state_change - game_rule_values - game_test_highlight_pos - open_horse_window - hurt_animation - initialize_world_border - keep_alive - map_chunk - world_event - world_particles - update_light - login - low_disk_space_warning - map - trade_list - rel_entity_move - entity_move_look - move_minecart - entity_look - vehicle_move - open_book - open_window - open_sign_entity - ping - ping_response - craft_recipe_response - abilities - player_chat - end_combat_event - enter_combat_event - death_combat_event - player_remove - player_info - face_player - position - player_rotation - recipe_book_add - recipe_book_remove - recipe_book_settings - entity_destroy - remove_entity_effect - reset_score - remove_resource_pack - add_resource_pack - respawn - entity_head_rotation - multi_block_change - select_advancement_tab - server_data - action_bar - world_border_center - world_border_lerp_size - world_border_size - world_border_warning_delay - world_border_warning_reach - camera - update_view_position - update_view_distance - set_cursor_item - spawn_position - scoreboard_display_objective - entity_metadata - attach_entity - entity_velocity - entity_equipment - experience - update_health - held_item_slot - scoreboard_objective - set_passengers - set_player_inventory - teams - scoreboard_score - simulation_distance - set_title_subtitle - update_time - set_title_text - set_title_time - entity_sound_effect - sound_effect - start_configuration - stop_sound - store_cookie - system_chat - playerlist_header - nbt_query_response - collect - entity_teleport - test_instance_block_status - set_ticking_state - step_tick - transfer - advancements - entity_update_attributes - entity_effect - declare_recipes - tags - set_projectile_power - custom_report_details - server_links - tracked_waypoint - clear_dialog - show_dialog params: name ? if bundle_delimiter: packet_bundle_delimiter if spawn_entity: packet_spawn_entity if animation: packet_animation if statistics: packet_statistics if acknowledge_player_digging: packet_acknowledge_player_digging if block_break_animation: packet_block_break_animation if tile_entity_data: packet_tile_entity_data if block_action: packet_block_action if block_change: packet_block_change if boss_bar: packet_boss_bar if difficulty: packet_difficulty if chunk_batch_finished: packet_chunk_batch_finished if chunk_batch_start: packet_chunk_batch_start if chunk_biomes: packet_chunk_biomes if clear_titles: packet_clear_titles if tab_complete: packet_tab_complete if declare_commands: packet_declare_commands if close_window: packet_close_window if window_items: packet_window_items if craft_progress_bar: packet_craft_progress_bar if set_slot: packet_set_slot if cookie_request: packet_common_cookie_request if set_cooldown: packet_set_cooldown if chat_suggestions: packet_chat_suggestions if custom_payload: packet_custom_payload if damage_event: packet_damage_event if debug_block_value: packet_debug_block_value if debug_chunk_value: packet_debug_chunk_value if debug_entity_value: packet_debug_entity_value if debug_event: packet_debug_event if debug_sample: packet_debug_sample if hide_message: packet_hide_message if kick_disconnect: packet_kick_disconnect if profileless_chat: packet_profileless_chat if entity_status: packet_entity_status if sync_entity_position: packet_sync_entity_position if explosion: packet_explosion if unload_chunk: packet_unload_chunk if game_state_change: packet_game_state_change if game_rule_values: packet_game_rule_values if game_test_highlight_pos: packet_game_test_highlight_pos if open_horse_window: packet_open_horse_window if hurt_animation: packet_hurt_animation if initialize_world_border: packet_initialize_world_border if keep_alive: packet_keep_alive if map_chunk: packet_map_chunk if world_event: packet_world_event if world_particles: packet_world_particles if update_light: packet_update_light if login: packet_login if low_disk_space_warning: packet_low_disk_space_warning if map: packet_map if trade_list: packet_trade_list if rel_entity_move: packet_rel_entity_move if entity_move_look: packet_entity_move_look if move_minecart: packet_move_minecart if entity_look: packet_entity_look if vehicle_move: packet_vehicle_move if open_book: packet_open_book if open_window: packet_open_window if open_sign_entity: packet_open_sign_entity if ping: packet_ping if ping_response: packet_ping_response if craft_recipe_response: packet_craft_recipe_response if abilities: packet_abilities if player_chat: packet_player_chat if end_combat_event: packet_end_combat_event if enter_combat_event: packet_enter_combat_event if death_combat_event: packet_death_combat_event if player_remove: packet_player_remove if player_info: packet_player_info if face_player: packet_face_player if position: packet_position if player_rotation: packet_player_rotation if recipe_book_add: packet_recipe_book_add if recipe_book_remove: packet_recipe_book_remove if recipe_book_settings: packet_recipe_book_settings if entity_destroy: packet_entity_destroy if remove_entity_effect: packet_remove_entity_effect if reset_score: packet_reset_score if remove_resource_pack: packet_common_remove_resource_pack if add_resource_pack: packet_common_add_resource_pack if respawn: packet_respawn if entity_head_rotation: packet_entity_head_rotation if multi_block_change: packet_multi_block_change if select_advancement_tab: packet_select_advancement_tab if server_data: packet_server_data if action_bar: packet_action_bar if world_border_center: packet_world_border_center if world_border_lerp_size: packet_world_border_lerp_size if world_border_size: packet_world_border_size if world_border_warning_delay: packet_world_border_warning_delay if world_border_warning_reach: packet_world_border_warning_reach if camera: packet_camera if update_view_position: packet_update_view_position if update_view_distance: packet_update_view_distance if set_cursor_item: packet_set_cursor_item if held_item_slot: packet_held_item_slot if spawn_position: packet_spawn_position if scoreboard_display_objective: packet_scoreboard_display_objective if entity_metadata: packet_entity_metadata if attach_entity: packet_attach_entity if entity_velocity: packet_entity_velocity if entity_equipment: packet_entity_equipment if experience: packet_experience if update_health: packet_update_health if scoreboard_objective: packet_scoreboard_objective if set_passengers: packet_set_passengers if set_player_inventory: packet_set_player_inventory if teams: packet_teams if scoreboard_score: packet_scoreboard_score if simulation_distance: packet_simulation_distance if set_title_subtitle: packet_set_title_subtitle if update_time: packet_update_time if set_title_text: packet_set_title_text if set_title_time: packet_set_title_time if entity_sound_effect: packet_entity_sound_effect if sound_effect: packet_sound_effect if start_configuration: packet_start_configuration if stop_sound: packet_stop_sound if store_cookie: packet_common_store_cookie if system_chat: packet_system_chat if playerlist_header: packet_playerlist_header if nbt_query_response: packet_nbt_query_response if collect: packet_collect if entity_teleport: packet_entity_teleport if test_instance_block_status: packet_test_instance_block_status if set_ticking_state: packet_set_ticking_state if step_tick: packet_step_tick if transfer: packet_common_transfer if advancements: packet_advancements if entity_update_attributes: packet_entity_update_attributes if entity_effect: packet_entity_effect if declare_recipes: packet_declare_recipes if tags: packet_tags if set_projectile_power: packet_set_projectile_power if custom_report_details: packet_common_custom_report_details if server_links: packet_common_server_links if tracked_waypoint: packet_tracked_waypoint if clear_dialog: packet_common_clear_dialog if show_dialog: packet_show_dialog ^play.toServer.types: # MC: ServerboundAcceptTeleportationPacket packet_teleport_confirm: teleportId: varint # MC: ServerboundAttackPacket packet_attack: entityId: varint # MC: ServerboundBlockEntityTagQueryPacket packet_query_block_nbt: transactionId: varint location: position # MC: ServerboundSelectBundleItemPacket packet_select_bundle_item: slotId: varint selectedItemIndex: varint # MC: ServerboundChangeDifficultyPacket packet_set_difficulty: newDifficulty: varint => 0: peaceful 1: easy 2: normal 3: hard # MC: ServerboundChangeGameModePacket packet_change_gamemode: mode: varint => 0: survival 1: creative 2: adventure 3: spectator # MC: ServerboundChatAckPacket packet_message_acknowledgement: count: varint # MC: ServerboundChatCommandPacket packet_chat_command: command: string # MC: ServerboundChatCommandSignedPacket packet_chat_command_signed: command: string timestamp: i64 salt: i64 argumentSignatures: []varint argumentName: string signature: [ "buffer", { "count": 256 } ] messageCount: varint acknowledged: [ "buffer", { "count": 3 } ] checksum: u8 # MC: ServerboundChatPacket packet_chat_message: message: string timestamp: i64 salt: i64 signature?: [ "buffer", { "count": 256 } ] offset: varint acknowledged: [ "buffer", { "count": 3 } ] checksum: u8 # MC: ServerboundChatSessionUpdatePacket packet_chat_session_update: sessionUUID: UUID expireTime: i64 publicKey: ByteArray signature: ByteArray # MC: ServerboundChunkBatchReceivedPacket packet_chunk_batch_received: chunksPerTick: f32 # MC: ServerboundClientCommandPacket packet_client_command: actionId: varint # MC: ServerboundClientTickEndPacket packet_tick_end: # Empty # MC: ServerboundCommandSuggestionPacket packet_tab_complete: transactionId: varint text: string # MC: ServerboundConfigurationAcknowledgedPacket packet_configuration_acknowledged: # Empty # MC: ServerboundContainerButtonClickPacket packet_container_button_click: windowId: ContainerID buttonId: varint # MC: ServerboundContainerClickPacket packet_window_click: windowId: ContainerID stateId: varint slot: i16 mouseButton: i8 mode: varint changedSlots: []varint location: i16 item?: HashedSlot cursorItem?: HashedSlot # MC: ServerboundContainerClosePacket packet_close_window: windowId: ContainerID # MC: ServerboundContainerSlotStateChangedPacket packet_set_slot_state: slot_id: varint window_id: ContainerID state: bool ## (ServerboundCookieResponsePacket is common) # MC: ServerboundCustomPayloadPacket packet_custom_payload: channel: string data: restBuffer # MC: ServerboundDebugSubscriptionRequestPacket packet_debug_subscription_request: subscriptions: DebugSubscriptionDataType[]varint # MC: ServerboundEditBookPacket packet_edit_book: hand: varint pages: string[]varint title?: string # MC: ServerboundEntityTagQuery packet_query_entity_nbt: transactionId: varint entityId: varint # MC: ServerboundInteractPacket packet_use_entity: target: varint mouse: varint x: mouse ? if 2: f32 default: void y: mouse ? if 2: f32 default: void z: mouse ? if 2: f32 default: void hand: mouse ? if 0: varint if 2: varint default: void sneaking: bool # MC: ServerboundJigsawGeneratePacket packet_generate_structure: location: position levels: varint keepJigsaws: bool # MC: ServerboundKeepAlivePacket packet_keep_alive: keepAliveId: i64 # MC: ServerboundLockDifficultyPacket packet_lock_difficulty: locked: bool MovementFlags: ["bitflags", { "type": "u8", "flags": ["onGround", "hasHorizontalCollision"] }] # MC: ServerboundMovePlayerPacket.Pos packet_position: x: f64 y: f64 z: f64 flags: MovementFlags # MC: ServerboundMovePlayerPacket.PosRot packet_position_look: x: f64 y: f64 z: f64 yaw: f32 pitch: f32 flags: MovementFlags # MC: ServerboundMovePlayerPacket.Rot packet_look: yaw: f32 pitch: f32 flags: MovementFlags # MC: ServerboundMovePlayerPacket.StatusOnly packet_flying: flags: MovementFlags # MC: ServerboundMoveVehiclePacket packet_vehicle_move: x: f64 y: f64 z: f64 yaw: f32 pitch: f32 onGround: bool # MC: ServerboundPaddleBoatPacket packet_steer_boat: leftPaddle: bool rightPaddle: bool # MC: ServerboundPickItemFromBlockPacket packet_pick_item_from_block: position: position includeData: bool # MC: ServerboundPickItemFromEntityPacket packet_pick_item_from_entity: entityId: varint includeData: bool # MC: ServerboundPingRequestPacket packet_ping_request: id: i64 # MC: ServerboundPlaceRecipePacket packet_craft_recipe_request: windowId: ContainerID recipeId: varint makeAll: bool # MC: ServerboundPlayerAbilitiesPacket packet_abilities: flags: i8 # MC: ServerboundPlayerActionPacket packet_block_dig: status: varint location: position face: i8 sequence: varint # MC: ServerboundPlayerCommandPacket packet_entity_action: entityId: varint actionId: varint => - leave_bed - start_sprinting - stop_sprinting - start_horse_jump - stop_horse_jump - open_vehicle_inventory - start_elytra_flying jumpBoost: varint # MC: ServerboundPlayerInputPacket # previously: packet_steer_vehicle packet_player_input: ## client/net/minecraft/world/entity/player/Input.java inputs: ["bitflags", { "type": "u8", "flags": ["forward", "backward", "left", "right", "jump", "shift", "sprint"] }] # MC: ServerboundPlayerLoadedPacket packet_player_loaded: # Empty # MC: ServerboundPongPacket packet_pong: id: i32 # MC: ServerboundRecipeBookChangeSettingsPacket packet_recipe_book: bookId: varint bookOpen: bool filterActive: bool # MC: ServerboundRecipeBookSeenRecipePacket packet_displayed_recipe: recipeId: varint # MC: ServerboundRenameItemPacket packet_name_item: name: string # MC: ServerboundResourcePackPacket packet_resource_pack_receive: uuid: UUID result: varint # MC: ServerboundSeenAdvancementsPacket packet_advancement_tab: action: varint tabId: action ? if 0: string if 1: void # MC: ServerboundSelectTradePacket packet_select_trade: slot: varint # MC: ServerboundSetBeaconPacket packet_set_beacon_effect: primary_effect?: varint secondary_effect?: varint # MC: ServerboundSetCarriedItemPacket packet_held_item_slot: slotId: i16 # MC: ServerboundSetCommandBlockPacket packet_update_command_block: location: position command: string mode: varint flags: u8 # MC: ServerboundSetCommandMinecartPacket packet_update_command_block_minecart: entityId: varint command: string track_output: bool # MC: ServerboundSetCreativeModeSlotPacket packet_set_creative_slot: slot: i16 item: UntrustedSlot # MC: ServerboundSetGameRulePacket packet_set_game_rule: entries: []varint key: string value: string # MC: ServerboundSetJigsawBlockPacket packet_update_jigsaw_block: location: position name: string target: string pool: string finalState: string jointType: string selection_priority: varint placement_priority: varint # MC: ServerboundSetStructureBlockPacket packet_update_structure_block: location: position action: varint mode: varint name: string offset_x: i8 offset_y: i8 offset_z: i8 size_x: i8 size_y: i8 size_z: i8 mirror: varint rotation: varint metadata: string integrity: f32 seed: varint # New `strict` flag flags: u8 => - ignore_entities - show_air - show_bounding_box - strict # MC: ServerboundSetTestBlockPacket packet_set_test_block: position: position mode: varint message: string # MC: ServerboundSignUpdatePacket packet_update_sign: location: position isFrontText: bool text1: string text2: string text3: string text4: string # MC: ServerboundSwingPacket packet_arm_animation: hand: varint # MC: ServerboundSpectatorActionPacket packet_spectator_action: spectateEntityId: optvarint # MC: ServerboundTeleportToEntityPacket packet_teleport_to_entity: target: UUID # MC: ServerboundTestInstanceBlockActionPacket packet_test_instance_block_action: pos: position action: varint data: test?: string size: vec3i rotation: varint ignoreEntities: bool status: varint errorMessage?: anonymousNbt # MC: ServerboundUseItemOnPacket packet_block_place: hand: varint location: position direction: varint cursorX: f32 cursorY: f32 cursorZ: f32 insideBlock: bool worldBorderHit: bool sequence: varint # MC: ServerboundUseItemPacket packet_use_item: hand: varint sequence: varint rotation: vec2f packet: name: varint => - teleport_confirm - attack - query_block_nbt - select_bundle_item - set_difficulty - change_gamemode - message_acknowledgement - chat_command - chat_command_signed - chat_message - chat_session_update - chunk_batch_received - client_command - tick_end - settings - tab_complete - configuration_acknowledged - container_button_click - window_click - close_window - set_slot_state - cookie_response - custom_payload - debug_subscription_request - edit_book - query_entity_nbt - use_entity - generate_structure - keep_alive - lock_difficulty - position - position_look - look - flying - vehicle_move - steer_boat - pick_item_from_block - pick_item_from_entity - ping_request - craft_recipe_request - abilities - block_dig - entity_action - player_input - player_loaded - pong - recipe_book - displayed_recipe - name_item - resource_pack_receive - advancement_tab - select_trade - set_beacon_effect - held_item_slot - update_command_block - update_command_block_minecart - set_creative_slot - set_game_rule - update_jigsaw_block - update_structure_block - set_test_block - update_sign - spectator_action - arm_animation - teleport_to_entity - test_instance_block_action - block_place - use_item - custom_click_action params: name ? if teleport_confirm: packet_teleport_confirm if attack: packet_attack if query_block_nbt: packet_query_block_nbt if select_bundle_item: packet_select_bundle_item if set_difficulty: packet_set_difficulty if change_gamemode: packet_change_gamemode if message_acknowledgement: packet_message_acknowledgement if chat_command: packet_chat_command if chat_command_signed: packet_chat_command_signed if chat_message: packet_chat_message if chat_session_update: packet_chat_session_update if chunk_batch_received: packet_chunk_batch_received if client_command: packet_client_command if tick_end: packet_tick_end if settings: packet_common_settings if tab_complete: packet_tab_complete if configuration_acknowledged: packet_configuration_acknowledged if container_button_click: packet_container_button_click if window_click: packet_window_click if close_window: packet_close_window if set_slot_state: packet_set_slot_state if cookie_response: packet_common_cookie_response if custom_payload: packet_custom_payload if debug_subscription_request: packet_debug_subscription_request if edit_book: packet_edit_book if query_entity_nbt: packet_query_entity_nbt if use_entity: packet_use_entity if generate_structure: packet_generate_structure if keep_alive: packet_keep_alive if lock_difficulty: packet_lock_difficulty if position: packet_position if position_look: packet_position_look if look: packet_look if flying: packet_flying if vehicle_move: packet_vehicle_move if steer_boat: packet_steer_boat if pick_item_from_block: packet_pick_item_from_block if pick_item_from_entity: packet_pick_item_from_entity if ping_request: packet_ping_request if craft_recipe_request: packet_craft_recipe_request if abilities: packet_abilities if block_dig: packet_block_dig if entity_action: packet_entity_action if player_input: packet_player_input if player_loaded: packet_player_loaded if pong: packet_pong if recipe_book: packet_recipe_book if displayed_recipe: packet_displayed_recipe if name_item: packet_name_item if resource_pack_receive: packet_resource_pack_receive if advancement_tab: packet_advancement_tab if select_trade: packet_select_trade if set_beacon_effect: packet_set_beacon_effect if held_item_slot: packet_held_item_slot if update_command_block: packet_update_command_block if update_command_block_minecart: packet_update_command_block_minecart if set_creative_slot: packet_set_creative_slot if set_game_rule: packet_set_game_rule if update_jigsaw_block: packet_update_jigsaw_block if update_structure_block: packet_update_structure_block if set_test_block: packet_set_test_block if update_sign: packet_update_sign if spectator_action: packet_spectator_action if arm_animation: packet_arm_animation if teleport_to_entity: packet_teleport_to_entity if test_instance_block_action: packet_test_instance_block_action if block_place: packet_block_place if use_item: packet_use_item if custom_click_action: packet_common_custom_click_action