UNPKG

minecraft-data

Version:
1,552 lines (1,537 loc) 104 kB
!version: 1.21.4 !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 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 IDSet: ["registryEntryHolderSet", { "base": { name: "name", type: "string" }, "otherwise": { name: "ids", type: "varint" } }] ContainerID: varint SoundEvent: soundName: string fixedRange?: f32 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 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 simthing_trim: base: SlotDisplay material: SlotDisplay pattern: SlotDisplay if with_remainder: input: SlotDisplay remainder: SlotDisplay if composite: SlotDisplay[]varint SlotComponentType: varint => - custom_data - max_stack_size - max_damage - damage - unbreakable - custom_name - item_name - item_model - lore - rarity - enchantments - can_place_on - can_break - attribute_modifiers - custom_model_data - hide_additional_tooltip - hide_tooltip - repair_cost - creative_slot_lock - enchantment_glint_override - intangible_projectile - food - consumable - use_remainder - use_cooldown - damage_resistant - tool - enchantable - equippable - repairable - glider - tooltip_style - death_protection - stored_enchantments - dyed_color - map_color - map_id - map_decorations - map_post_processing - charged_projectiles - bundle_contents - potion_contents - suspicious_stew_effects - writable_book_content - written_book_content - trim - debug_stick_state - entity_data - bucket_entity_data - block_entity_data - instrument - ominous_bottle_amplifier - jukebox_playable - recipes - lodestone_tracker - firework_explosion - fireworks - profile - note_block_sound - banner_patterns - base_color - pot_decorations - container - block_state - bees - lock - container_loot SlotComponent: type: SlotComponentType ## Ref: client/net/minecraft/core/component/DataComponents.java data: type ? ## TODO: look into how nbt works here if custom_data: anonymousNbt if max_stack_size: varint if max_damage: varint if damage: varint if unbreakable: bool if custom_name: anonymousNbt if item_name: anonymousNbt if item_model: string if lore: anonOptionalNbt[]varint if rarity: varint => - common - uncommon - rare - epic if enchantments: enchantments: []varint id: varint level: varint showTooltip: bool if can_place_on or can_break: predicates: BlockPredicate[]varint showTooltip: bool if attribute_modifiers: attributes: []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 showTooltip: bool if custom_model_data: varint if hide_additional_tooltip: void if hide_tooltip: void if repair_cost: varint if creative_slot_lock: void if enchantment_glint_override: bool if intangible_projectile: void 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 sound: ["registryEntryHolder", { "baseName": "soundId", "otherwise": { name: "data", type: "SoundEvent" } }] makes_particles: bool effects: ConsumeEffect[]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 # 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 sound: ["registryEntryHolder", { "baseName": "soundId", "otherwise": { name: "data", type: "SoundEvent" } }] model?: string cameraOverlay?: string allowedEntities?: IDSet dispensable: bool swappable: bool damageable: bool if repairable: items: IDSet if tooltip_style: string if death_protection: effects: ConsumeEffect[]varint if stored_enchantments: enchantments: []varint # The ID of the enchantment in the enchantment registry. id: varint level: varint # Whether the list of enchantments should be shown on the item's tooltip. showInTooltip: bool if dyed_color: color: varint showTooltip: bool if map_color: varint if map_id: varint if map_decorations: anonOptionalNbt if map_post_processing: varint 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?: varint customEffects: PotionEffect[]varint customName: string # Name Type Description # Number Of Effects VarInt Number of elements in the following array. # Effect Type ID Array VarInt Enum The ID of the effect in the potion effect type registry. # Duration VarInt The duration of the effect. if suspicious_stew_effects: effects: []varint effect: varint duration: varint # Name Type Description # Number Of Pages VarInt Number of elements in the following array. # Page Raw Content Array (100) String (1024) The raw text of the page. # Has Filtered Content Boolean # Filtered Content Optional String (1024) The content after passing through chat filters. Only present if Has Filtered Content is true. if writable_book_content: pages: BookPage[]varint # Name Type Description # Raw Title String (32) The raw title of the book. # Has Filtered Title Boolean # Filtered Title Optional String (32) The title after going through chat filters. Only present if Has Filtered Title is true. # Author String # Generation VarInt # Number Of Pages VarInt Number of elements in the following array. # Page Raw Content Array (100) TextComponent (1024) The raw text of the page. # Has Filtered Content Boolean # Filtered Content Optional Text Component (1024) The content after passing through chat filters. Only present if Has Filtered Content is true. # Resolved Boolean Whether entity selectors have already been resolved. if written_book_content: rawTitle: string filteredTitle?: string author: string generation: varint pages: BookPage[]varint # Whether entity selectors have already been resolved. resolved: bool # Name Type Description # Trim Material Type VarInt Identifier used to determine the data that follows. It can be either: # 0 - Directly represents a trim material, with the necessary data following. # Anything else - References a trim material in its registry, by the ID of Trim Material Type - 1. # Asset Name Optional String See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Ingredient Optional VarInt See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Item Model Index Optional Float See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Number of Overrides Optional VarInt See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Override Armor Material Type Optional Array VarInt Enum See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Overriden Asset Name String See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Description Optional Text Component See Armor Trim Material Registry. Only present if Trim Material Type is 0. # Trim Pattern Type VarInt Identifier used to determine the data that follows. It can be either: # 0 - Directly represents a trim pattern, with the necessary data following. # Anything else - References a trim pattern in its registry, by the ID of Trim Pattern Type - 1. # Asset Name Optional String See Armor Trim Pattern Registry. Only present if Trim Pattern Type is 0. # Template Item Optional VarInt See Armor Trim Pattern Registry. Only present if Trim Pattern Type is 0. # Description Optional Text Component See Armor Trim Pattern Registry. Only present if Trim Pattern Type is 0. # Decal Optional Boolean See Armor Trim Pattern Registry. Only present if Trim Pattern Type is 0. # Show In Tooltip Boolean Whether the trim information should be shown on the item's tooltip. if trim: # Identifier used to determine the data that follows. It can be either: # 0 - Directly represents a trim material, with the necessary data following. # Anything else - References a trim material in its registry, by the ID of Trim Material Type - 1. materialType: varint _: materialType ? if 0: assetName: string ingredientId: varint itemModelIndex: f32 numberOfOverrides: optvarint override: []varint armorMaterialType: varint overridenAssetName: string description: string trimPatternType: varint _: trimPatternType ? if 0: assetName: string templateItem: varint description: string decal: bool showInTooltip: bool if debug_stick_state: anonymousNbt if entity_data: anonymousNbt if bucket_entity_data: anonymousNbt if block_entity_data: anonymousNbt # Name Type Description # Instrument Type VarInt Identifier used to determine the data that follows. It can be either: # 0 - Directly represents an instrument, with the necessary data following. # Anything else - References an instrument in its registry, by the ID of Instrument Type - 1. # Sound Event Optional Sound Event The sound to be played. Only present if Instrument Type is 0. # Use duration Optional Float The maximum range of the sound. Only present if Instrument Type is 0. # Range Optional Float The range of the instrument. Only present if Instrument Type is 0. if instrument: instrumentType: varint _: instrumentType ? if 0: soundEvent: string useDuration: f32 range: f32 if ominous_bottle_amplifier: varint # Name Type Description # Direct Mode Boolean Whether the jukebox song is specified directly, or just referenced by name. # Jukebox Song Name Optional Identifier The name of the jukebox song in its respective registry. Only present if Direct Mode is false. # Jukebox Song Type Optional VarInt Identifier used to determine the data that follows. It can be either: # 0 - Directly represents a jukebox song, with the necessary data following. # Anything else - References a jukebox song in its registry, by the ID of Jukebox Song Type - 1. # Only present if Direct Mode is true. # Sound Event Optional Sound Event The sound to be played. Only present if Direct Mode is true and Jukebox Song Type is 0. # Description Optional Text Component The description shown in the item lore. Only present if Direct Mode is true and Jukebox Song Type is 0. # Duration Optional Float The duration the songs should play for, in seconds. Only present if Direct Mode is true and Jukebox Song Type is 0. # Output Optional VarInt The output strength given by a comparator. Between 0 and 15. Only present if Direct Mode is true and Jukebox Song Type is 0. # Show In Tooltip Boolean Whether the song should be shown on the item's tooltip. if jukebox_playable: directMode: bool _: directMode ? if true: jukeboxSongName: string jukeboxSongType: varint _: jukeboxSongType ? if 0: soundEvent: soundEventType: varint _: soundEventType ? if 0: soundName: string fixedRange?: f32 description: anonymousNbt duration: f32 output: varint if false: songLocation: string showInTooltip: bool if recipes: anonymousNbt # Name Type Description # Has Global Position Boolean Whether this lodestone points to a position, otherwise it spins randomly. # Dimension Identifier The dimension the compass points to. Only present if Has Global Position is true. # Position Position The position the compass points to. Only present if Has Global Position is true. # Tracked Boolean Whether the component is removed when the associated lodestone is broken. if lodestone_tracker: globalPosition?: dimension: string position: position tracked: bool # Name Type Description # Shape VarInt Enum Can be one of the following: # 0 - Small ball # 1 - Large ball # 2 - Star # 3 - Creeper # 4 - Burst # Number Of Colors VarInt The number of elements in the following array. # Colors Array of Int The RGB components of the color, encoded as an integer. # Number Of Fade Colors VarInt The number of elements in the following array. # Fade Colors Array of Int The RGB components of the color, encoded as an integer. # Has Trail Boolean # Has Twinkle Boolean if firework_explosion: FireworkExplosion if fireworks: flightDuration: varint explosions: FireworkExplosion[]varint # Name Type Description # Has Name Boolean # Name Optional String (16) Only present if Has Name is true. # Has Unique ID Boolean # Unique ID Optional UUID Only present if Has Unique ID is true. # Number of Properties VarInt Number of elements in the following array. # Property Name Array String (64) # Value String # Has Signature Boolean # Signature String (1024) Only present if Has Signature is true. if profile: hasName: bool name: string hasUniqueId: bool uniqueId: UUID properties: []varint property: string value: string hasSignature: bool signature: string if note_block_sound: string # Name Type Description # Number of Layers VarInt Number of elements in the following array. # Layer Pattern Type Array VarInt Identifier used to determine the data that follows. It can be either: # 0 - Directly represents a pattern, with the necessary data following. # Anything else - References a pattern in its registry, by the ID of Pattern Type - 1. # Asset ID Optional Identifier Identifier of the asset. Only present if Pattern Type is 0. # Translation Key Optional String Only present if Pattern Type is 0. # Color Dye Color See Dye Color. if banner_patterns: layers: []varint patternType: varint _: patternType ? if 0: assetId: string translationKey: string color: 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 # Name Type Description # Number of Properties VarInt Number of elements in the following array. # Property Name Array String # Value String if block_state: properties: []varint property: string value: string # Name Type Description # Number of Bees VarInt Number of elements in the following array. # Bee Entity Data Array NBT # Ticks In Hive VarInt # Min Ticks In Hive VarInt 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 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 FireworkExplosion: shape: varint => - small_ball - large_ball - star - creeper - burst colors: i32[]varint fadeColors: i32[]varint hasTrail: bool hasTwinkle: bool BookPage: content: string filteredContent?: string EffectDetail: amplifier: varint duration: varint ambient: bool showParticles: bool showIcon: bool hiddenEffect?: EffectDetail PotionEffect: id: varint details: EffectDetail ConsumeEffect: type: varint => - apply_effects - remove_effects - clear_all_effects - teleport_randomly - play_sound _: type ? if apply_effects: effects: PotionEffect[]varint probability: f32 if remove_effects: effects: IDSet if clear_all_effects: void if teleport_randomly: diameter: f32 if play_sound: sound: ["registryEntryHolder", { "baseName": "soundId", "otherwise": { name: "data", type: "SoundEvent" } }] BlockProperty: # Name of the block state property. name: string # Whether this is an exact value match, as opposed to ranged. isExactMatch: bool # Value of the block state property. Only present in exact match mode. exactValue?: string # Minimum value of the block state property range. Only present in ranged match mode. minValue?: string # Maximum value of the block state property range. Only present in ranged match mode. maxValue?: string BlockPredicate: blockSet?: ["registryEntryHolderSet", { "base": { name: "name", type: "string" }, "otherwise": { name: "blockIds", type: "varint" } }] properties?: BlockProperty[]varint nbt: anonOptionalNbt Particle: # See client/net/minecraft/core/particles/ParticleTypes.java type: varint => - angry_villager - block - block_marker - bubble - cloud - 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 - 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 ## ## 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<BlockParticleOption> 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: position_type: varint => - block - entity position: position_type ? if block: position if entity: entityId: varint entity_eye_height: f32 ticks: varint if trail: target: vec3f64 color: u8 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 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 - compound_tag - particle - particles - villager_data - optional_unsigned_int - pose - cat_variant - wolf_variant - frog_variant - optional_global_pos - painting_variant - sniffer_state - armadillo_state - vector3 - quaternion 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 compound_tag: anonymousNbt 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 wolf_variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { name: "variantData", type: "EntityMetadataWolfVariant" } }] if frog_variant: varint if optional_global_pos: ["option", "string"] if painting_variant: ["registryEntryHolder", { "baseName": "variantId", "otherwise": { name: "variantData", type: "EntityMetadataPaintingVariant" } }] if sniffer_state: varint if armadillo_state: varint if vector3: vec3f if quaternion: vec4f EntityMetadataPaintingVariant: width: i32 height: i32 assetId: string title?: anonymousNbt author?: anonymousNbt EntityMetadataWolfVariant: wildTexture: string tameTexture: string angryTexture: string biome: IDSet 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" } ] game_profile: name: string properties: []varint key: string value: string signature?: string command_node: flags: [ "bitfield", [ { "name": "unused", "size": 3, "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: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: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: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: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: registry: string if minecraft:resource_or_tag_key: registry: string if minecraft:resource: registry: string if minecraft:resource_key: registry: string if minecraft:template_mirror: void if minecraft:template_rotation: void if minecraft:heightmap: 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: 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 ^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 # 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: 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) 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 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