1.17.1 (756) protocol (#605)

https://wiki.vg/index.php?title=Protocol&oldid=16918

New and changed packets:
* 1.17.1 packet id shifts, new clientbound packets
* Add WindowPong new packet serverbound
* Add Tags_Nested packet variant
* Add TeleportPlayer_WithDismount packet variant
* Add ChunkData_Biomes3D_Bitmasks packet variant 
* Add WindowItems_StateCarry variant, split WindowItems_i16
* Add WindowSetSlot_State packet variant
* Add Explosion_VarInt packet variant
* Add UpdateLight_Arrays variant
* Add ResourcePackSend_Prompt variant
* Add SpawnPosition_Angle variant
* Add EntityProperties_VarIntVarInt variant, using VarInts in both fields 
* Add ClientSettings_Filtering variant
* Add ClickWindow_State variant
* Add EditBook packet variant 
* Fix many Particle packet variant definitions

* server: handle TeleportPlayer_WithDismount
* server: handle ChunkData_Biomes3D_Bitmasks

* world: add num_sections to self.load_chunk19_or_115
* world: load_chunk19_to_117: accept 64-bit mask

* metadata: add PoseData::LongJumping 

* protocol: update Cargo.lock for serde_json 1.0.130
* build: pin to wasm-pack 0.10.0
This commit is contained in:
iceiix 2021-09-05 13:30:32 -07:00 committed by GitHub
parent 83bbb9fe4f
commit cfcc7d2a1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 606 additions and 157 deletions

View File

@ -134,7 +134,7 @@ jobs:
- name: Install wasm-pack - name: Install wasm-pack
uses: jetli/wasm-pack-action@v0.3.0 uses: jetli/wasm-pack-action@v0.3.0
with: with:
version: 'latest' version: 'v0.10.0'
- name: Build binary - name: Build binary
run: | run: |
rustup target add wasm32-unknown-unknown rustup target add wasm32-unknown-unknown

View File

@ -24,6 +24,7 @@ Discussion forum: [https://github.com/iceiix/stevenarella/discussions](https://g
| Game version | Protocol version | Supported? | | Game version | Protocol version | Supported? |
| ------ | --- | --- | | ------ | --- | --- |
| 1.17.1 | 756 | ✓ |
| 1.16.5 | 754 | ✓ | | 1.16.5 | 754 | ✓ |
| 1.16.4 | 754 | ✓ | | 1.16.4 | 754 | ✓ |
| 1.16.3 | 753 | ✓ | | 1.16.3 | 753 | ✓ |

4
protocol/Cargo.lock generated
View File

@ -778,9 +778,9 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.127" version = "1.0.130"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
[[package]] [[package]]
name = "serde_json" name = "serde_json"

View File

@ -39,9 +39,9 @@ use std::io::{Read, Write};
use std::net::TcpStream; use std::net::TcpStream;
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering}; use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
pub const SUPPORTED_PROTOCOLS: [i32; 24] = [ pub const SUPPORTED_PROTOCOLS: [i32; 25] = [
754, 753, 751, 736, 735, 578, 575, 498, 490, 485, 480, 477, 452, 451, 404, 340, 316, 315, 210, 756, 754, 753, 751, 736, 735, 578, 575, 498, 490, 485, 480, 477, 452, 451, 404, 340, 316, 315,
109, 107, 74, 47, 5, 210, 109, 107, 74, 47, 5,
]; ];
static CURRENT_PROTOCOL_VERSION: AtomicI32 = AtomicI32::new(SUPPORTED_PROTOCOLS[0]); static CURRENT_PROTOCOL_VERSION: AtomicI32 = AtomicI32::new(SUPPORTED_PROTOCOLS[0]);

View File

@ -89,6 +89,15 @@ state_packets!(
field action_id: u8=, field action_id: u8=,
} }
/// ClientSettings is sent by the client to update its current settings. /// ClientSettings is sent by the client to update its current settings.
packet ClientSettings_Filtering {
field locale: String =,
field view_distance: u8 =,
field chat_mode: VarInt =,
field chat_colors: bool =,
field displayed_skin_parts: u8 =,
field main_hand: VarInt =,
field disable_text_filtering: bool =,
}
packet ClientSettings { packet ClientSettings {
field locale: String =, field locale: String =,
field view_distance: u8 =, field view_distance: u8 =,
@ -137,6 +146,15 @@ state_packets!(
field button: u8 =, field button: u8 =,
} }
/// ClickWindow is sent when the client clicks in a window. /// ClickWindow is sent when the client clicks in a window.
packet ClickWindow_State {
field id: u8 =,
field slot: i16 =,
field state: VarInt =,
field button: u8 =,
field mode: VarInt =,
field slots: LenPrefixed<VarInt, packet::NumberedSlot> =,
field clicked_item: Option<item::Stack> =,
}
packet ClickWindow { packet ClickWindow {
field id: u8 =, field id: u8 =,
field slot: i16 =, field slot: i16 =,
@ -168,7 +186,12 @@ state_packets!(
field channel: String =, field channel: String =,
field data: LenPrefixedBytes<VarShort> =, field data: LenPrefixedBytes<VarShort> =,
} }
packet EditBook { packet EditBook_Pages {
field hand: VarInt =,
field pages: LenPrefixed<VarInt, String> =,
field title: Option<String> =,
}
packet EditBook_Item {
field new_book: Option<item::Stack> =, field new_book: Option<item::Stack> =,
field is_signing: bool =, field is_signing: bool =,
field hand: VarInt =, field hand: VarInt =,
@ -346,6 +369,9 @@ state_packets!(
field jump: bool =, field jump: bool =,
field unmount: bool =, field unmount: bool =,
} }
packet WindowPong {
field id: i32 =,
}
/// CraftingBookData is sent when the player interacts with the crafting book. /// CraftingBookData is sent when the player interacts with the crafting book.
packet CraftingBookData { packet CraftingBookData {
field action: VarInt =, field action: VarInt =,
@ -777,6 +803,13 @@ state_packets!(
field metadata: types::Metadata =, field metadata: types::Metadata =,
} }
packet SculkVibrationSignal {
field source_position: Position =,
field dest_id: String =,
field dest_position: Position = when(|p: &SculkVibrationSignal| p.dest_id == "block"),
field entity_id: VarInt = when(|p: &SculkVibrationSignal| p.dest_id == "entity"),
}
/// Animation is sent by the server to play an animation on a specific entity. /// Animation is sent by the server to play an animation on a specific entity.
packet Animation { packet Animation {
field entity_id: VarInt =, field entity_id: VarInt =,
@ -890,6 +923,11 @@ state_packets!(
packet ServerMessage_NoPosition { packet ServerMessage_NoPosition {
field message: format::Component =, field message: format::Component =,
} }
packet ClearTitles {
field json_data: String =,
field position: u8 =,
field sender: UUID =,
}
/// MultiBlockChange is used to update a batch of blocks in a single packet. /// MultiBlockChange is used to update a batch of blocks in a single packet.
packet MultiBlockChange_Packed { packet MultiBlockChange_Packed {
field chunk_section_pos: u64 =, field chunk_section_pos: u64 =,
@ -935,6 +973,16 @@ state_packets!(
field number_of_slots: VarInt =, field number_of_slots: VarInt =,
field entity_id: i32 =, field entity_id: i32 =,
} }
packet WorldBorderInit {
field x: f64 =,
field z: f64 =,
field old_diameter: f64 =,
field new_diameter: f64 =,
field speed: VarLong =,
field portal_teleport_boundary: VarInt =,
field warning_blocks: VarInt =,
field warning_time: VarInt =,
}
packet WindowOpen_u8 { packet WindowOpen_u8 {
field id: u8 =, field id: u8 =,
field ty: u8 =, field ty: u8 =,
@ -949,7 +997,13 @@ state_packets!(
field title: format::Component =, field title: format::Component =,
} }
/// WindowItems sets every item in a window. /// WindowItems sets every item in a window.
packet WindowItems { packet WindowItems_StateCarry {
field id: u8 =,
field state_id: VarInt =,
field items: LenPrefixed<VarInt, Option<item::Stack>> =,
field carried_item: Option<item::Stack> =,
}
packet WindowItems_i16 {
field id: u8 =, field id: u8 =,
field items: LenPrefixed<i16, Option<item::Stack>> =, field items: LenPrefixed<i16, Option<item::Stack>> =,
} }
@ -961,6 +1015,12 @@ state_packets!(
field value: i16 =, field value: i16 =,
} }
/// WindowSetSlot changes an itemstack in one of the slots in a window. /// WindowSetSlot changes an itemstack in one of the slots in a window.
packet WindowSetSlot_State {
field id: u8 =,
field state_id: VarInt =,
field property: i16 =,
field item: Option<item::Stack> =,
}
packet WindowSetSlot { packet WindowSetSlot {
field id: u8 =, field id: u8 =,
field property: i16 =, field property: i16 =,
@ -1021,7 +1081,17 @@ state_packets!(
} }
/// Explosion is sent when an explosion is triggered (tnt, creeper etc). /// Explosion is sent when an explosion is triggered (tnt, creeper etc).
/// This plays the effect and removes the effected blocks. /// This plays the effect and removes the effected blocks.
packet Explosion { packet Explosion_VarInt {
field x: f32 =,
field y: f32 =,
field z: f32 =,
field radius: f32 =,
field records: LenPrefixed<VarInt, packet::ExplosionRecord> =,
field velocity_x: f32 =,
field velocity_y: f32 =,
field velocity_z: f32 =,
}
packet Explosion_i32 {
field x: f32 =, field x: f32 =,
field y: f32 =, field y: f32 =,
field z: f32 =, field z: f32 =,
@ -1062,6 +1132,15 @@ state_packets!(
} }
/// ChunkData sends or updates a single chunk on the client. If New is set /// ChunkData sends or updates a single chunk on the client. If New is set
/// then biome data should be sent too. /// then biome data should be sent too.
packet ChunkData_Biomes3D_Bitmasks {
field chunk_x: i32 =,
field chunk_z: i32 =,
field bitmasks: LenPrefixed<VarInt, i64> =,
field heightmaps: Option<nbt::NamedTag> =,
field biomes: LenPrefixed<VarInt, VarInt> =,
field data: LenPrefixedBytes<VarInt> =,
field block_entities: LenPrefixed<VarInt, Option<nbt::NamedTag>> =,
}
packet ChunkData_Biomes3D_VarInt { packet ChunkData_Biomes3D_VarInt {
field chunk_x: i32 =, field chunk_x: i32 =,
field chunk_z: i32 =, field chunk_z: i32 =,
@ -1173,14 +1252,24 @@ state_packets!(
field offset_z: f32 =, field offset_z: f32 =,
field speed: f32 =, field speed: f32 =,
field count: i32 =, field count: i32 =,
field block_state: VarInt = when(|p: &Particle_f64| p.particle_id == 3 || p.particle_id == 23), field block_state: VarInt = when(|p: &Particle_f64| p.particle_id == 4 || p.particle_id == 25),
field red: f32 = when(|p: &Particle_f64| p.particle_id == 14), field red: f32 = when(|p: &Particle_f64| p.particle_id == 15 || p.particle_id == 16),
field green: f32 = when(|p: &Particle_f64| p.particle_id == 14), field green: f32 = when(|p: &Particle_f64| p.particle_id == 15 || p.particle_id == 16),
field blue: f32 = when(|p: &Particle_f64| p.particle_id == 14), field blue: f32 = when(|p: &Particle_f64| p.particle_id == 15 || p.particle_id == 16),
field scale: f32 = when(|p: &Particle_f64| p.particle_id == 14), field scale: f32 = when(|p: &Particle_f64| p.particle_id == 15 || p.particle_id == 16),
field item: Option<nbt::NamedTag> = when(|p: &Particle_f64| p.particle_id == 32), field to_red: f32 = when(|p: &Particle_f64| p.particle_id == 16),
field to_green: f32 = when(|p: &Particle_f64| p.particle_id == 16),
field to_blue: f32 = when(|p: &Particle_f64| p.particle_id == 16),
field item: Option<nbt::NamedTag> = when(|p: &Particle_f64| p.particle_id == 36),
field origin_x: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field origin_y: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field origin_z: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field dest_x: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field dest_y: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field dest_z: f64 = when(|p: &Particle_f64| p.particle_id == 37),
field ticks: f64 = when(|p: &Particle_f64| p.particle_id == 37),
} }
packet Particle_Data { packet Particle_f32 {
field particle_id: i32 =, field particle_id: i32 =,
field long_distance: bool =, field long_distance: bool =,
field x: f32 =, field x: f32 =,
@ -1191,30 +1280,22 @@ state_packets!(
field offset_z: f32 =, field offset_z: f32 =,
field speed: f32 =, field speed: f32 =,
field count: i32 =, field count: i32 =,
field block_state: VarInt = when(|p: &Particle_Data| p.particle_id == 3 || p.particle_id == 23), field block_state: VarInt = when(|p: &Particle_f32| p.particle_id == 4 || p.particle_id == 25),
field red: f32 = when(|p: &Particle_Data| p.particle_id == 14), field red: f32 = when(|p: &Particle_f32| p.particle_id == 15 || p.particle_id == 16),
field green: f32 = when(|p: &Particle_Data| p.particle_id == 14), field green: f32 = when(|p: &Particle_f32| p.particle_id == 15 || p.particle_id == 16),
field blue: f32 = when(|p: &Particle_Data| p.particle_id == 14), field blue: f32 = when(|p: &Particle_f32| p.particle_id == 15 || p.particle_id == 16),
field scale: f32 = when(|p: &Particle_Data| p.particle_id == 14), field scale: f32 = when(|p: &Particle_f32| p.particle_id == 15 || p.particle_id == 16),
field item: Option<nbt::NamedTag> = when(|p: &Particle_Data| p.particle_id == 32), field to_red: f32 = when(|p: &Particle_f32| p.particle_id == 16),
} field to_green: f32 = when(|p: &Particle_f32| p.particle_id == 16),
packet Particle_Data13 { field to_blue: f32 = when(|p: &Particle_f32| p.particle_id == 16),
field particle_id: i32 =, field item: Option<nbt::NamedTag> = when(|p: &Particle_f32| p.particle_id == 36),
field long_distance: bool =, field origin_x: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field x: f32 =, field origin_y: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field y: f32 =, field origin_z: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field z: f32 =, field dest_x: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field offset_x: f32 =, field dest_y: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field offset_y: f32 =, field dest_z: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field offset_z: f32 =, field ticks: f64 = when(|p: &Particle_f32| p.particle_id == 37),
field speed: f32 =,
field count: i32 =,
field block_state: VarInt = when(|p: &Particle_Data13| p.particle_id == 3 || p.particle_id == 20),
field red: f32 = when(|p: &Particle_Data13| p.particle_id == 11),
field green: f32 = when(|p: &Particle_Data13| p.particle_id == 11),
field blue: f32 = when(|p: &Particle_Data13| p.particle_id == 11),
field scale: f32 = when(|p: &Particle_Data13| p.particle_id == 11),
field item: Option<nbt::NamedTag> = when(|p: &Particle_Data13| p.particle_id == 27),
} }
packet Particle_VarIntArray { packet Particle_VarIntArray {
field particle_id: i32 =, field particle_id: i32 =,
@ -1519,6 +1600,9 @@ state_packets!(
field y: i32 =, field y: i32 =,
field z: i32 =, field z: i32 =,
} }
packet WindowPing {
field id: i32 =,
}
/// CraftRecipeResponse is a response to CraftRecipeRequest, notifies the UI. /// CraftRecipeResponse is a response to CraftRecipeRequest, notifies the UI.
packet CraftRecipeResponse { packet CraftRecipeResponse {
field window_id: u8 =, field window_id: u8 =,
@ -1540,6 +1624,18 @@ state_packets!(
field entity_id: Option<i32> = when(|p: &CombatEvent| p.event.0 == 1 || p.event.0 == 2), field entity_id: Option<i32> = when(|p: &CombatEvent| p.event.0 == 1 || p.event.0 == 2),
field message: Option<format::Component> = when(|p: &CombatEvent| p.event.0 == 2), field message: Option<format::Component> = when(|p: &CombatEvent| p.event.0 == 2),
} }
packet CombatEventEnd {
field duration: VarInt =,
field entity_id: i32 =,
}
packet CombatEventEnter {
field empty: Vec<u8> =, // empty packet, but a field is syntactically required here
}
packet CombatEventDeath {
field player_id: VarInt =,
field entity_id: i32 =,
field message: String =,
}
/// PlayerInfo is sent by the server for every player connected to the server /// PlayerInfo is sent by the server for every player connected to the server
/// to provide skin and username information as well as ping and gamemode info. /// to provide skin and username information as well as ping and gamemode info.
packet PlayerInfo { packet PlayerInfo {
@ -1562,6 +1658,16 @@ state_packets!(
/// TeleportPlayer is sent to change the player's position. The client is expected /// TeleportPlayer is sent to change the player's position. The client is expected
/// to reply to the server with the same positions as contained in this packet /// to reply to the server with the same positions as contained in this packet
/// otherwise will reject future packets. /// otherwise will reject future packets.
packet TeleportPlayer_WithDismount {
field x: f64 =,
field y: f64 =,
field z: f64 =,
field yaw: f32 =,
field pitch: f32 =,
field flags: u8 =,
field teleport_id: VarInt =,
field dismount: bool =,
}
packet TeleportPlayer_WithConfirm { packet TeleportPlayer_WithConfirm {
field x: f64 =, field x: f64 =,
field y: f64 =, field y: f64 =,
@ -1646,6 +1752,13 @@ state_packets!(
/// ResourcePackSend causes the client to check its cache for the requested /// ResourcePackSend causes the client to check its cache for the requested
/// resource packet and download it if its missing. Once the resource pack /// resource packet and download it if its missing. Once the resource pack
/// is obtained the client will use it. /// is obtained the client will use it.
packet ResourcePackSend_Prompt {
field url: String =,
field hash: String =,
field forced: bool =,
field has_prompt_message: bool =,
field prompt_message: String = when(|p: &ResourcePackSend_Prompt| p.has_prompt_message),
}
packet ResourcePackSend { packet ResourcePackSend {
field url: String =, field url: String =,
field hash: String =, field hash: String =,
@ -1706,6 +1819,9 @@ state_packets!(
field has_id: bool =, field has_id: bool =,
field tab_id: String = when(|p: &SelectAdvancementTab| p.has_id), field tab_id: String = when(|p: &SelectAdvancementTab| p.has_id),
} }
packet ActionBar {
field text: String =,
}
/// WorldBorder configures the world's border. /// WorldBorder configures the world's border.
packet WorldBorder { packet WorldBorder {
field action: VarInt =, field action: VarInt =,
@ -1718,6 +1834,24 @@ state_packets!(
field warning_time: Option<VarInt> = when(|p: &WorldBorder| p.action.0 == 3 || p.action.0 == 4), field warning_time: Option<VarInt> = when(|p: &WorldBorder| p.action.0 == 3 || p.action.0 == 4),
field warning_blocks: Option<VarInt> = when(|p: &WorldBorder| p.action.0 == 3 || p.action.0 == 5), field warning_blocks: Option<VarInt> = when(|p: &WorldBorder| p.action.0 == 3 || p.action.0 == 5),
} }
packet WorldBorderCenter {
field x: f64 =,
field z: f64 =,
}
packet WorldBorderLerpSize {
field old_diameter: f64 =,
field new_diameter: f64 =,
field speed: VarLong =,
}
packet WorldBorderSize {
field diameter: f64 =,
}
packet WorldBorderWarningDelay {
field warning_time: VarInt =,
}
packet WorldBorderWarningReach {
field warning_blocks: VarInt =,
}
/// Camera causes the client to spectate the entity with the passed id. /// Camera causes the client to spectate the entity with the passed id.
/// Use the player's id to de-spectate. /// Use the player's id to de-spectate.
packet Camera { packet Camera {
@ -1887,7 +2021,11 @@ state_packets!(
} }
/// SpawnPosition is sent to change the player's current spawn point. Currently /// SpawnPosition is sent to change the player's current spawn point. Currently
/// only used by the client for the compass. /// only used by the client for the compass.
packet SpawnPosition { packet SpawnPosition_Angle {
field location: Position =,
field angle: f32 =,
}
packet SpawnPosition_NoAngle {
field location: Position =, field location: Position =,
} }
packet SpawnPosition_i32 { packet SpawnPosition_i32 {
@ -1934,6 +2072,14 @@ state_packets!(
field fade_stay: Option<format::Component> = when(|p: &Title_notext_component| p.action.0 == 2), field fade_stay: Option<format::Component> = when(|p: &Title_notext_component| p.action.0 == 2),
field fade_out: Option<format::Component> = when(|p: &Title_notext_component| p.action.0 == 2), field fade_out: Option<format::Component> = when(|p: &Title_notext_component| p.action.0 == 2),
} }
packet TitleSubtitle {
field subtitle_text: String =,
}
packet TitleTimes {
field fade_in: i32 =,
field stay: i32 =,
field fade_out: i32 =,
}
/// UpdateSign sets or changes the text on a sign. /// UpdateSign sets or changes the text on a sign.
packet UpdateSign { packet UpdateSign {
field location: Position =, field location: Position =,
@ -2037,7 +2183,11 @@ state_packets!(
*/ */
} }
/// EntityProperties updates the properties for an entity. /// EntityProperties updates the properties for an entity.
packet EntityProperties { packet EntityProperties_VarIntVarInt {
field entity_id: VarInt =,
field properties: LenPrefixed<VarInt, packet::EntityProperty> =,
}
packet EntityProperties_VarInt {
field entity_id: VarInt =, field entity_id: VarInt =,
field properties: LenPrefixed<i32, packet::EntityProperty> =, field properties: LenPrefixed<i32, packet::EntityProperty> =,
} }
@ -2067,18 +2217,32 @@ state_packets!(
field item_tags: LenPrefixed<VarInt, packet::Tags> =, field item_tags: LenPrefixed<VarInt, packet::Tags> =,
field fluid_tags: LenPrefixed<VarInt, packet::Tags> =, field fluid_tags: LenPrefixed<VarInt, packet::Tags> =,
} }
packet TagsWithEntities { packet Tags_WithEntities {
field block_tags: LenPrefixed<VarInt, packet::Tags> =, field block_tags: LenPrefixed<VarInt, packet::Tags> =,
field item_tags: LenPrefixed<VarInt, packet::Tags> =, field item_tags: LenPrefixed<VarInt, packet::Tags> =,
field fluid_tags: LenPrefixed<VarInt, packet::Tags> =, field fluid_tags: LenPrefixed<VarInt, packet::Tags> =,
field entity_tags: LenPrefixed<VarInt, packet::Tags> =, field entity_tags: LenPrefixed<VarInt, packet::Tags> =,
} }
packet Tags_Nested {
field tags: LenPrefixed<VarInt, packet::TagsGroup> =,
}
packet AcknowledgePlayerDigging { packet AcknowledgePlayerDigging {
field location: Position =, field location: Position =,
field block: VarInt =, field block: VarInt =,
field status: VarInt =, field status: VarInt =,
field successful: bool =, field successful: bool =,
} }
packet UpdateLight_Arrays {
field chunk_x: VarInt =,
field chunk_z: VarInt =,
field trust_edges: bool =,
field sky_light_mask: LenPrefixed<VarInt, i64> =,
field block_light_mask: LenPrefixed<VarInt, i64> =,
field empty_sky_light_mask: LenPrefixed<VarInt, i64> =,
field empty_block_light_mask: LenPrefixed<VarInt, i64> =,
field sky_light_arrays: LenPrefixed<VarInt, LenPrefixed<VarInt, u8>> =,
field block_light_arrays: LenPrefixed<VarInt, LenPrefixed<VarInt, u8>> =,
}
packet UpdateLight_WithTrust { packet UpdateLight_WithTrust {
field chunk_x: VarInt =, field chunk_x: VarInt =,
field chunk_z: VarInt =, field chunk_z: VarInt =,
@ -2086,6 +2250,7 @@ state_packets!(
field sky_light_mask: VarInt =, field sky_light_mask: VarInt =,
field block_light_mask: VarInt =, field block_light_mask: VarInt =,
field empty_sky_light_mask: VarInt =, field empty_sky_light_mask: VarInt =,
// TODO: this packet changed <=1.16.4, see https://wiki.vg/index.php?title=Protocol&oldid=16681#Update_Light
field light_arrays: Vec<u8> =, field light_arrays: Vec<u8> =,
} }
packet UpdateLight_NoTrust { packet UpdateLight_NoTrust {
@ -3007,6 +3172,25 @@ impl Serializable for Tags {
} }
} }
#[derive(Debug, Default)]
pub struct TagsGroup {
pub tag_type: String,
pub tags: LenPrefixed<VarInt, Tags>,
}
impl Serializable for TagsGroup {
fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
Ok(TagsGroup {
tag_type: Serializable::read_from(buf)?,
tags: Serializable::read_from(buf)?,
})
}
fn write_to<W: io::Write>(&self, _: &mut W) -> Result<(), Error> {
unimplemented!()
}
}
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct Trade { pub struct Trade {
pub input_item_1: Option<nbt::NamedTag>, pub input_item_1: Option<nbt::NamedTag>,
@ -3299,3 +3483,23 @@ impl Serializable for CommandNode {
unimplemented!() unimplemented!()
} }
} }
#[derive(Debug, Clone, Default)]
pub struct NumberedSlot {
pub slot_number: i16,
pub slot_data: Option<item::Stack>,
}
impl Serializable for NumberedSlot {
fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
Ok(NumberedSlot {
slot_number: Serializable::read_from(buf)?,
slot_data: Serializable::read_from(buf)?,
})
}
fn write_to<W: io::Write>(&self, buf: &mut W) -> Result<(), Error> {
self.slot_number.write_to(buf)?;
self.slot_data.write_to(buf)
}
}

View File

@ -15,6 +15,7 @@ mod v1_14_4;
mod v1_15; mod v1_15;
mod v1_16_1; mod v1_16_1;
mod v1_16_4; mod v1_16_4;
mod v1_17_1;
mod v1_7_10; mod v1_7_10;
mod v1_8_9; mod v1_8_9;
mod v1_9; mod v1_9;
@ -26,6 +27,7 @@ mod v1_9_2;
pub fn protocol_name_to_protocol_version(s: String) -> i32 { pub fn protocol_name_to_protocol_version(s: String) -> i32 {
match s.as_ref() { match s.as_ref() {
"" => SUPPORTED_PROTOCOLS[0], "" => SUPPORTED_PROTOCOLS[0],
"1.17.1" => 756,
"1.16.5" => 754, "1.16.5" => 754,
"1.16.4" => 754, "1.16.4" => 754,
"1.16.3" => 753, "1.16.3" => 753,
@ -69,6 +71,7 @@ pub fn translate_internal_packet_id_for_version(
to_internal: bool, to_internal: bool,
) -> i32 { ) -> i32 {
match version { match version {
756 => v1_17_1::translate_internal_packet_id(state, dir, id, to_internal),
754 | 753 | 751 => v1_16_4::translate_internal_packet_id(state, dir, id, to_internal), 754 | 753 | 751 => v1_16_4::translate_internal_packet_id(state, dir, id, to_internal),
736 => v1_16_1::translate_internal_packet_id(state, dir, id, to_internal), 736 => v1_16_1::translate_internal_packet_id(state, dir, id, to_internal),
735 => v1_16_1::translate_internal_packet_id(state, dir, id, to_internal), 735 => v1_16_1::translate_internal_packet_id(state, dir, id, to_internal),

View File

@ -57,14 +57,14 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
0x18 => PluginMessageClientbound 0x18 => PluginMessageClientbound
0x19 => Disconnect 0x19 => Disconnect
0x1a => EntityAction 0x1a => EntityAction
0x1b => Explosion 0x1b => Explosion_i32
0x1c => ChunkUnload 0x1c => ChunkUnload
0x1d => SetCompression 0x1d => SetCompression
0x1e => ChangeGameState 0x1e => ChangeGameState
@ -103,14 +103,14 @@ protocol_packet_ids!(
0x3f => ScoreboardObjective 0x3f => ScoreboardObjective
0x40 => Teams_u8 0x40 => Teams_u8
0x41 => UpdateScore 0x41 => UpdateScore
0x42 => SpawnPosition 0x42 => SpawnPosition_NoAngle
0x43 => TimeUpdate 0x43 => TimeUpdate
0x44 => Title_notext_component 0x44 => Title_notext_component
0x45 => UpdateSign 0x45 => UpdateSign
0x46 => PlayerListHeaderFooter 0x46 => PlayerListHeaderFooter
0x47 => CollectItem_nocount 0x47 => CollectItem_nocount
0x48 => EntityTeleport_i32 0x48 => EntityTeleport_i32
0x49 => EntityProperties 0x49 => EntityProperties_VarInt
0x4a => EntityEffect 0x4a => EntityEffect
} }
} }

View File

@ -19,7 +19,7 @@ protocol_packet_ids!(
0x08 => ClickWindow 0x08 => ClickWindow
0x09 => CloseWindow 0x09 => CloseWindow
0x0a => PluginMessageServerbound 0x0a => PluginMessageServerbound
0x0b => EditBook 0x0b => EditBook_Item
0x0c => QueryEntityNBT 0x0c => QueryEntityNBT
0x0d => UseEntity_Hand 0x0d => UseEntity_Hand
0x0e => KeepAliveServerbound_i64 0x0e => KeepAliveServerbound_i64
@ -74,7 +74,7 @@ protocol_packet_ids!(
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowOpen 0x14 => WindowOpen
0x15 => WindowItems 0x15 => WindowItems_i16
0x16 => WindowProperty 0x16 => WindowProperty
0x17 => WindowSetSlot 0x17 => WindowSetSlot
0x18 => SetCooldown 0x18 => SetCooldown
@ -83,13 +83,13 @@ protocol_packet_ids!(
0x1b => Disconnect 0x1b => Disconnect
0x1c => EntityAction 0x1c => EntityAction
0x1d => NBTQueryResponse 0x1d => NBTQueryResponse
0x1e => Explosion 0x1e => Explosion_i32
0x1f => ChunkUnload 0x1f => ChunkUnload
0x20 => ChangeGameState 0x20 => ChangeGameState
0x21 => KeepAliveClientbound_i64 0x21 => KeepAliveClientbound_i64
0x22 => ChunkData_HeightMap 0x22 => ChunkData_HeightMap
0x23 => Effect 0x23 => Effect
0x24 => Particle_VarIntArray 0x24 => Particle_f32
0x25 => JoinGame_i32 0x25 => JoinGame_i32
0x26 => Maps_NoLocked 0x26 => Maps_NoLocked
0x27 => Entity 0x27 => Entity
@ -127,7 +127,7 @@ protocol_packet_ids!(
0x47 => SetPassengers 0x47 => SetPassengers
0x48 => Teams_u8 0x48 => Teams_u8
0x49 => UpdateScore 0x49 => UpdateScore
0x4a => SpawnPosition 0x4a => SpawnPosition_NoAngle
0x4b => TimeUpdate 0x4b => TimeUpdate
0x4d => StopSound 0x4d => StopSound
0x4e => SoundEffect 0x4e => SoundEffect
@ -136,10 +136,10 @@ protocol_packet_ids!(
0x51 => CollectItem 0x51 => CollectItem
0x52 => EntityTeleport_f64 0x52 => EntityTeleport_f64
0x53 => Advancements 0x53 => Advancements
0x54 => EntityProperties 0x54 => EntityProperties_VarInt
0x55 => EntityEffect 0x55 => EntityEffect
0x56 => DeclareRecipes 0x56 => DeclareRecipes
0x57 => TagsWithEntities 0x57 => Tags_WithEntities
0x58 => UpdateLight_NoTrust 0x58 => UpdateLight_NoTrust
} }
} }

View File

@ -19,7 +19,7 @@ protocol_packet_ids!(
0x08 => ClickWindow 0x08 => ClickWindow
0x09 => CloseWindow 0x09 => CloseWindow
0x0a => PluginMessageServerbound 0x0a => PluginMessageServerbound
0x0b => EditBook 0x0b => EditBook_Item
0x0c => QueryEntityNBT 0x0c => QueryEntityNBT
0x0d => UseEntity_Hand 0x0d => UseEntity_Hand
0x0e => KeepAliveServerbound_i64 0x0e => KeepAliveServerbound_i64
@ -74,7 +74,7 @@ protocol_packet_ids!(
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowOpenHorse 0x14 => WindowOpenHorse
0x15 => WindowItems 0x15 => WindowItems_i16
0x16 => WindowProperty 0x16 => WindowProperty
0x17 => WindowSetSlot 0x17 => WindowSetSlot
0x18 => SetCooldown 0x18 => SetCooldown
@ -83,13 +83,13 @@ protocol_packet_ids!(
0x1b => Disconnect 0x1b => Disconnect
0x1c => EntityAction 0x1c => EntityAction
0x1d => NBTQueryResponse 0x1d => NBTQueryResponse
0x1e => Explosion 0x1e => Explosion_i32
0x1f => ChunkUnload 0x1f => ChunkUnload
0x20 => ChangeGameState 0x20 => ChangeGameState
0x21 => KeepAliveClientbound_i64 0x21 => KeepAliveClientbound_i64
0x22 => ChunkData_HeightMap 0x22 => ChunkData_HeightMap
0x23 => Effect 0x23 => Effect
0x24 => Particle_Data13 0x24 => Particle_f32
0x25 => JoinGame_i32 0x25 => JoinGame_i32
0x26 => Maps 0x26 => Maps
0x27 => Entity 0x27 => Entity
@ -127,7 +127,7 @@ protocol_packet_ids!(
0x47 => SetPassengers 0x47 => SetPassengers
0x48 => Teams_u8 0x48 => Teams_u8
0x49 => UpdateScore 0x49 => UpdateScore
0x4a => SpawnPosition 0x4a => SpawnPosition_NoAngle
0x4b => TimeUpdate 0x4b => TimeUpdate
0x4d => StopSound 0x4d => StopSound
0x4e => SoundEffect 0x4e => SoundEffect
@ -136,10 +136,10 @@ protocol_packet_ids!(
0x51 => CollectItem 0x51 => CollectItem
0x52 => EntityTeleport_f64 0x52 => EntityTeleport_f64
0x53 => Advancements 0x53 => Advancements
0x54 => EntityProperties 0x54 => EntityProperties_VarInt
0x55 => EntityEffect 0x55 => EntityEffect
0x56 => DeclareRecipes 0x56 => DeclareRecipes
0x57 => TagsWithEntities 0x57 => Tags_WithEntities
0x58 => UpdateLight_NoTrust 0x58 => UpdateLight_NoTrust
0x59 => WindowOpen_VarInt 0x59 => WindowOpen_VarInt
0x5a => TradeList_WithoutRestock // TODO: without 1.14 added fields 0x5a => TradeList_WithoutRestock // TODO: without 1.14 added fields

View File

@ -60,7 +60,7 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -68,7 +68,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => KeepAliveClientbound_VarInt 0x1f => KeepAliveClientbound_VarInt
@ -107,14 +107,14 @@ protocol_packet_ids!(
0x40 => SetPassengers 0x40 => SetPassengers
0x41 => Teams_u8 0x41 => Teams_u8
0x42 => UpdateScore 0x42 => UpdateScore
0x43 => SpawnPosition 0x43 => SpawnPosition_NoAngle
0x44 => TimeUpdate 0x44 => TimeUpdate
0x45 => Title_notext 0x45 => Title_notext
0x46 => SoundEffect 0x46 => SoundEffect
0x47 => PlayerListHeaderFooter 0x47 => PlayerListHeaderFooter
0x48 => CollectItem_nocount 0x48 => CollectItem_nocount
0x49 => EntityTeleport_f64 0x49 => EntityTeleport_f64
0x4a => EntityProperties 0x4a => EntityProperties_VarInt
0x4b => EntityEffect 0x4b => EntityEffect
} }
} }

View File

@ -60,7 +60,7 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -68,7 +68,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => KeepAliveClientbound_VarInt 0x1f => KeepAliveClientbound_VarInt
@ -107,14 +107,14 @@ protocol_packet_ids!(
0x40 => SetPassengers 0x40 => SetPassengers
0x41 => Teams_u8 0x41 => Teams_u8
0x42 => UpdateScore 0x42 => UpdateScore
0x43 => SpawnPosition 0x43 => SpawnPosition_NoAngle
0x44 => TimeUpdate 0x44 => TimeUpdate
0x45 => Title 0x45 => Title
0x46 => SoundEffect 0x46 => SoundEffect
0x47 => PlayerListHeaderFooter 0x47 => PlayerListHeaderFooter
0x48 => CollectItem 0x48 => CollectItem
0x49 => EntityTeleport_f64 0x49 => EntityTeleport_f64
0x4a => EntityProperties 0x4a => EntityProperties_VarInt
0x4b => EntityEffect 0x4b => EntityEffect
} }
} }

View File

@ -63,7 +63,7 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -71,7 +71,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => KeepAliveClientbound_i64 0x1f => KeepAliveClientbound_i64
@ -113,7 +113,7 @@ protocol_packet_ids!(
0x43 => SetPassengers 0x43 => SetPassengers
0x44 => Teams_u8 0x44 => Teams_u8
0x45 => UpdateScore 0x45 => UpdateScore
0x46 => SpawnPosition 0x46 => SpawnPosition_NoAngle
0x47 => TimeUpdate 0x47 => TimeUpdate
0x48 => Title 0x48 => Title
0x49 => SoundEffect 0x49 => SoundEffect
@ -121,7 +121,7 @@ protocol_packet_ids!(
0x4b => CollectItem 0x4b => CollectItem
0x4c => EntityTeleport_f64 0x4c => EntityTeleport_f64
0x4d => Advancements 0x4d => Advancements
0x4e => EntityProperties 0x4e => EntityProperties_VarInt
0x4f => EntityEffect 0x4f => EntityEffect
} }
} }

View File

@ -19,7 +19,7 @@ protocol_packet_ids!(
0x08 => ClickWindow 0x08 => ClickWindow
0x09 => CloseWindow 0x09 => CloseWindow
0x0a => PluginMessageServerbound 0x0a => PluginMessageServerbound
0x0b => EditBook 0x0b => EditBook_Item
0x0c => QueryEntityNBT 0x0c => QueryEntityNBT
0x0d => UseEntity_Hand 0x0d => UseEntity_Hand
0x0e => KeepAliveServerbound_i64 0x0e => KeepAliveServerbound_i64
@ -74,7 +74,7 @@ protocol_packet_ids!(
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowOpen 0x14 => WindowOpen
0x15 => WindowItems 0x15 => WindowItems_i16
0x16 => WindowProperty 0x16 => WindowProperty
0x17 => WindowSetSlot 0x17 => WindowSetSlot
0x18 => SetCooldown 0x18 => SetCooldown
@ -83,13 +83,13 @@ protocol_packet_ids!(
0x1b => Disconnect 0x1b => Disconnect
0x1c => EntityAction 0x1c => EntityAction
0x1d => NBTQueryResponse 0x1d => NBTQueryResponse
0x1e => Explosion 0x1e => Explosion_i32
0x1f => ChunkUnload 0x1f => ChunkUnload
0x20 => ChangeGameState 0x20 => ChangeGameState
0x21 => KeepAliveClientbound_i64 0x21 => KeepAliveClientbound_i64
0x22 => ChunkData 0x22 => ChunkData
0x23 => Effect 0x23 => Effect
0x24 => Particle_Data13 0x24 => Particle_f32
0x25 => JoinGame_i32 0x25 => JoinGame_i32
0x26 => Maps_NoLocked 0x26 => Maps_NoLocked
0x27 => Entity 0x27 => Entity
@ -126,7 +126,7 @@ protocol_packet_ids!(
0x46 => SetPassengers 0x46 => SetPassengers
0x47 => Teams_VarInt 0x47 => Teams_VarInt
0x48 => UpdateScore 0x48 => UpdateScore
0x49 => SpawnPosition 0x49 => SpawnPosition_NoAngle
0x4a => TimeUpdate 0x4a => TimeUpdate
0x4c => StopSound 0x4c => StopSound
0x4d => SoundEffect 0x4d => SoundEffect
@ -134,7 +134,7 @@ protocol_packet_ids!(
0x4f => CollectItem 0x4f => CollectItem
0x50 => EntityTeleport_f64 0x50 => EntityTeleport_f64
0x51 => Advancements 0x51 => Advancements
0x52 => EntityProperties 0x52 => EntityProperties_VarInt
0x53 => EntityEffect 0x53 => EntityEffect
0x54 => DeclareRecipes 0x54 => DeclareRecipes
0x55 => Tags 0x55 => Tags

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -76,7 +76,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -84,14 +84,14 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
0x20 => KeepAliveClientbound_i64 0x20 => KeepAliveClientbound_i64
0x21 => ChunkData_HeightMap 0x21 => ChunkData_HeightMap
0x22 => Effect 0x22 => Effect
0x23 => Particle_Data 0x23 => Particle_f32
0x24 => UpdateLight_NoTrust 0x24 => UpdateLight_NoTrust
0x25 => JoinGame_i32_ViewDistance 0x25 => JoinGame_i32_ViewDistance
0x26 => Maps 0x26 => Maps
@ -133,7 +133,7 @@ protocol_packet_ids!(
0x4a => SetPassengers 0x4a => SetPassengers
0x4b => Teams_VarInt 0x4b => Teams_VarInt
0x4c => UpdateScore 0x4c => UpdateScore
0x4d => SpawnPosition 0x4d => SpawnPosition_NoAngle
0x4e => TimeUpdate 0x4e => TimeUpdate
0x4f => Title 0x4f => Title
0x50 => EntitySoundEffect 0x50 => EntitySoundEffect
@ -144,10 +144,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -76,7 +76,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -84,14 +84,14 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
0x20 => KeepAliveClientbound_i64 0x20 => KeepAliveClientbound_i64
0x21 => ChunkData_HeightMap 0x21 => ChunkData_HeightMap
0x22 => Effect 0x22 => Effect
0x23 => Particle_Data 0x23 => Particle_f32
0x24 => UpdateLight_NoTrust 0x24 => UpdateLight_NoTrust
0x25 => JoinGame_i32_ViewDistance 0x25 => JoinGame_i32_ViewDistance
0x26 => Maps 0x26 => Maps
@ -133,7 +133,7 @@ protocol_packet_ids!(
0x4a => SetPassengers 0x4a => SetPassengers
0x4b => Teams_VarInt 0x4b => Teams_VarInt
0x4c => UpdateScore 0x4c => UpdateScore
0x4d => SpawnPosition 0x4d => SpawnPosition_NoAngle
0x4e => TimeUpdate 0x4e => TimeUpdate
0x4f => Title 0x4f => Title
0x50 => EntitySoundEffect 0x50 => EntitySoundEffect
@ -144,10 +144,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -76,7 +76,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -84,14 +84,14 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
0x20 => KeepAliveClientbound_i64 0x20 => KeepAliveClientbound_i64
0x21 => ChunkData_HeightMap 0x21 => ChunkData_HeightMap
0x22 => Effect 0x22 => Effect
0x23 => Particle_Data 0x23 => Particle_f32
0x24 => UpdateLight_NoTrust 0x24 => UpdateLight_NoTrust
0x25 => JoinGame_i32_ViewDistance 0x25 => JoinGame_i32_ViewDistance
0x26 => Maps 0x26 => Maps
@ -133,7 +133,7 @@ protocol_packet_ids!(
0x4a => SetPassengers 0x4a => SetPassengers
0x4b => Teams_VarInt 0x4b => Teams_VarInt
0x4c => UpdateScore 0x4c => UpdateScore
0x4d => SpawnPosition 0x4d => SpawnPosition_NoAngle
0x4e => TimeUpdate 0x4e => TimeUpdate
0x4f => Title 0x4f => Title
0x50 => EntitySoundEffect 0x50 => EntitySoundEffect
@ -144,10 +144,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -76,7 +76,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -84,14 +84,14 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
0x20 => KeepAliveClientbound_i64 0x20 => KeepAliveClientbound_i64
0x21 => ChunkData_HeightMap 0x21 => ChunkData_HeightMap
0x22 => Effect 0x22 => Effect
0x23 => Particle_Data 0x23 => Particle_f32
0x24 => UpdateLight_NoTrust 0x24 => UpdateLight_NoTrust
0x25 => JoinGame_i32_ViewDistance 0x25 => JoinGame_i32_ViewDistance
0x26 => Maps 0x26 => Maps
@ -133,7 +133,7 @@ protocol_packet_ids!(
0x4a => SetPassengers 0x4a => SetPassengers
0x4b => Teams_VarInt 0x4b => Teams_VarInt
0x4c => UpdateScore 0x4c => UpdateScore
0x4d => SpawnPosition 0x4d => SpawnPosition_NoAngle
0x4e => TimeUpdate 0x4e => TimeUpdate
0x4f => Title 0x4f => Title
0x50 => EntitySoundEffect 0x50 => EntitySoundEffect
@ -144,10 +144,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -76,7 +76,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -84,14 +84,14 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
0x20 => KeepAliveClientbound_i64 0x20 => KeepAliveClientbound_i64
0x21 => ChunkData_HeightMap 0x21 => ChunkData_HeightMap
0x22 => Effect 0x22 => Effect
0x23 => Particle_Data 0x23 => Particle_f32
0x24 => UpdateLight_NoTrust 0x24 => UpdateLight_NoTrust
0x25 => JoinGame_i32_ViewDistance 0x25 => JoinGame_i32_ViewDistance
0x26 => Maps 0x26 => Maps
@ -133,7 +133,7 @@ protocol_packet_ids!(
0x4a => SetPassengers 0x4a => SetPassengers
0x4b => Teams_VarInt 0x4b => Teams_VarInt
0x4c => UpdateScore 0x4c => UpdateScore
0x4d => SpawnPosition 0x4d => SpawnPosition_NoAngle
0x4e => TimeUpdate 0x4e => TimeUpdate
0x4f => Title 0x4f => Title
0x50 => EntitySoundEffect 0x50 => EntitySoundEffect
@ -144,10 +144,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
0x5c => AcknowledgePlayerDigging 0x5c => AcknowledgePlayerDigging
} }
} }

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Hand 0x0e => UseEntity_Hand
0x0f => KeepAliveServerbound_i64 0x0f => KeepAliveServerbound_i64
@ -77,7 +77,7 @@ protocol_packet_ids!(
0x12 => DeclareCommands 0x12 => DeclareCommands
0x13 => ConfirmTransaction 0x13 => ConfirmTransaction
0x14 => WindowClose 0x14 => WindowClose
0x15 => WindowItems 0x15 => WindowItems_i16
0x16 => WindowProperty 0x16 => WindowProperty
0x17 => WindowSetSlot 0x17 => WindowSetSlot
0x18 => SetCooldown 0x18 => SetCooldown
@ -85,7 +85,7 @@ protocol_packet_ids!(
0x1a => NamedSoundEffect 0x1a => NamedSoundEffect
0x1b => Disconnect 0x1b => Disconnect
0x1c => EntityAction 0x1c => EntityAction
0x1d => Explosion 0x1d => Explosion_i32
0x1e => ChunkUnload 0x1e => ChunkUnload
0x1f => ChangeGameState 0x1f => ChangeGameState
0x20 => WindowOpenHorse 0x20 => WindowOpenHorse
@ -134,7 +134,7 @@ protocol_packet_ids!(
0x4b => SetPassengers 0x4b => SetPassengers
0x4c => Teams_VarInt 0x4c => Teams_VarInt
0x4d => UpdateScore 0x4d => UpdateScore
0x4e => SpawnPosition 0x4e => SpawnPosition_NoAngle
0x4f => TimeUpdate 0x4f => TimeUpdate
0x50 => Title 0x50 => Title
0x51 => EntitySoundEffect 0x51 => EntitySoundEffect
@ -145,10 +145,10 @@ protocol_packet_ids!(
0x56 => CollectItem 0x56 => CollectItem
0x57 => EntityTeleport_f64 0x57 => EntityTeleport_f64
0x58 => Advancements 0x58 => Advancements
0x59 => EntityProperties 0x59 => EntityProperties_VarInt
0x5a => EntityEffect 0x5a => EntityEffect
0x5b => DeclareRecipes 0x5b => DeclareRecipes
0x5c => TagsWithEntities 0x5c => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Sneakflag 0x0e => UseEntity_Sneakflag
0x0f => GenerateStructure 0x0f => GenerateStructure
@ -77,7 +77,7 @@ protocol_packet_ids!(
0x11 => DeclareCommands 0x11 => DeclareCommands
0x12 => ConfirmTransaction 0x12 => ConfirmTransaction
0x13 => WindowClose 0x13 => WindowClose
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -85,7 +85,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect 0x19 => NamedSoundEffect
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => WindowOpenHorse 0x1f => WindowOpenHorse
@ -123,7 +123,7 @@ protocol_packet_ids!(
0x3f => SetCurrentHotbarSlot 0x3f => SetCurrentHotbarSlot
0x40 => UpdateViewPosition 0x40 => UpdateViewPosition
0x41 => UpdateViewDistance 0x41 => UpdateViewDistance
0x42 => SpawnPosition 0x42 => SpawnPosition_NoAngle
0x43 => ScoreboardDisplay 0x43 => ScoreboardDisplay
0x44 => EntityMetadata 0x44 => EntityMetadata
0x45 => EntityAttach 0x45 => EntityAttach
@ -145,10 +145,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -20,7 +20,7 @@ protocol_packet_ids!(
0x09 => ClickWindow 0x09 => ClickWindow
0x0a => CloseWindow 0x0a => CloseWindow
0x0b => PluginMessageServerbound 0x0b => PluginMessageServerbound
0x0c => EditBook 0x0c => EditBook_Item
0x0d => QueryEntityNBT 0x0d => QueryEntityNBT
0x0e => UseEntity_Sneakflag 0x0e => UseEntity_Sneakflag
0x0f => GenerateStructure 0x0f => GenerateStructure
@ -77,7 +77,7 @@ protocol_packet_ids!(
0x10 => DeclareCommands 0x10 => DeclareCommands
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowItems 0x13 => WindowItems_i16
0x14 => WindowProperty 0x14 => WindowProperty
0x15 => WindowSetSlot 0x15 => WindowSetSlot
0x16 => SetCooldown 0x16 => SetCooldown
@ -85,7 +85,7 @@ protocol_packet_ids!(
0x18 => NamedSoundEffect 0x18 => NamedSoundEffect
0x19 => Disconnect 0x19 => Disconnect
0x1a => EntityAction 0x1a => EntityAction
0x1b => Explosion 0x1b => Explosion_i32
0x1c => ChunkUnload 0x1c => ChunkUnload
0x1d => ChangeGameState 0x1d => ChangeGameState
0x1e => WindowOpenHorse 0x1e => WindowOpenHorse
@ -124,7 +124,7 @@ protocol_packet_ids!(
0x3f => SetCurrentHotbarSlot 0x3f => SetCurrentHotbarSlot
0x40 => UpdateViewPosition 0x40 => UpdateViewPosition
0x41 => UpdateViewDistance 0x41 => UpdateViewDistance
0x42 => SpawnPosition 0x42 => SpawnPosition_NoAngle
0x43 => ScoreboardDisplay 0x43 => ScoreboardDisplay
0x44 => EntityMetadata 0x44 => EntityMetadata
0x45 => EntityAttach 0x45 => EntityAttach
@ -146,10 +146,10 @@ protocol_packet_ids!(
0x55 => CollectItem 0x55 => CollectItem
0x56 => EntityTeleport_f64 0x56 => EntityTeleport_f64
0x57 => Advancements 0x57 => Advancements
0x58 => EntityProperties 0x58 => EntityProperties_VarInt
0x59 => EntityEffect 0x59 => EntityEffect
0x5a => DeclareRecipes 0x5a => DeclareRecipes
0x5b => TagsWithEntities 0x5b => Tags_WithEntities
} }
} }
login Login { login Login {

View File

@ -0,0 +1,190 @@
protocol_packet_ids!(
handshake Handshaking {
serverbound Serverbound {
0x00 => Handshake
}
clientbound Clientbound {
}
}
play Play {
serverbound Serverbound {
0x00 => TeleportConfirm
0x01 => QueryBlockNBT
0x02 => SetDifficulty
0x03 => ChatMessage
0x04 => ClientStatus
0x05 => ClientSettings_Filtering
0x06 => TabComplete
0x07 => ClickWindowButton
0x08 => ClickWindow_State
0x09 => CloseWindow
0x0a => PluginMessageServerbound
0x0b => EditBook_Pages
0x0c => QueryEntityNBT
0x0d => UseEntity_Sneakflag
0x0e => GenerateStructure
0x0f => KeepAliveServerbound_i64
0x10 => LockDifficulty
0x11 => PlayerPosition
0x12 => PlayerPositionLook
0x13 => PlayerLook
0x14 => Player
0x15 => VehicleMove
0x16 => SteerBoat
0x17 => PickItem
0x18 => CraftRecipeRequest
0x19 => ClientAbilities_u8
0x1a => PlayerDigging
0x1b => PlayerAction
0x1c => SteerVehicle
0x1d => WindowPong
0x1e => SetDisplayedRecipe
0x1f => SetRecipeBookState
0x20 => NameItem
0x21 => ResourcePackStatus
0x22 => AdvancementTab
0x23 => SelectTrade
0x24 => SetBeaconEffect
0x25 => HeldItemChange
0x26 => UpdateCommandBlock
0x27 => UpdateCommandBlockMinecart
0x28 => CreativeInventoryAction
0x29 => UpdateJigsawBlock_Joint
0x2a => UpdateStructureBlock
0x2b => SetSign
0x2c => ArmSwing
0x2d => SpectateTeleport
0x2e => PlayerBlockPlacement_insideblock
0x2f => UseItem
}
clientbound Clientbound {
0x00 => SpawnObject_VarInt
0x01 => SpawnExperienceOrb
0x02 => SpawnMob_NoMeta
0x03 => SpawnPainting_VarInt
0x04 => SpawnPlayer_f64_NoMeta
0x05 => SculkVibrationSignal
0x06 => Animation
0x07 => Statistics
0x08 => AcknowledgePlayerDigging
0x09 => BlockBreakAnimation
0x0a => UpdateBlockEntity
0x0b => BlockAction
0x0c => BlockChange_VarInt
0x0d => BossBar
0x0e => ServerDifficulty_Locked
0x0f => ServerMessage_Sender
0x10 => ClearTitles
0x11 => TabCompleteReply
0x12 => DeclareCommands
0x13 => WindowClose
0x14 => WindowItems_StateCarry
0x15 => WindowProperty
0x16 => WindowSetSlot_State
0x17 => SetCooldown
0x18 => PluginMessageClientbound
0x19 => NamedSoundEffect
0x1a => Disconnect
0x1b => EntityAction
0x1c => Explosion_VarInt
0x1d => ChunkUnload
0x1e => ChangeGameState
0x1f => WindowOpenHorse
0x20 => WorldBorderInit
0x21 => KeepAliveClientbound_i64
0x22 => ChunkData_Biomes3D_Bitmasks
0x23 => Effect
0x24 => Particle_f64
0x25 => UpdateLight_Arrays
0x26 => JoinGame_WorldNames_IsHard
0x27 => Maps
0x28 => TradeList_WithRestock
0x29 => EntityMove_i16
0x2a => EntityLookAndMove_i16
0x2b => EntityLook_VarInt
0x2c => VehicleTeleport
0x2d => OpenBook
0x2e => WindowOpen_VarInt
0x2f => SignEditorOpen
0x30 => WindowPing
0x31 => CraftRecipeResponse
0x32 => PlayerAbilities
0x33 => CombatEventEnd
0x34 => CombatEventEnter
0x35 => CombatEventDeath
0x36 => PlayerInfo
0x37 => FacePlayer
0x38 => TeleportPlayer_WithDismount
0x39 => UnlockRecipes_WithBlastSmoker
0x3a => EntityDestroy
0x3b => EntityRemoveEffect
0x3c => ResourcePackSend_Prompt
0x3d => Respawn_NBT
0x3e => EntityHeadLook
0x3f => MultiBlockChange_Packed
0x40 => SelectAdvancementTab
0x41 => ActionBar
0x42 => WorldBorderCenter
0x43 => WorldBorderLerpSize
0x44 => WorldBorderSize
0x45 => WorldBorderWarningDelay
0x46 => WorldBorderWarningReach
0x47 => Camera
0x48 => SetCurrentHotbarSlot
0x49 => UpdateViewPosition
0x4a => UpdateViewDistance
0x4b => SpawnPosition_Angle
0x4c => ScoreboardDisplay
0x4d => EntityMetadata
0x4e => EntityAttach
0x4f => EntityVelocity
0x50 => EntityEquipment_Array
0x51 => SetExperience
0x52 => UpdateHealth
0x53 => ScoreboardObjective
0x54 => SetPassengers
0x55 => Teams_VarInt
0x56 => UpdateScore
0x57 => TitleSubtitle
0x58 => TimeUpdate
0x59 => Title
0x5a => TitleTimes
0x5b => EntitySoundEffect
0x5c => SoundEffect
0x5d => StopSound
0x5e => PlayerListHeaderFooter
0x5f => NBTQueryResponse
0x60 => CollectItem
0x61 => EntityTeleport_f64
0x62 => Advancements
0x63 => EntityProperties_VarIntVarInt
0x64 => EntityEffect
0x65 => DeclareRecipes
0x66 => Tags_Nested
}
}
login Login {
serverbound Serverbound {
0x00 => LoginStart
0x01 => EncryptionResponse
0x02 => LoginPluginResponse
}
clientbound Clientbound {
0x00 => LoginDisconnect
0x01 => EncryptionRequest
0x02 => LoginSuccess_UUID
0x03 => SetInitialCompression
0x04 => LoginPluginRequest
}
}
status Status {
serverbound Serverbound {
0x00 => StatusRequest
0x01 => StatusPing
}
clientbound Clientbound {
0x00 => StatusResponse
0x01 => StatusPong
}
}
);

View File

@ -73,7 +73,7 @@ protocol_packet_ids!(
0x24 => BlockAction_u16 0x24 => BlockAction_u16
0x25 => BlockBreakAnimation_i32 0x25 => BlockBreakAnimation_i32
0x26 => ChunkDataBulk_17 0x26 => ChunkDataBulk_17
0x27 => Explosion 0x27 => Explosion_i32
0x28 => Effect_u8y 0x28 => Effect_u8y
0x29 => NamedSoundEffect_u8_NoCategory 0x29 => NamedSoundEffect_u8_NoCategory
0x2a => Particle_Named 0x2a => Particle_Named
@ -82,7 +82,7 @@ protocol_packet_ids!(
0x2d => WindowOpen_u8 0x2d => WindowOpen_u8
0x2e => WindowClose 0x2e => WindowClose
0x2f => WindowSetSlot 0x2f => WindowSetSlot
0x30 => WindowItems 0x30 => WindowItems_i16
0x31 => WindowProperty 0x31 => WindowProperty
0x32 => ConfirmTransaction 0x32 => ConfirmTransaction
0x33 => UpdateSign_u16 0x33 => UpdateSign_u16

View File

@ -41,7 +41,7 @@ protocol_packet_ids!(
0x02 => ServerMessage_Position 0x02 => ServerMessage_Position
0x03 => TimeUpdate 0x03 => TimeUpdate
0x04 => EntityEquipment_u16 0x04 => EntityEquipment_u16
0x05 => SpawnPosition 0x05 => SpawnPosition_NoAngle
0x06 => UpdateHealth 0x06 => UpdateHealth
0x07 => Respawn_Gamemode 0x07 => Respawn_Gamemode
0x08 => TeleportPlayer_NoConfirm 0x08 => TeleportPlayer_NoConfirm
@ -68,14 +68,14 @@ protocol_packet_ids!(
0x1d => EntityEffect 0x1d => EntityEffect
0x1e => EntityRemoveEffect 0x1e => EntityRemoveEffect
0x1f => SetExperience 0x1f => SetExperience
0x20 => EntityProperties 0x20 => EntityProperties_VarInt
0x21 => ChunkData_NoEntities_u16 0x21 => ChunkData_NoEntities_u16
0x22 => MultiBlockChange_VarInt 0x22 => MultiBlockChange_VarInt
0x23 => BlockChange_VarInt 0x23 => BlockChange_VarInt
0x24 => BlockAction 0x24 => BlockAction
0x25 => BlockBreakAnimation 0x25 => BlockBreakAnimation
0x26 => ChunkDataBulk 0x26 => ChunkDataBulk
0x27 => Explosion 0x27 => Explosion_i32
0x28 => Effect 0x28 => Effect
0x29 => NamedSoundEffect_u8_NoCategory 0x29 => NamedSoundEffect_u8_NoCategory
0x2a => Particle_VarIntArray 0x2a => Particle_VarIntArray
@ -84,7 +84,7 @@ protocol_packet_ids!(
0x2d => WindowOpen 0x2d => WindowOpen
0x2e => WindowClose 0x2e => WindowClose
0x2f => WindowSetSlot 0x2f => WindowSetSlot
0x30 => WindowItems 0x30 => WindowItems_i16
0x31 => WindowProperty 0x31 => WindowProperty
0x32 => ConfirmTransaction 0x32 => ConfirmTransaction
0x33 => UpdateSign 0x33 => UpdateSign

View File

@ -60,7 +60,7 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -68,7 +68,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect_u8 0x19 => NamedSoundEffect_u8
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => KeepAliveClientbound_VarInt 0x1f => KeepAliveClientbound_VarInt
@ -107,7 +107,7 @@ protocol_packet_ids!(
0x40 => SetPassengers 0x40 => SetPassengers
0x41 => Teams_u8 0x41 => Teams_u8
0x42 => UpdateScore 0x42 => UpdateScore
0x43 => SpawnPosition 0x43 => SpawnPosition_NoAngle
0x44 => TimeUpdate 0x44 => TimeUpdate
0x45 => Title_notext 0x45 => Title_notext
0x46 => UpdateSign 0x46 => UpdateSign
@ -115,7 +115,7 @@ protocol_packet_ids!(
0x48 => PlayerListHeaderFooter 0x48 => PlayerListHeaderFooter
0x49 => CollectItem_nocount 0x49 => CollectItem_nocount
0x4a => EntityTeleport_f64 0x4a => EntityTeleport_f64
0x4b => EntityProperties 0x4b => EntityProperties_VarInt
0x4c => EntityEffect 0x4c => EntityEffect
} }
} }

View File

@ -60,7 +60,7 @@ protocol_packet_ids!(
0x11 => ConfirmTransaction 0x11 => ConfirmTransaction
0x12 => WindowClose 0x12 => WindowClose
0x13 => WindowOpen 0x13 => WindowOpen
0x14 => WindowItems 0x14 => WindowItems_i16
0x15 => WindowProperty 0x15 => WindowProperty
0x16 => WindowSetSlot 0x16 => WindowSetSlot
0x17 => SetCooldown 0x17 => SetCooldown
@ -68,7 +68,7 @@ protocol_packet_ids!(
0x19 => NamedSoundEffect_u8 0x19 => NamedSoundEffect_u8
0x1a => Disconnect 0x1a => Disconnect
0x1b => EntityAction 0x1b => EntityAction
0x1c => Explosion 0x1c => Explosion_i32
0x1d => ChunkUnload 0x1d => ChunkUnload
0x1e => ChangeGameState 0x1e => ChangeGameState
0x1f => KeepAliveClientbound_VarInt 0x1f => KeepAliveClientbound_VarInt
@ -107,7 +107,7 @@ protocol_packet_ids!(
0x40 => SetPassengers 0x40 => SetPassengers
0x41 => Teams_u8 0x41 => Teams_u8
0x42 => UpdateScore 0x42 => UpdateScore
0x43 => SpawnPosition 0x43 => SpawnPosition_NoAngle
0x44 => TimeUpdate 0x44 => TimeUpdate
0x45 => Title_notext 0x45 => Title_notext
0x46 => UpdateSign 0x46 => UpdateSign
@ -115,7 +115,7 @@ protocol_packet_ids!(
0x48 => PlayerListHeaderFooter 0x48 => PlayerListHeaderFooter
0x49 => CollectItem_nocount 0x49 => CollectItem_nocount
0x4a => EntityTeleport_f64 0x4a => EntityTeleport_f64
0x4b => EntityProperties 0x4b => EntityProperties_VarInt
0x4c => EntityEffect 0x4c => EntityEffect
} }
} }

View File

@ -688,6 +688,7 @@ pub enum PoseData {
SpinAttack, SpinAttack,
Sneaking, Sneaking,
Dying, Dying,
LongJumping,
} }
impl Serializable for PoseData { impl Serializable for PoseData {
@ -701,6 +702,7 @@ impl Serializable for PoseData {
4 => PoseData::SpinAttack, 4 => PoseData::SpinAttack,
5 => PoseData::Sneaking, 5 => PoseData::Sneaking,
6 => PoseData::Dying, 6 => PoseData::Dying,
7 => PoseData::LongJumping,
_ => panic!("unknown pose data: {}", n.0), _ => panic!("unknown pose data: {}", n.0),
}) })
} }

View File

@ -595,6 +595,7 @@ impl Server {
KeepAliveClientbound_i64 => on_keep_alive_i64, KeepAliveClientbound_i64 => on_keep_alive_i64,
KeepAliveClientbound_VarInt => on_keep_alive_varint, KeepAliveClientbound_VarInt => on_keep_alive_varint,
KeepAliveClientbound_i32 => on_keep_alive_i32, KeepAliveClientbound_i32 => on_keep_alive_i32,
ChunkData_Biomes3D_Bitmasks => on_chunk_data_biomes3d_bitmasks,
ChunkData_Biomes3D_VarInt => on_chunk_data_biomes3d_varint, ChunkData_Biomes3D_VarInt => on_chunk_data_biomes3d_varint,
ChunkData_Biomes3D_bool => on_chunk_data_biomes3d_bool, ChunkData_Biomes3D_bool => on_chunk_data_biomes3d_bool,
ChunkData => on_chunk_data, ChunkData => on_chunk_data,
@ -611,6 +612,7 @@ impl Server {
MultiBlockChange_Packed => on_multi_block_change_packed, MultiBlockChange_Packed => on_multi_block_change_packed,
MultiBlockChange_VarInt => on_multi_block_change_varint, MultiBlockChange_VarInt => on_multi_block_change_varint,
MultiBlockChange_u16 => on_multi_block_change_u16, MultiBlockChange_u16 => on_multi_block_change_u16,
TeleportPlayer_WithDismount => on_teleport_player_withdismount,
TeleportPlayer_WithConfirm => on_teleport_player_withconfirm, TeleportPlayer_WithConfirm => on_teleport_player_withconfirm,
TeleportPlayer_NoConfirm => on_teleport_player_noconfirm, TeleportPlayer_NoConfirm => on_teleport_player_noconfirm,
TeleportPlayer_OnGround => on_teleport_player_onground, TeleportPlayer_OnGround => on_teleport_player_onground,
@ -1552,6 +1554,21 @@ impl Server {
self.entity_map.insert(entity_id, entity); self.entity_map.insert(entity_id, entity);
} }
fn on_teleport_player_withdismount(
&mut self,
teleport: packet::play::clientbound::TeleportPlayer_WithDismount,
) {
self.on_teleport_player(
teleport.x,
teleport.y,
teleport.z,
teleport.yaw as f64,
teleport.pitch as f64,
teleport.flags,
Some(teleport.teleport_id),
)
}
fn on_teleport_player_withconfirm( fn on_teleport_player_withconfirm(
&mut self, &mut self,
teleport: packet::play::clientbound::TeleportPlayer_WithConfirm, teleport: packet::play::clientbound::TeleportPlayer_WithConfirm,
@ -1928,6 +1945,23 @@ impl Server {
} }
} }
fn on_chunk_data_biomes3d_bitmasks(
&mut self,
chunk_data: packet::play::clientbound::ChunkData_Biomes3D_Bitmasks,
) {
self.world
.load_chunk117(
chunk_data.chunk_x,
chunk_data.chunk_z,
true,
chunk_data.bitmasks.data[0] as u64, // TODO: get all bitmasks
16, // TODO: get all bitmasks
chunk_data.data.data,
)
.unwrap();
self.load_block_entities(chunk_data.block_entities.data);
}
fn on_chunk_data_biomes3d_varint( fn on_chunk_data_biomes3d_varint(
&mut self, &mut self,
chunk_data: packet::play::clientbound::ChunkData_Biomes3D_VarInt, chunk_data: packet::play::clientbound::ChunkData_Biomes3D_VarInt,

View File

@ -28,6 +28,7 @@ use flate2::read::ZlibDecoder;
use std::cmp::Ordering; use std::cmp::Ordering;
use std::collections::HashMap; use std::collections::HashMap;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::convert::TryInto;
use std::hash::BuildHasherDefault; use std::hash::BuildHasherDefault;
use std::io::Read; use std::io::Read;
@ -620,8 +621,8 @@ impl World {
Ok(()) Ok(())
} }
fn dirty_chunks_by_bitmask(&mut self, x: i32, z: i32, mask: u16) { fn dirty_chunks_by_bitmask(&mut self, x: i32, z: i32, mask: u64, num_sections: usize) {
for i in 0..16 { for i in 0..num_sections {
if mask & (1 << i) == 0 { if mask & (1 << i) == 0 {
continue; continue;
} }
@ -637,6 +638,7 @@ impl World {
{ {
self.flag_section_dirty(x + pos.0, i as i32 + pos.1, z + pos.2); self.flag_section_dirty(x + pos.0, i as i32 + pos.1, z + pos.2);
} }
let i: i32 = i.try_into().unwrap();
self.update_range( self.update_range(
(x << 4) - 1, (x << 4) - 1,
(i << 4) - 1, (i << 4) - 1,
@ -737,7 +739,7 @@ impl World {
chunk.calculate_heightmap(); chunk.calculate_heightmap();
} }
self.dirty_chunks_by_bitmask(x, z, mask); self.dirty_chunks_by_bitmask(x, z, mask.into(), 16);
Ok(()) Ok(())
} }
@ -965,7 +967,7 @@ impl World {
chunk.calculate_heightmap(); chunk.calculate_heightmap();
} }
self.dirty_chunks_by_bitmask(x, z, mask); self.dirty_chunks_by_bitmask(x, z, mask.into(), 16);
Ok(()) Ok(())
} }
@ -977,7 +979,7 @@ impl World {
mask: u16, mask: u16,
data: Vec<u8>, data: Vec<u8>,
) -> Result<(), protocol::Error> { ) -> Result<(), protocol::Error> {
self.load_chunk19_or_115(true, x, z, new, mask, data) self.load_chunk19_to_117(true, x, z, new, mask.into(), 16, data)
} }
pub fn load_chunk115( pub fn load_chunk115(
@ -988,17 +990,30 @@ impl World {
mask: u16, mask: u16,
data: Vec<u8>, data: Vec<u8>,
) -> Result<(), protocol::Error> { ) -> Result<(), protocol::Error> {
self.load_chunk19_or_115(false, x, z, new, mask, data) self.load_chunk19_to_117(false, x, z, new, mask.into(), 16, data)
}
pub fn load_chunk117(
&mut self,
x: i32,
z: i32,
new: bool,
mask: u64,
num_sections: usize,
data: Vec<u8>,
) -> Result<(), protocol::Error> {
self.load_chunk19_to_117(false, x, z, new, mask, num_sections, data)
} }
#[allow(clippy::or_fun_call)] #[allow(clippy::or_fun_call)]
fn load_chunk19_or_115( fn load_chunk19_to_117(
&mut self, &mut self,
read_biomes: bool, read_biomes: bool,
x: i32, x: i32,
z: i32, z: i32,
new: bool, new: bool,
mask: u16, mask: u64,
num_sections: usize,
data: Vec<u8>, data: Vec<u8>,
) -> Result<(), protocol::Error> { ) -> Result<(), protocol::Error> {
use crate::protocol::{LenPrefixed, Serializable, VarInt}; use crate::protocol::{LenPrefixed, Serializable, VarInt};
@ -1016,7 +1031,7 @@ impl World {
} }
let chunk = self.chunks.get_mut(&cpos).unwrap(); let chunk = self.chunks.get_mut(&cpos).unwrap();
for i in 0..16 { for i in 0..num_sections {
if chunk.sections[i].is_none() { if chunk.sections[i].is_none() {
let mut fill_sky = chunk.sections.iter().skip(i).all(|v| v.is_none()); let mut fill_sky = chunk.sections.iter().skip(i).all(|v| v.is_none());
fill_sky &= (mask & !((1 << i) | ((1 << i) - 1))) == 0; fill_sky &= (mask & !((1 << i) | ((1 << i) - 1))) == 0;
@ -1101,7 +1116,7 @@ impl World {
chunk.calculate_heightmap(); chunk.calculate_heightmap();
} }
self.dirty_chunks_by_bitmask(x, z, mask); self.dirty_chunks_by_bitmask(x, z, mask, num_sections);
Ok(()) Ok(())
} }