minecraft-data
Version:
Provide easy access to minecraft data in node.js
1,552 lines (1,537 loc) • 104 kB
YAML
!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