diff --git a/Cargo.lock b/Cargo.lock index 549fef0..0d7904f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1471,6 +1471,7 @@ dependencies = [ "ncr", "parking_lot", "serde_json", + "smallvec", "tokio", "zip", ] diff --git a/Cargo.toml b/Cargo.toml index b7046ce..b1610fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ mlua = { version = "0", features = ["async", "luajit", "send"] } ncr = { version = "0", features = ["cfb8", "ecb", "gcm"] } parking_lot = "0" serde_json = "1" +smallvec = { version = "1", features = ["write"] } tokio = { version = "1", features = ["macros"] } zip = "2" diff --git a/src/lua/block.rs b/src/lua/block.rs index cda10e5..21d11f1 100644 --- a/src/lua/block.rs +++ b/src/lua/block.rs @@ -41,7 +41,7 @@ pub async fn get_block_states( lua: Lua, (block_names, filter_fn): (Vec, Option), ) -> Result> { - let mut matched = Vec::new(); + let mut matched = Vec::with_capacity(16); for block_name in block_names { for block in (u32::MIN..u32::MAX).map_while(|possible_id| BlockState::try_from(possible_id).ok()) diff --git a/src/lua/client/mod.rs b/src/lua/client/mod.rs index 997eaee..cc811de 100644 --- a/src/lua/client/mod.rs +++ b/src/lua/client/mod.rs @@ -109,11 +109,7 @@ fn id(_lua: &Lua, client: &Client) -> Result { } fn tab_list(_lua: &Lua, client: &Client) -> Result> { - let mut tab_list = Vec::new(); - for (_, player_info) in client.tab_list() { - tab_list.push(Player::from(player_info)); - } - Ok(tab_list) + Ok(client.tab_list().into_values().map(Player::from).collect()) } fn username(_lua: &Lua, client: &Client) -> Result { diff --git a/src/lua/client/world/mod.rs b/src/lua/client/world/mod.rs index 54bc9da..8991df0 100644 --- a/src/lua/client/world/mod.rs +++ b/src/lua/client/world/mod.rs @@ -56,7 +56,7 @@ pub async fn find_all_entities( client: UserDataRef, (): (), ) -> Result> { - let mut matched = Vec::new(); + let mut matched = Vec::with_capacity(256); for (position, custom_name, kind, uuid, direction, id, owner_uuid, pose) in get_entities!(client) { diff --git a/src/lua/player.rs b/src/lua/player.rs index 5734c7f..8d09103 100644 --- a/src/lua/player.rs +++ b/src/lua/player.rs @@ -13,7 +13,7 @@ pub struct Player { impl From for Player { fn from(p: PlayerInfo) -> Self { Self { - display_name: p.display_name.map(|n| n.to_string()), + display_name: p.display_name.map(|text| text.to_string()), gamemode: p.gamemode.to_id(), latency: p.latency, name: p.profile.name, diff --git a/src/replay/mod.rs b/src/replay/mod.rs index 8debaf5..9ba2644 100644 --- a/src/replay/mod.rs +++ b/src/replay/mod.rs @@ -8,6 +8,7 @@ use azalea::{ protocol::packets::{PROTOCOL_VERSION, ProtocolPacket, VERSION_NAME}, }; use serde_json::json; +use smallvec::SmallVec; use std::{ fs::File, io::Write, @@ -72,15 +73,16 @@ impl Recorder { } fn save_raw_packet(&mut self, raw_packet: &[u8]) -> Result<()> { - let mut data = Vec::from(self.get_timestamp()?); - data.extend(TryInto::::try_into(raw_packet.len())?.to_be_bytes()); + let mut data = Vec::with_capacity(raw_packet.len() + 8); + data.extend(self.get_timestamp()?); + data.extend(&TryInto::::try_into(raw_packet.len())?.to_be_bytes()); data.extend(raw_packet); self.zip_writer.write_all(&data)?; Ok(()) } fn save_packet(&mut self, packet: &T) -> Result<()> { - let mut raw_packet = Vec::new(); + let mut raw_packet = SmallVec::<[u8; 256]>::new(); packet.id().azalea_write_var(&mut raw_packet)?; packet.write(&mut raw_packet)?; self.save_raw_packet(&raw_packet)